Как задать для свойства C # Auto-Property значение по умолчанию? Я либо использую конструктор, либо возвращаюсь к старому синтаксису.
Использование конструктора:
class Person
{
public Person()
{
Name = "Default Name";
}
public string Name { get; set; }
}
... Нам часто говорят, что мы должны защищать инкапсуляцию, создавая методы получения и установки (свойства в C #) для полей класса, вместо того, чтобы выставлять поля внешнему миру.
Но во многих случаях поле просто для хранения значения и не требует каких-либо
...Я привык писать такие классы:
public class foo {
private string mBar = "bar";
public string Bar {
get { return mBar; }
set { mBar = value; }
}
//... other methods, no constructor ...
}
Преобразование Bar в
...Примечание: Это было опубликовано, когда я начинал C #. Обладая знаниями 2014 года, я могу с уверенностью сказать, что авто-свойства являются одними из лучших вещей, которые когда-либо случались с языком C #.
Я использую для создания своих свойств в C
...Я понимаю, что это, кажется, дубликат В чем разница между полем и свойством в C #? но у моего вопроса есть небольшая разница (с моей точки зрения):
Однажды я знаю, что
Оббираясь вокруг некоторых небольших структур, отвечая на этот пост , я неожиданно наткнулся на следующее:
Следующая структура, использующая поле int, является абсолютно допустимой:
struct MyStruct
{
public MyStruct ( int size )
{
this.Size = size; // <-- Legal assignment.
... Я немного запутался в том, что касается автоматических свойств в C # e. г
public string Forename{ get; set; }
Я понял, что вы сохраняете код, не объявляя частную переменную, но какой смысл иметь свойство, когда вы не используете логику
...Мне нужно десериализовать некоторый объект JavaScript, представленный в JSON, в соответствующий класс C #. Учитывая приятные возможности автоматических свойств, я бы предпочел иметь их в этих классах, а не просто иметь поля. К сожалению, Модуль сериализации NET (по крайней мере,
...Как можно предотвратить сериализацию автоматически реализуемого свойства двоичным форматером? Атрибут [NonSerialized] можно использовать только с полями. И поле скрыто при использовании автоматически реализованных свойств.
C # имеет автоматические свойства, которые значительно упрощают ваш код:
public string Name { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
В то время как на Java вы написали этот
...Автоматические свойства позволяют мне заменить этот код:
private MyType myProperty;
public MyType MyProperty
{
get { return myPropertyField; }
}
с этим кодом:
public MyType MyProperty { get; private set; }
с некоторыми изменениями здесь и там - но есть
...У меня такая ситуация:
public abstract class BaseClass
{
public abstract string MyProp { get; }
}
Теперь для некоторых производных классов значение свойства представляет собой синтезированные значения, поэтому нет установщика:
public class Derived1 : BaseClass
{
public override string
... Для C # я ненавижу записывать переменные, а затем записывать все свойства. Разве нет способа выбрать все переменные, щелкнуть правой кнопкой мыши и создать все свойства.