2013-09-09 3 views
0

У меня возникла странная ошибка в C#. Мой код дает ошибку «Непоследовательная доступность: тип поля« Rotanet.RN_BUDGET_SETTINGS »менее доступен, чем поле« Rotanet.BudgetSettingsDetailFrm.aBudgetSettings ». Я знаю, что речь идет о PUBLIC/PROTECTED/PRIVATE, но я не мог понять, что я должен сделать, чтобы исправить это.«Непостоянная доступность» в C#

вот мой код, который дает ошибку

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 

    } 
} 

Как я могу исправить эту проблему

ответ

5

Вам нужно для определения класса RN_BUDGET_SETTINGS как Public:

public class RN_BUDGET_SETTINGS : RN_AUDIT 
{ 

} 

или определить aBudgetSettings как внутренние/частные:

private RN_BUDGET_SETTINGS aBudgetSettings = null; 

Ваша проблема заключается в том, что вы определили открытое поле, так что видны за пределами вашего проекта, однако класс, который вы можете прочитать/записи в поле не является публичным. Внешне это означает, что вы можете установить значение, но вам не сообщили контракт/информацию о том, что вы можете установить.

+0

уже публично, не правда ли? –

+3

Нет, по умолчанию классы и другие символы являются внутренними – Darkzaelus

+0

@ayilmaz нет, это не так. он является внутренним по defualt – Ehsan

1

Классы - 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 
} 
1

Класс RN_BUDGET_SETTINGS не маркирован с любым модификатором доступа, поэтому он получает доступ по умолчанию для классов, который является внутренним.

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

«Классы и структуры, которые объявляются непосредственно в пространстве имен (другими словами, которые не вложены в другие классы или структуры) могут быть государственные или внутренний. Внутренний, если по умолчанию нет модификатора доступа ».

1

По умолчанию класс Internal. изменяются

class RN_BUDGET_SETTINGS : RN_AUDIT 

в

public class RN_BUDGET_SETTINGS : RN_AUDIT