Последствия защищенной переменной, начинающейся с _ и атрибута CLSCompliant - PullRequest
0 голосов
/ 08 ноября 2011

У нас есть некоторый код на C #, в котором есть защищенные переменные, имена которых были названы подчеркиванием

protected string _name;
public string Name
{
   get
   {
      return _name;
   }
   set
   {
      _name = value;
   }
}

Это генерирует предупреждения о соответствии CLS, поскольку CLS не любит подчеркивания в начале.Каковы последствия пометки защищенной переменной с помощью [CLSCompliant (false)]?Я даже не знаю, с какими языками это проблема, чтобы проверить вещи.Если _name просто недоступен, это хорошо для наших целей, но если это вызывает двусмысленность имен, это не так.

1 Ответ

1 голос
/ 08 ноября 2011

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

С точки зрения дизайна мне интересно, почему у вас есть защищенное вспомогательное поле, когда публичное (а не виртуальное) свойство позволяет получать и устанавливать напрямую. В чем смысл? В этом случае предоставление наследникам доступа к вспомогательному полю не дает никаких преимуществ и делает невозможным изменение реализации свойства Name.

...