Есть ли здесь соглашение об именах частного метода, который я назвал "_Add"? Я не поклонник подчеркивания, но это то, что предлагает один из моих товарищей по команде.
public Vector Add(Vector vector) {
// check vector for null, and compare Length to vector.Length
return _Add(vector);
}
public static Vector Add(Vector vector1, Vector vector2) {
// check parameters for null, and compare Lengths
Vector returnVector = vector1.Clone()
return returnVector._Add(vector2);
}
private Vector _Add(Vector vector) {
for (int index = 0; index < Length; index++) {
this[index] += vector[index];
}
return this;
}
В Руководстве по проектированию инфраструктуры для .Net docs.microsoft.com/en-us/dotnet/standard/design-guidelines/… говорится: «НЕ используйте подчеркивания, дефисы или любые другие символы, отличные от буквенно-цифровых».





Я никогда не встречал соглашения о кодировании в C#, которое различало бы публичные и частные методы. Я не предлагаю этого делать, так как не вижу пользы.
Если имя метода конфликтует с общедоступными методами, пора стать более наглядным; если, как в вашем случае, он содержит фактический метод выполнение для общедоступного метода, одно из соглашений - назвать его *Impl. Т.е. AddImpl в твоем случае.
Кроме того, в большинстве IDE есть автоматические подсказки, которые отфильтровывают частные методы или скрывают их.
Кроме того, если вы меняете метод с общедоступного на частный или наоборот, вам действительно не нужно менять имя метода, и вам не нужно
Вы упускаете суть ... Он НЕ МОЖЕТ назвать это "Добавить", так как это было бы обманом. Он ищет передовой отраслевой опыт для этой ситуации.
Я думаю, что с большинством конвенций больше свободы в личных делах. Однако я часто это вижу:
private Vector AddCore(Vector vector)
или же
private Vector DoAdd(Vector vector)
Однако я бы, вероятно, отказался от частного метода добавления и оставил только один:
public static Vector Add(Vector vector1, Vector vector2)
{
// check if vector1 is null
Vector returnVector = vector1.Clone()
return returnVector.Add(vector2);
}
public Vector Add(Vector vector)
{
// check parameters for null, and compare Lengths
for (int index = 0; index < Length; index++) {
this[index] += vector[index];
}
return this;
}
Также поместите эти фигурные скобки в нужное место :-)
Довольно часто используется ведущее подчеркивание для частных свойств, но я никогда не видел, чтобы это делалось для методов.
Будьте описательны с именами методов для создания кода, который объясняет сам себя, не должно быть никаких коллизий, потому что у вас не должно быть двух методов, выполняющих одно и то же, поэтому у вас не должно быть причин нуждаться в символе для префикса имен методов.
Некоторые люди добавляют к приватным полям префикс «m_», я не встречал подобных стилей для приватных методов.
Эти люди неправильно называют частные поля в соответствии с Общие соглашения об именах .NET, который строго запрещает использование венгерской нотации.
Лично я придерживаюсь одного и того же соглашения об именах методов независимо от видимости.
Это мои соглашения об именах для C#:
Редактировать: Обратите внимание, я виновен в использовании префиксных имен для частных методов. Я не уловил именно эту часть вашего вопроса, когда прочитал ее в первый раз.
Например, если у меня есть 7 разных способов выполнить мой оператор SQL через мой класс DatabaseCommand, например QueryDataTable, QueryEnumerable, QueryEnumerable<T>, QueryDataReader и т. д., Тогда все они хотят вызывать одни и те же частные методы, я склонен вызывать этот метод InternalQuery или PrivateQuery.
Я бы пошел на все, что предлагали мои товарищи по команде, и делать это соглашение в команде. Но в конкретном случае, похоже, этого можно было избежать:
public Vector Add(Vector vector) {
// check vector for null, and compare Length to vector.Length
for (int index = 0; index < Length; index++) {
this[index] += vector[index];
}
return this;
}
public static Vector Add(Vector vector1, Vector vector2) {
// check parameters for null, and compare Lengths
Vector returnVector = vector1.Clone()
return returnVector.Add(vector2);
}
Или, может быть, я просто не должен быть на ТАК так поздно ...
Я обычно использую thisCase для частных методов и ThatCase для общедоступных методов.
private Vector add(Vector vector) {
for (int index = 0; index < Length; index++) {
this[index] += vector[index];
}
return this;
}
public Vector Add(Vector vector) {
for (int index = 0; index < Length; index++) {
this[index] += vector[index];
}
return this;
}
Знаете ли вы, существует ли какое-либо стандартное соглашение, определяющее регистр паскаль для частных методов?
@CiaranGallagher Строго говоря, приведенный пример - это camelCase, а не PascalCase. Изначально Visual Studio не очень любит имена методов camelCase и выдает предупреждение IDE1006, но это можно настроить.
Обычно я вижу и использую "AddCore" или "InnerAdd"
MS также имеет метод InnerAdd.
Оболочка Паскаля более распространена, но я предпочитаю использовать оболочку верблюда для частных методов, потому что она сообщает вам (когда вы читаете его в коде), что метод не является частью области поверхности класса (общедоступные свойства, методы, события).
К сожалению, я часто сталкивался с этим соглашением, наряду с тенденцией называть элементы управления в форме начальным подчеркиванием (например, «_txtFirstname» вместо просто «txtFirstname»). Похоже, это странный эффект кровотечения из-за не рекомендованной MS практики именования частных переменных с ведущего подчеркивания. Или программисты просто любят использовать клавишу подчеркивания по непонятной мне причине.
Не используйте это соглашение, и когда ваш коллега настаивает на этом, предложите ему найти что-нибудь (что-нибудь) в Интернете, которое рекомендует эту практику.
Поскольку общедоступный Add () выполняет некоторые проверки, а частный - нет:
private Vector AddUnchecked(Vector vector) {
for (int index = 0; index < Length; index++) {
this[index] += vector[index];
}
return this;
}
Я видел два наиболее часто используемых варианта:
private Vector DoAdd(Vector vector) { ... }
а также
private Vector AddImpl(Vector vector) { ... }
Ни один из них не особенно удовлетворителен, но я их видел.
Я никогда не встречал соглашения, согласно которому ВСЕ частные методы должны иметь префикс - одна мысль об этом заставляет меня содрогаться!
Достаточно плохо иметь дело со всеми разработчиками C++, которые перед каждым элементом в поле зрения ставят префикс «_» - и я говорю как бывший разработчик Delphi, который раньше ставил перед каждым элементом префикс «F». Я все еще восстанавливаюсь после этого!
Я тоже вздрагиваю. Но обратите внимание, что мой вопрос касался соглашения в ситуации, когда за некоторыми общедоступными методами выполняет частный метод. Следовательно, "[i] есть ли соглашение об именовании частного метода, который я назвал" _Add "здесь?" и представленный образец кода.
Публичные методы:
public void Add()
{
}
this.Add()
Частные методы:
private void _Add()
{
}
_Add();
Характеристики:
public int Id {get;set;}
this.Id = 10;
Поля:
private bool _isUsed;
_isUsed = false;
Локальные переменные:
bool isUsed;
Какое объяснение этому есть?
@antonijn: Здесь нет никаких оправданий. Для меня это просто довольно удобно.
EPiServer в этой ситуации использует условное обозначение «... Internal», как в AddInternal().
Я не думаю, что мое мнение заслуживает ответа; однако, поскольку C# не определяет соглашения, я думаю, что добавление
_к имени метода - отличный способ. C# предлагает к частным элементам данных добавляться ведущий_. Я думаю, поэтому, если вы ищете последовательность и простоту общения, есть прецедент для ведущего_.