2014-01-30 4 views
0

Я часто испытываю трудности с назначением моих методов. Например, теперь у меня есть статический метод, который сравнивает два хэша, и я застрял с его именем. HashesEqual(string h1, string h2)? AreHashesEqual(string h1, string h2)? Ваша лучшая версия? Это общий вопрос - у меня таких вещей много. Есть ли авторитетный источник, где я могу прочитать о соглашениях об именах?Методы равенства - соглашение об именах

+0

Да, есть авторитетный источник, [MSDN] (http://msdn.microsoft.com/en-us/library/vstudio/ms229045%28v=vs.100%29.aspx). К сожалению, просить сторонние ресурсы, как правило, вне темы для SO. –

ответ

3

Из Names of Type Members на MSDN:

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

Назовите логические свойства с утвердительной фразой (CanSeek вместо CantSeek). Кроме того, вы можете также префикс Boolean properties с Is, Can или Has, но только там, где он добавляет значение.

Я думаю, что другие согласятся с тем, что любое соглашение об именах является хорошим, если оно имеет смысл, и вы используете его последовательно.


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

var equal = h1.EqualsHash(h2); // or similar, based on the naming you choose 

Или написать собственный Hash класс, который держит в хэш-значения внутренне, и переопределение/перегрузить его метод Equals и ==/!= оператор (ы), уступая в этом:

var h1 = new Hash("string1"); 
var h2 = new Hash("string2"); 

var equal = h1 == h2; 
// or 
var equal = h1.Equals(h2); 

или сделать свой служебный класс стоять в одиночку (например, HashUtil или что-то), и держать слово «хэш» из своего метода (ов) полностью:

var equal = HashUtil.AreEqual(h1, h2); 

Также см: Guidelines for Names

+0

Итак, в соответствии с частью 2 вашей цитаты, общее имя для моего метода - 'AreHashesEqual', с' Are' в начале, я правильно? – Denis

+0

@Denis: Я думаю, что это было бы приемлемо, да. –

1

Я бы предложил всем разработчикам читать .NET Design Gudelines (сопряженный это специальный раздел для членов типа). В вашем случае, потому что тип возвращаемого также логическое значение, я рекомендую вам попробовать что-то вроде:

IsHashEqual(string testHash) 
+0

И в том случае, когда мой метод имеет два параметра, имя должно быть 'AreHashesEqual', правильно? – Denis

1

только имя метода предложение предоставляется .Net Framework Guidelines, что методы должны быть

DO дать имена методов, которые являются глаголы или глагольные фразы

Я думаю, что Are ли можно квалифицировать как «глагольных фраз» и будет работать здесь.

В этом случае, хотя вы не определяете что-то новое, а скорее конкретную форму хорошо установленного шаблона: Equals.Учитывая, что моя склонность будет префикс функции с Равными так, что он показывает близко к Равным в таких функциях, как Intellisense, поиск и т.д. ...

EqualHashes(string p1, string p2) 
Смежные вопросы