2016-03-31 2 views
2

я в настоящее время имею этот источник кода в качестве примера:Соглашение о присвоении имен со свойствами класса в методах

class Person 
{ 
    public Person create(string _name, int _uid) 
    { 
     return new Person() 
     { 
      name = _name, 
      uid = _uid, 
     }; 
    } 

    public int uid; 
    public string name; 
} 

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

На официальной документации конвенций .NET именования, говорится ли, не использовать символы, однако, этот метод для использования при добавлении к List<Person> People = new List<Person>(); и называется так:

People.Add(Person.create("Example", 1)); 

Я смотрел источники, такие как:

C# Property Examples

что они используют префикс _ объявить его только темп, чтобы получить или установить значение, которое я затем скопировать.

Мой вопрос в том, согласуются ли они с соглашениями об именах .NET или как я могу сохранить его похожим на имена свойств, которые существуют в настоящее время?

+0

СЕБЯ примеры 'связано с использованием '_' в имени поля *, а не с именем параметра *. –

+0

Именно поэтому я спрашиваю, следует ли копирование того, что для параметра следует за.NET, или нет, и если это не так, что я могу использовать, это похоже на имена свойств. – KDOT

+0

Зачем вам нужен метод «Создать»? Почему бы вам вместо этого не использовать конструктор? –

ответ

4

Соглашение предназначено для использования имен параметров, поэтому их следует называть name и uid. Неважно, являются ли они временными или долговечными, используете ли вы их и отбрасываете или сохраняете в поле.

В то время как на тему соглашений об именах следует называть методы с использованием PascalCase, поэтому я бы переименовал create в Create.

Ваши общедоступные поля должны быть объектами (см. Описание Why Properties Matter Jon Skeet для полного объяснения причины), и его также следует называть с помощью PascalCase.

public int Uid { get; private set; } 
public string Name { get; private set; } 

Наконец, я бы вопрос, почему Person класс имеет не статический метод для создания экземпляра Person. joe.Create("mike", 123) не имеет для меня никакого смысла.


MSDN есть хороший список именования here.

Единственное, чего не хватает, это использовать ведущий знак подчеркивания + snakeCase для частных полей (например, _myAge). Это не одобрено Microsoft, хотя это широко используемая конвенция. Его также поощряют некоторые инструменты рефакторинга, такие как ReSharper.

+0

Это бьет гвоздь на голове, блестящий. Вы также открыли дверь в мою инфраструктуру, я буду изучать ее статичность и исправление там, где это указано. Благодаря! – KDOT

+0

Что касается метода, я хотел, чтобы он был ориентирован на объект, поэтому новые пользователи могут использовать простые методы для работы – KDOT

+0

@ KyleE4K Добро пожаловать :) Я добавил ссылку на соглашения об именах Microsoft, которые могут быть полезны. Что касается метода create, вы считаете, что вместо этого выставляете простой конструктор? Это хороший объектно-ориентированный подход. – dcastro

1

Посмотрите на чтения ключевое слово

ИМХО префикс "_" для любых переменных не общие для C#

исходный код https://msdn.microsoft.com/de-de/library/acdd6hb7.aspx

public class ReadOnlyTest 
{ 
    class SampleClass 
    { 
     public int x; 
     // Initialize a readonly field 
     public readonly int y = 25; 
     public readonly int z; 

     public SampleClass() 
     { 
     // Initialize a readonly instance field 
     z = 24; 
     } 

     public SampleClass(int p1, int p2, int p3) 
     { 
     x = p1; 
     y = p2; 
     z = p3; 
     } 
    } 

    static void Main() 
    { 
     SampleClass p1 = new SampleClass(11, 21, 32); // OK 
     Console.WriteLine("p1: x={0}, y={1}, z={2}", p1.x, p1.y, p1.z); 
     SampleClass p2 = new SampleClass(); 
     p2.x = 55; // OK 
     Console.WriteLine("p2: x={0}, y={1}, z={2}", p2.x, p2.y, p2.z); 
    } 
} 
/* 
Output: 
    p1: x=11, y=21, z=32 
    p2: x=55, y=25, z=24 
*/ 
Смежные вопросы