2016-09-26 1 views
0

В C# существует ли способ предотвратить доступ класса к одному из его собственных полей?Предотвратить доступ класса к одному из его собственных полей

Например:

class MyClass() 
{ 
    private object field; 
    public object Property 
    { 
     get { return field; } 
     set { field = value; } 
    } 

    public void myMethod() 
    { 
     field = null; // forbidden 
     Property = null; // allowed 
    } 
} 

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

+6

Как еще вы ожидаете установить значение свойства? Если вы хотите только установить его в конструкторе, вы можете сделать его «readonly»? Хотя, честно говоря, я не совсем уверен, чего вы пытаетесь достичь здесь. – DavidG

+1

Я объясню больше –

+2

Вы не доверяете коду в своем классе? –

ответ

2

Нет. Невозможно предотвратить доступ класса к его собственному полю, если вы хотите установить его значение в какой-то момент в аксессуре.

+0

Технически это неверно, существует ключевое слово 'readonly', которое предотвращает определенный доступ. – DavidG

+0

@DavidG, но это помешает OP установить значение в аксессуре. Я изменил свой ответ, чтобы сделать это ясно - спасибо за критику. – PhillipH

+0

Как насчет использования наследования, чтобы скрыть личное поле? Я хочу сказать, что это неверно. – DavidG

1

Таким образом, вам не нужно поле поддержки. Но я не думаю, что вы ищете такие.

Class MyClass() 
{ 
    public object Property { get; set; } 

    public void myMethod() 
    { 
     Property = null; // allowed 
    } 
} 
+0

С 'Property {get ; задавать; } 'Я могу добавить методы/тесты в' set' (см. Мое редактирование). –

Смежные вопросы