C# 中的“不一致的可访问性”

本文关键字:访问 中的 不一致 | 更新日期: 2023-09-27 18:30:37

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

这是我给出错误的代码

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# 中的“不一致的可访问性”

您需要

RN_BUDGET_SETTINGS类定义为Public

public class RN_BUDGET_SETTINGS : RN_AUDIT
{
}

或将预算设置定义为内部/私有:

private RN_BUDGET_SETTINGS aBudgetSettings = null;

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

默认情况下,类是内部的,其中未指定访问修饰符。您需要公开RN_BUDGET_SETTINGS

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
}

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

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

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

因为默认情况下类是内部的。

class RN_BUDGET_SETTINGS : RN_AUDIT

public class RN_BUDGET_SETTINGS : RN_AUDIT