Я столкнулся с этой проблемой на python 3.4 со следующей ситуацией:
host1
) После добавления следующей записи в файл /etc/hosts
никакие дополнительные UnicodeDecodeError
исключения не были брошены.
127.0.0.1 localhost host1
Помимо двух упомянутых вами, в C # очень распространено отсутствие префикса для закрытых членов.
class Foo
{
private int i;
private string id;
}
Это то, что я использую, а также то, что рекомендуется в внутренних указаниях Microsoft по именованию .
Как отметил Брэд Абрамс: внутренние правила кодирования :
Не используйте префикс для переменных-членов (
_
,m_
,s_
и т. Д.) .). Если вы хотите различать локальные переменные и переменные-члены, вы должны использовать «this.
» в C # и «Me.
» в VB.NET.
Я думаю, что важным принципом здесь является то, что вы последовательны. Используйте префикс «_» или «m», если это то, что вам нравится делать, и это согласуется с остальным кодом, с которым вы работаете. Что бы вы ни выбрали, придерживайтесь этого и будьте последовательны.
Общее руководство от Microsoft здесь:
http://msdn.microsoft.com/en-us/library/ms229002.aspx
Автоматические свойства в C # великолепны, и я использую их тогда, когда могу, но есть случаи, когда они не работают для меня, например, при проверке типа или значения в методе set.
В общем: используйте верблюжий корпус и не ставьте свое имя перед префиксом типа подчеркивания или префикса типа.
public int Age {get; set;}
или
private int age;
public int Age
{
get { return age; }
set
{
if(value < 0)
throw new InvalidOperationException("Age > 0");
age = value;
}
}
Как я помню из чтения Framework Design Guidelines , на самом деле не существует установленного соглашения для частных переменных-членов, за исключением того, что не следует использовать венгерскую нотацию и не следует использовать заглавную букву первой буквы имени переменной ( использовать верблюжий корпус). В книге есть цитаты, которые поддерживают оба ваших примера, а также вообще не используют префиксы.
Лично я предпочитаю префикс "m_".
Я лично всегда использовал ваш первый пример:
public class Foo
{
private int _i;
private string _id;
}
Фактически, это то, что использует вся моя команда. Кроме того, тот, который вы упомянули m_dVal
, известен как венгерская нотация, здесь есть статья в Википедии . Венгерская нотация фактически противоречит стандартам кодирования наших команд, поэтому я никогда не использую ее.
Я предпочитаю подчеркивание в качестве префикса для частных неконстантных неконтролируемых полей. Зачем? Причины: 1. Просто глядя на переменную, я могу различить поле & amp; локальная / переменная параметра. Используя «это». для всех полей это не вариант - его дольше. 2. Существует двусмысленность между параметром и полем:
class Foo
{
private int id;
public Foo(int id)
{
id = id; //Will compile and work fine. But field will not be initialized.
}
}
Я склонен придерживаться первого соглашения, простого подчеркивания. Я также не указываю тип в имени, потому что мне Intellisense говорит, что это такое (я знаю, это может быть опора).
Лучше всего посоветоваться с коллегами или коллегами по проекту и просто принять решение о соглашении, некоторые из них являются произвольными.
Я предпочитаю вообще не использовать префикс для переменных-членов. Для тех, кто объявлен вне метода, я использую «this.memberVariableName», чтобы отличать их от тех, которые объявлены внутри метода.
Я предпочитаю использовать ваш первый пример или автоматические свойства, подобные этим, чтобы избежать определения частных полей в вашем класс вообще:
public String MyString { get; set; }
Используйте фрагмент prop
, чтобы сделать их ДЕЙСТВИТЕЛЬНО быстрыми.
Лучше всего использовать то, что уже используется в проекте. Если вы начинаете новый проект, используйте то, что чаще всего используется в компании.
В C ++ идентификаторы, начинающиеся с _, считаются плохой практикой, их следует оставить для внутреннего использования. Я думаю, именно поэтому префикс имени переменной с _ иногда считается плохой практикой и в C # ... хотя нет никаких причин, почему вы не можете сделать это, поскольку все внутренние компоненты .NET инкапсулированы должным образом, в отличие от C / C ++ стандартные библиотеки.