Я использую .NET 4.5 в добавлении VSTO для Outlook 2013. У меня есть некоторые проблемы с полным пониманием свойств и аксессуаров. Автоматически реализованные аксессоры, которые я предполагаю, когда вы просто пишете get; задавать; а не получать {//code} и т.д., также дают мне проблемы. У меня есть словарь, который я использую внутри себя в своем классе. Вот мой код:
private Dictionary<string, string> clientDict { get; set; }
private Dictionary<string, string> clientHistoryDict { get; set; }
а затем:
clientDict = new Dictionary<string, string>();
clientHistoryDict = new Dictionary<string, string>();
Я использую те же имена, что и свойства в коде, в том же классе.
Я никогда не пишу:
private Dictionary<string, string> _clientDict; // etc.
чтобы создать переменные, которыми я просто использовал свойство напрямую.
Я попытался изменить свой код, чтобы сделать это, и у меня были некоторые проблемы, и я понял, что мое понимание свойств немного перепутано.
Вот несколько вопросов, которые мне нужно уточнить, что я не могу найти правильный ответ.
Во-первых, есть ли основания использовать частную собственность? Мои словари никогда не доступны вне класса или в любых производных классах, поэтому есть ли причина использовать свойства? Я не использую никакой специальной проверки или ничего в установщике или что-то в этом роде.
Во-вторых, когда я пытался изменить свой код, чтобы использовать переменные, а затем получить к ним доступ через свойства, подобные вашему типичному примеру свойств, я столкнулся с проблемами. Я нашел пример, в котором у получателя было значение return _clientDict
, но установщик был просто set;
. Он дал мне ошибку: я должен дать набор тела, потому что он не абстрактный или частичный. Почему в этом случае он не будет автоматически реализовывать сеттер для меня?
Наконец, когда я вызываю new в свойствах того же класса, в котором он объявлен, в чем разница между выполнением этого свойства и обычной переменной того же типа? Действительно ли свойства отличаются от переменных в этом случае? Неправильная практика использовать свойства таким образом, когда это должно быть выполнено с помощью частных переменных?
Это могут быть некоторые ошибочные вопросы, но я не могу найти другого места, в котором есть информация, которая поможет мне понять эти различия. Я играю со свойствами, чтобы попытаться понять все это, но я мог бы использовать так, чтобы мне помогали.