Подтвердить что ты не робот

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

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

Ответ 1

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

Ответ 2

Обычно я использую thisCase для частных методов и ThisCase для общедоступных методов.

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;
}

Ответ 3

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

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

Ответ 4

Лично для методов у меня одинаковое соглашение об именах, независимо от видимости.

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

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

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

Например, если у меня есть 7 различных способов выполнить мой оператор SQL через мой класс DatabaseCommand, например QueryDataTable, QueryEnumerable, QueryEnumerable<T>, QueryDataReader и т.д., тогда все они хотят вызвать те же частные методы, у меня есть тенденция вызвать этот метод InternalQuery или PrivateQuery.

Ответ 5

Два варианта, которые я видел обычно, следующие:

private Vector DoAdd(Vector vector) { ... }

и

private Vector AddImpl(Vector vector) { ... }

Ни один из них не является особенно удовлетворительным, но это то, что я видел.

Я никогда не видел соглашения о том, что ВСЕ частные методы должны иметь префикс - сама мысль об этом заставляет меня дрожать!

Плохо справляется со всеми разработчиками на С++, которые префиксят каждого участника в поле зрения "_" - и я говорю как бывший разработчик Delphi, который префикс каждого участника "F". Я все еще оправляюсь от этого!

Ответ 6

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

Ответ 7

Поскольку public Add() выполняет некоторые проверки, а private - нет:

private Vector AddUnchecked(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}

Ответ 8

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

public void Add()
{
}
this.Add()

Частные методы:

private void _Add()
{
}
_Add();

Свойства:

public int Id {get;set;}
this.Id = 10;

Поля:

private bool _isUsed;
_isUsed = false;

Локальные переменные:

bool isUsed;

Ответ 9

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

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;
}

Также поместите эти фигурные скобки в нужное место: -)

Ответ 10

Будь описательным с именами методов для создания кода, который сам объясняет, не должно быть никаких коллизий, потому что у вас не должно быть двух методов, выполняющих точно то же самое, поэтому у вас не должно быть причин, чтобы нужно использовать метод символов для префикса имена с.

Некоторые люди префикс приватных полей с "m_", я не видел подобных стилей для частных методов.

Ответ 11

Я бы пошел на то, что предложили мои товарищи по команде, и сделать это конвенцией в команде. Но в конкретном случае похоже, что вы могли бы избежать этого:

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);
}

Или, может быть, я просто не должен быть на этом так поздно...

Ответ 12

Я встречался с этим соглашением много, к сожалению, наряду с тенденцией называть элементы управления в форме с лидирующим подчеркиванием (например, "_txtFirstname" вместо "txtFirstname" ). Похоже, что это необычный эффект кровотечения из практики, не рекомендованной более чем MS, именования частных переменных с помощью основного подчеркивания. Это, или программисты просто любят использовать ключ подчеркивания без причины, я могу понять.

Не используйте это соглашение, и когда ваш коллега настаивает на этом, попросите его найти что-то (что-либо) в Интернете, которое рекомендует эту практику.

Ответ 13

О, я забыл упомянуть только, почему я это делаю. Это потому, что это простой способ создать обработку, используя цикл для методов, которые я бы хотел вызвать в последовательности. Например, если у меня есть какая-то проверка, которая должна выполняться немного по-разному каждый раз, но с использованием методов с одним и тем же классом. Я установил их как

add_process = array(1,2,3);
delete_process = array(2,6,4);

//delete user, users  posts and users comments
foreach( process2 as value){
 method_{value}_delete
} 

Ответ 14

В этой ситуации EPiServer использует соглашение "... Internal", как в AddInternal().