Какую схему именования C # можно использовать для Property & Member, которая совместима с CLS? - PullRequest
5 голосов
/ 27 ноября 2011

Рассмотрим следующий код, который не совместим с CLS ( отличается только в случае ):

protected String username;

public String Username { get { return username;} set { username = value; } }

Поэтому я изменил его на:

protected String _username;

public String Username { get { return _username;} set { _username = value; } }

Какойтакже не соответствует CLS ( имеет начальное подчеркивание ).

Существует ли какая-либо общая схема именования для элементов / свойств, которая не нарушает соответствие cls

Ответы [ 4 ]

5 голосов
/ 27 ноября 2011

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

private String username;

public virtual String Username { get { return username;} set { username = value; } }

Наследование не должно знать ничего о реализации ваших классов.

См. Лучший способ выставить защищенные поля

2 голосов
/ 27 ноября 2011

Этот набор правил применяется к Visual Basic, но должен быть аналогичный набор для C #:

Имя элемента в Visual Basic должно соответствовать следующим правилам:

Оно должно начинаться с буквенного символа или подчеркивания (_).

Он должен содержать только буквенные символы, десятичные цифры и подчеркивания.

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

Длина не должна превышать 1023 символа.

Однако применимо также следующее:

Имена элементов, начинающиеся с подчеркивания (_), не являются частью Спецификации общего языка (CLS), поэтому CLS-совместимый код не может использовать компонент, определяющий такие имена. Однако подчеркивание в любой другой позиции в имени элемента является CLS-совместимым.

Выше приведено в документации MSDN .

Вот ссылка на документацию общего языка документацию по MSDN, которая, в свою очередь, ссылается на окончательного арбитра соглашения о присвоении имен CLS: Приложение 7 к Техническому отчету 15 стандарта Unicode 3.0 .

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

МФЦ на помощь.Просто используйте старый префикс m_:

private string m_Username;
public string Username ...
0 голосов
/ 27 ноября 2011

Чего вы пытаетесь достичь с помощью этого?

public String Username {get; protected set};

или

private String _username;

protected void setUserName(String argUsername);
{
  if (_username != Username) // an overload of String.Compare would be better here
  {
    _username = value;
    // Do the stuff you have to do because username has changed
  }
}

public String Username {get {return _username;} protected set {setUsername(value);}}

По-вашему, чтобы добиться соответствия CLS, вам придется называть разные версии для Pulic и Prtectred.имена, которые были бы беспорядочными.

...