【问题标题】:"Inconsistent accessibility" in C#C# 中的“不一致的可访问性”
【发布时间】:2013-09-12 22:02:51
【问题描述】:

我在 C# 中遇到了一个奇怪的错误。我的代码给出了错误“不一致的可访问性:字段类型'Rotanet.RN_BUDGET_SETTINGS'比字段'Rotanet.BudgetSettingsDetailFrm.aBudgetSettings'更难访问”。我知道这是关于 PUBLIC/PROTECTED/PRIVATE 的事情,但我不明白我应该怎么做才能解决它。

这是我给出错误的代码

namespace Rotanet
{
  public partial class BudgetSettingsDetailFrm : DevExpress.XtraEditors.XtraForm
  {
    public RN_BUDGET_SETTINGS aBudgetSettings = null; //***** this gives the error

    public BudgetSettingsDetailFrm()
    {
        InitializeComponent();
    }

    private void btnSave_Click(object sender, EventArgs e)
    {

    }
  }
}

RN_BUDGET_SETTINGS 是一个简单的类,如下所示...

namespace Rotanet
{
  class RN_BUDGET_SETTINGS : RN_AUDIT
  {

    public RN_BUDGET_SETTINGS()
    {
    }
    #region Properties
    [IsKey(true)]
    public dynamic ID { get; set; }
    public dynamic TANIM { get; set; }
    public dynamic DEGER { get; set; }
    #endregion

  }
}

我该如何解决这个问题

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您需要将RN_BUDGET_SETTINGS 类定义为Public

    public class RN_BUDGET_SETTINGS : RN_AUDIT
    {
    
    }
    

    或将 aBudgetSettings 定义为内部/私有:

    private RN_BUDGET_SETTINGS aBudgetSettings = null;
    

    您的问题是您已经定义了一个公共字段,因此它在您的项目之外是可见的,但是您可以读取/写入该字段的类不是公共的。在外部,这意味着您可以设置一个值,但您没有被告知有关您可以设置的东西的合同/信息。

    【讨论】:

    • 不,默认情况下,类和其他符号是内部的
    • @ayilmaz 不,不是。默认是内部的
    • @Darkzaelus:顶级类型默认是内部的;任何声明within类型的成员默认都是私有的(除了在接口中,成员只能是公共的)
    • @JonSkeet:我想我应该提出一个名为“Beat the Skeet”的新徽章,该徽章会奖励在你得到回应之前出现的任何体面的答案(当没有必要再尝试时) !)
    • @JonSkeet 感谢您的澄清!我会复习一下规范
    【解决方案2】:

    类默认为internal,没有指定访问修饰符。你需要使RN_BUDGET_SETTINGSpublic:

    public class RN_BUDGET_SETTINGS : RN_AUDIT
    {
       public RN_BUDGET_SETTINGS()
       {
       }
       #region Properties
       [IsKey(true)]
       public dynamic ID { get; set; }
       public dynamic TANIM { get; set; }
       public dynamic DEGER { get; set; }
       #endregion
    }
    

    【讨论】:

      【解决方案3】:

      RN_BUDGET_SETTINGS 没有标记任何访问修饰符,因此它接收类的默认访问,这是内部的。

      http://msdn.microsoft.com/en-us/library/ms173121.aspx

      “直接在命名空间中声明的类和结构(换句话说,不嵌套在其他类或结构中)可以是公共的或内部的。如果没有指定访问修饰符,则默认为内部。”

      【讨论】:

        【解决方案4】:

        因为类默认为Internal。改变

        class RN_BUDGET_SETTINGS : RN_AUDIT
        

        public class RN_BUDGET_SETTINGS : RN_AUDIT
        

        【讨论】:

          猜你喜欢
          • 2015-08-11
          • 2013-06-20
          • 1970-01-01
          • 2011-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-01
          相关资源
          最近更新 更多