Соглашение об именах частных методов

Есть ли здесь соглашение об именах частного метода, который я назвал "_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;
}

Я не думаю, что мое мнение заслуживает ответа; однако, поскольку C# не определяет соглашения, я думаю, что добавление _ к имени метода - отличный способ. C# предлагает к частным элементам данных добавляться ведущий _. Я думаю, поэтому, если вы ищете последовательность и простоту общения, есть прецедент для ведущего _.

Thomas 26.05.2016 16:18

В Руководстве по проектированию инфраструктуры для .Net docs.microsoft.com/en-us/dotnet/standard/design-guidelines/… говорится: «НЕ используйте подчеркивания, дефисы или любые другие символы, отличные от буквенно-цифровых».

Caltor 09.07.2020 13:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
41
2
43 084
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

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

Если имя метода конфликтует с общедоступными методами, пора стать более наглядным; если, как в вашем случае, он содержит фактический метод выполнение для общедоступного метода, одно из соглашений - назвать его *Impl. Т.е. AddImpl в твоем случае.

Кроме того, в большинстве IDE есть автоматические подсказки, которые отфильтровывают частные методы или скрывают их.

kevindaub 21.12.2008 02:16

Кроме того, если вы меняете метод с общедоступного на частный или наоборот, вам действительно не нужно менять имя метода, и вам не нужно

Bazman 21.12.2008 02:46

Вы упускаете суть ... Он НЕ МОЖЕТ назвать это "Добавить", так как это было бы обманом. Он ищет передовой отраслевой опыт для этой ситуации.

TheSoftwareJedi 21.12.2008 03:26

Я думаю, что с большинством конвенций больше свободы в личных делах. Однако я часто это вижу:

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, который строго запрещает использование венгерской нотации.

Breakskater 15.04.2015 23:19

Лично я придерживаюсь одного и того же соглашения об именах методов независимо от видимости.

Это мои соглашения об именах для C#:

  • Пространства имен, типы, методы, свойства: PascalCase
  • Локальные переменные: camelCase
  • Параметры для методов: camelCase
  • Частные поля: _PascalCase с префиксом подчеркивания, если резервное поле для свойства, то то же имя, что и свойство, только с префиксом подчеркивания

Редактировать: Обратите внимание, я виновен в использовании префиксных имен для частных методов. Я не уловил именно эту часть вашего вопроса, когда прочитал ее в первый раз.

Например, если у меня есть 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;
}

Знаете ли вы, существует ли какое-либо стандартное соглашение, определяющее регистр паскаль для частных методов?

Ciaran Gallagher 06.01.2016 16:26

@CiaranGallagher Строго говоря, приведенный пример - это camelCase, а не PascalCase. Изначально Visual Studio не очень любит имена методов camelCase и выдает предупреждение IDE1006, но это можно настроить.

Caltor 09.07.2020 13:14
Ответ принят как подходящий

Обычно я вижу и использую "AddCore" или "InnerAdd"

MS также имеет метод InnerAdd.

nawfal 28.05.2013 16:21

Оболочка Паскаля более распространена, но я предпочитаю использовать оболочку верблюда для частных методов, потому что она сообщает вам (когда вы читаете его в коде), что метод не является частью области поверхности класса (общедоступные свойства, методы, события).

SynBiotik 27.06.2018 22:52

К сожалению, я часто сталкивался с этим соглашением, наряду с тенденцией называть элементы управления в форме начальным подчеркиванием (например, «_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 "здесь?" и представленный образец кода.

jason 22.12.2008 07:15

Публичные методы:

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 24.03.2013 15:47

@antonijn: Здесь нет никаких оправданий. Для меня это просто довольно удобно.

Y.Yanavichus 24.03.2013 23:57

EPiServer в этой ситуации использует условное обозначение «... Internal», как в AddInternal().

Другие вопросы по теме