Это будет иметь никакой эффект.
Часть рекомендаций для записи CLS-совместимых библиотек не должна иметь двух общедоступных/защищать объектов, которые отличаются только случаем, например, Вы должны НЕ , имеют
public void foo() {...}
и
public void Foo() {...}
, что Вы описываете, не проблема, потому что частный объект не доступен пользователю библиотеки
После работы в среде, которая имела очень определенные и очень бессмысленные правила стиля с тех пор, я продолжал создавать свой собственный стиль. Это - один тип, на котором я зеркально отразил назад и вперед много. Я наконец решил, что частные поля всегда будут _field, локальные переменные никогда не будут иметь _ и будут нижним регистром, имена переменной для средств управления будут свободно следовать за Венгерской записью, и параметры обычно будут Camel-регистром.
я ненавижу this.
ключевое слово, оно просто добавляет слишком много шума кода, по-моему. Я люблю Resharper, удаляют избыточный это. ключевое слово.
6-летнее обновление: я анализировал внутренности Dictionary<TKey,T>
для определенного использования параллельного доступа и неправильно читал частное поле, чтобы быть локальной переменной. Частные поля определенно не должны быть тем же соглашением о присвоении имен как локальные переменные. Если бы было подчеркивание, то это было бы невероятно очевидно.
Взятый от Microsoft StyleCop Help file:
TypeName: FieldNamesMustNotBeginWithUnderscore
CheckId: Причина SA1309
: имя поля А в C# начинается с подчеркивания.
Описание Правила:
нарушение А этого правила происходит, когда имя поля начинается с подчеркивания.
По умолчанию, StyleCop запрещает использование символов нижнего подчеркивания, m _, и т.д., для маркировки полей локального класса, в пользу вЂthis. Префикс ’. Преимущество использования вЂthis. ’ - то, что это применяется одинаково ко всем типам элемента включая методы, свойства, и т.д., и не только поля, выполняя все вызовы для классификации участников, немедленно распознаваемых, независимо от которого редактор используется для просмотра кода. Другое преимущество состоит в том, что это создает быстрое, распознаваемое дифференцирование между членами экземпляра и статическими участниками, которые не будут снабжены префиксом.
, Если имя поля или имя переменной предназначаются для соответствия названию объекта, связанного с Win32 или COM, и таким образом должны начаться с подчеркивания, поместить поле или переменную в специальном классе NativeMethods. Класс NativeMethods является любым классом, который содержит имя, заканчивающееся в NativeMethods, и предназначается как заполнитель для Win32 или оберток COM. StyleCop проигнорирует это нарушение, если объект будет помещен в классе NativeMethods.
А другое описание правила указывает, что предпочтительная практика в дополнение к вышеупомянутому должна запустить частные поля со строчных букв и общедоступные с прописными буквами.
Редактирование: Как развитие, страница StyleCop проекта расположена здесь: http://code.msdn.microsoft.com/sourceanalysis . Прочтение справочного файла дает большое понимание, почему они предлагают различные стилистические правила.
Так как мы говорим о частном поле, оно не влияет на пользователя Вашего класса.
, Но я рекомендую использовать подчеркивание для частного поля, потому что оно может сделать код легче понять, например:
private int foo;
public void SetFoo(int foo)
{
// you have to prefix the private field with "this."
this.foo = foo;
// imagine there's lots of code here,
// so you can't see the method signature
// when reading the following code, you can't be sure what foo is
// is it a private field, or a method-argument (or a local variable)??
if (foo == x)
{
..
}
}
В нашей команде, мы всегда используем префикс подчеркивания для частных полей. Таким образом при чтении некоторого кода, я могу очень легко определить частные поля и сказать им кроме местных жителей и аргументов. В некотором смысле, подчеркивание может пчела, рассматриваемая как краткая версия "этого".
Мне все еще действительно нравится использовать символы нижнего подчеркивания перед частными полями по причине Martin, упомянутый, и также потому что частные поля затем отсортируют вместе в IntelliSense. Это несмотря на злые из венгерских префиксных нотаций в целом.
Однако недавно я нахожу, что использование префикса подчеркивания для членов парламента, не занимающих официального поста осуждено, даже при том, что я не совсем уверен почему. Возможно, кто-то еще знает? Это - просто принцип префикса? Или было ли что-то связанное с искажением имени универсальных типов, которые получают символы нижнего подчеркивания в них в скомпилированных блоках или чем-то?
Мне нравится подчеркивание, потому что затем я могу использовать строчное имя в качестве параметров метода как это:
public class Person
{
string _firstName;
public MyClass(string firstName)
{
_firstName = firstName;
}
public string FirstName
{
get { return _firstName; }
}
}
Я думаю, что в общем и целом поля уровня класса являются ошибкой в дизайне языка. Я предпочел бы его, если свойства C# имели свой собственный локальный объем:
public int Foo
{
private int foo;
get
{
return foo;
}
set
{
foo = value;
}
}
, Который позволил бы прекратить использовать поля полностью.
единственное время я когда-либо снабжаю префиксом частное поле подчеркивание, когда свойство требует отдельного поля поддержки. Это - также единственное использование времени I частные поля. (И так как я никогда не использую защищенные, внутренние, или общедоступные поля, это - единственное время, я использую полевой период.), Что касается меня, если переменная должна иметь объем класса, это - свойство класса.
_fieldName нотация для частных полей настолько легка повредиться . Используя "это". нотацию невозможно повредить. Как Вы повредились бы _ нотация? Наблюдайте:
private void MyMethod()
{
int _myInt = 1;
return;
}
Там Вы идете, я просто нарушил Ваше соглашение о присвоении имен, но оно компилирует. Я предпочел бы иметь соглашение о присвоении имен, которое это a) не венгерский и b) явный. Я выступаю за отказ с венгерским именованием, и это квалифицирует в некотором роде. Вместо типа объекта перед именем переменной у Вас есть его уровень доступа.
Контраст это с Ruby, где название переменной @my_number
связи имя в объем и является небьющимся.
редактирование: Этот ответ пошел отрицательный. Я не забочусь, это остается.
Когда Вы хотите, чтобы Ваш блок был CLS-совместим, можно использовать атрибут CLSCompliant в assemblyinfo файле. Компилятор будет затем жаловаться, когда Ваш код будет содержать материал, который не является cls совместимый.
Затем когда у Вас есть 2 свойства, которые только отличаются в случае, если, компилятор выпустит ошибку. С другой стороны, когда у Вас есть частное поле и общественная собственность в том же классе, не будет никаких проблем.
(Но, я также всегда снабжаю префиксом своих членов парламента, не занимающих официального поста подчеркивание. Это также помогает мне прояснить, когда я прочитал свой код, что определенная переменная является членским полем).
Мне нравится использовать символы нижнего подчеркивания перед моими частными полями по двум причинам. Каждый был уже упомянут, поля стоят из своих связанных свойств в коде и в Intellisense. Вторая причина состоит в том, что я могу использовать те же соглашения о присвоении имен, кодирую ли я в VB или C#.