Звычайная практыка для зменных з аднолькавымі імёнамі ў параметры канструктара і як ўласцівасць

Ці ёсць «правільны» спосаб назваць зменную, калі яна перадаецца ў канструктару на нерухомасць? Прыклад (у C #):

public class MyClass
{
    private int index;

    public MyClass(int i)
    {
        index = i;
    }
}

Калі гэтыя дзве зменныя з'яўляюцца «ж», гэта прынята называць яшчэ адзін сціснута і г.д.? Я хачу, каб адпавядаць па меншай меры, але я таксама ці ёсць агульнапрыняты спосаб зрабіць гэта.

2

7 адказы

public MyClass(int index)
{
    this.index = index;
}

Гэта, па меншай меры, агульны спосаб зрабіць у Java, і я мяркую, што гэта тое ж самае ў C# . Гэта робіць імя больш значным, чым я , і выкарыстоўвае такое ж імя, як ўласцівасць для абазначэння таго ж.

4
дададзена
Распаўсюджаны спосаб ў C# гэты назваць зменныя ніжні рэгістр і імем ўласцівасці ў верхнім рэгістры. Такім чынам, вы маглі б проста напісаць Index = індэкс; .
дададзена аўтар user1908061, крыніца

Refactor рэкамендуе прыватныя поля класа быць вярблюджая прыстаўку іх з _ ( _index у вашым выпадку). Яны рэкамендуюць параметры павінны быць вярблюджага без падкрэслівання.

Як ужо згадваўся ў каментарах, няма MSDN-рэкамендаванага стандарту для прыватных палёў.

1
дададзена
Рэфактарынг. Microsoft не рэкамендую. Сказаўшы, што гэта цалкам разумна.
дададзена аўтар Shlomo, крыніца
Адрэдагаваны, каб адлюстраваць крыніца рэкамендацыі.
дададзена аўтар Shlomo, крыніца
Рэкамендуецца каму? Ці не ад Microsoft, наколькі я магу судзіць, ні карыстальнікамі StackOverflow.
дададзена аўтар hvd, крыніца
Гэта, вядома, разумная схема прысваення імёнаў, я згодны, але не толькі адзін, і не выкарыстоўваецца ў такой ступені, што я б назваў гэта «рэкамендуемы стандарт» без кваліфікацыі.
дададзена аўтар hvd, крыніца

Вы можаце выкарыстоўваць, як вы напісалі

або

ніжэй, можа быць яшчэ адзін варыянт, калі імёны зменных аднолькавыя

public class MyClass
{
    private int index;

    public MyClass(int index)
    {
        this.index = index;
    }
}
0
дададзена

C # стандарт будзе напісаць такі код:

public class MyClass {
  public MyClass(int index) {
    Index = index;
  }
  public int Index {
    get { return _index; }
    private set { _idex = value; /* Perform other actions triggered by the set */ }
  }
  private int _index;
}

У тых выпадках, калі няма поля падкладкі не патрабуецца ўласцівасць (і падкладачных поле) можа і павінна быць спрошчана:

public Index { get; private set; }
0
дададзена

Я думаю, што <�моцны> вы павінны засяродзіцца на «бачнае» пераменная больш чытэльным (у дадзеным выпадку гэта параметр канструктара). У рэшце рэшт, гэта тое, што карыстальнікі будуць бачыць ваш клас, калі друкавалі.

Yes, there is a correct way to avoid such dilemmas, which is to follow the naming conventions established for your language. For example, in C# it's a convention that private fields begin with an underscore. There's probably something equivalent to Java.

Гэта, як гаворыцца, гэта, безумоўна, можна правесці адрозненне паміж палямі і лакальнымі зменнымі, відавочна выкарыстоўваючы гэта , каб спасылацца на палі (практыка, якая дарэчы, калі ёсць найменне двухсэнсоўнасць).

0
дададзена

Вы можаце назваць іх гэтак жа. Выкарыстоўвайце гэта, каб высветліць, што вы робіце.

this.index = index;

Калі вы робіце адрозненне (які я не рэкамендую), лепш быць найбольш відавочна пра імя параметру перадаецца метадзе замест вашага ўнутранага імя. Калі іншыя праграмісты выкарыстоўваюць свой клас, то па меншай меры, яны ведаюць, што азначае параметр. Так што калі вы хочаце выразны:

public MyClass(int index)
{
  i = index;
}
0
дададзена

Там устаноўлены стандарты кадавання ў .NET, вызначаных у MSDN.

http://msdn.microsoft.com/en-us/library/ms229002.aspx

але для агульнага спісу кіруючых прынцыпаў:

http://msdn.microsoft.com/en-us/library/ms229042.aspx

0
дададзена