2013-06-17 3 views
-4

Как я могу знать, какой один из следующих мне нужно использовать:C# свойство получить частный набор

public int Dollar { get; set }; 
public int Dollar { get; private set }; 
private int Dollar { get; set }; 
private int Dollar { get; private set }; 

Когда я программирования я всегда спрашиваю себя, какой из них следует использовать. Кто-нибудь, кто может объяснить мне, как я могу узнать, какой из них мне нужно использовать?

+2

как вы используете доллар? .. – Sayse

+1

Третий и четвертый варианты, которые вы предоставили, одинаковы. – Servy

+0

Например, чтобы показать его на экране. – Swag

ответ

8
public int Dollar { get; set }; 

доллар можно получить и установить по всей заявке

public int Dollar { get; private set }; 

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

private int Dollar { get; set }; 

только класс, содержащий доллар могут использовать Доллар

EDI T

Примечание. Открытое поле также можно получить за пределами приложения, если известно, как его реализовать. Internal сделает это так, только приложение может использовать свойство

EDIT 2

Как другие указали следующее сообщение об ошибке компилятора.

private int Dollar { get; private set }; 

Доступность модификатор аксессору в «ConsoleApplication1.Program.Dollar.set» должны быть более ограничительными, чем собственности или индексатор

+0

Обратите внимание, что последний случай является излишним. Свойство уже «частное», поэтому нет смысла указывать сеттер как «private». –

+0

@MattBurland - я оставил его как таковой. OP читает код, который был рефакторирован и т. Д. :) – Sayse

+0

Не будет последнего 'private int Dollar {get; private set}; 'действительно вызывает ошибку компиляции? –

0

Если вы используете доллар таким образом, что вам нужно поля должны быть общедоступными, а затем публичными. В противном случае, если вы обращаетесь к Доллару только в том классе, в котором он определен, используйте private.

Мое эмпирическое правило делает все частным, если не существует какого-либо требования, которое заставляет поле быть общедоступным.

3

Имеет ли какой-либо другой код вне вашего класса доступ к Dollar? Если нет, то вы должны использовать:

private int Dollar { get; set; }  

Обратите внимание, что нет установки сеттер в частную собственность, если частная точка. Вы также можете задать вопрос о том, нужно ли вам вообще иметь собственность и может ли быть более подходящим частное поле.

Если другой код требуется только доступ для чтения, то:

public int Dollar { get; private set; } 

Если другой код должен быть в состоянии читать и установить Dollar:

public int Dollar { get; set; } 

Если вам нужно производные классы, чтобы иметь возможность (но не производные классы), заменить private на protected

0

Если он используется только внутренне - сделайте его закрытым (или просто частная переменная, а не свойство).

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

В противном случае сделайте общедоступным.

2

Смотрите комментарии ниже

1) public int Dollar { get; set; } 

вы можете получить доступ к этой недвижимости из любого места в application.Get и Set доступными.

2) public int Dollar { get; private set; } 

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

3) private int Dollar { get; set; } 

Доступ к нему возможен только внутри класса.

4) private int Dollar { get; private set; } 

Синтаксическая ошибка.

+0

Его не ошибка синтаксиса – Sayse

+0

@Sayse: Это ошибка компиляции, хотя: 'Модификатор доступности Аксессуар «MyClass.Test.set» должен быть более строгим, чем свойство или индекс «MyClass.Test» – Cemafor

+1

@Cemafor - Ах, так оно и есть, я тестировал синтаксис, но не компилировал ^. ^ – Sayse

1

Как говорили другие, это зависит от использования.

Если вы очень богаты, сделайте свои доллары частными, иначе низшие классы будут ревновать к вашей собственности. :)

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