2010-02-10 5 views
6

Microsoft says поля и свойства должны отличаться не только от случая к случаю. Итак, если они действительно представляют ту же идею, как они должны быть разными?Как наилучшим образом назовите поля и свойства

Вот пример Microsoft, что не делать:


using System; 
namespace NamingLibrary 
{  
    public class Foo // IdentifiersShouldDifferByMoreThanCase  
    {   
     protected string bar; 

     public string Bar   
     {    
      get { return bar; }   
     }  
    } 
} 

Они не дают никаких указаний на то, как это должно выглядеть. Что делают большинство разработчиков?

+0

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

ответ

11

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

Это правило срабатывает только для публично видимых участников.

(Это включает в себя защищенные члены, так как они видны в производных классах.)

Так что это нормально:

public class Foo 
{ 
    private string bar; 
    public string Bar { get { return bar; } } 
} 

Мое личное правило не позволять чему-либо другие частные поля в любом случае , и в этот момент это не проблема.

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

+0

Хороший улов! Я пропустил «Это правило срабатывает только для публично видимых членов». на странице. На мгновение моя голова вращалась. – User1

+0

Кроме того, я полностью согласен с тем, что поля никогда не должны быть общедоступными. Это действительно должно быть проблемой, а не тем, что у них одно и то же имя. публичные поля прерывают инкапсуляцию, я не уверен, почему они могут даже скомпилировать этот путь. – User1

+0

Простое примечание. Без какого-либо префикса именования полей ... поля классов неотличимы от локальных переменных функции, если вы не префикс их всех этим. (что действительно многословно). Добавление префикса, такого как _ или m_, может НАЛИЧНО помочь улучшить четкость кода, и это настоятельно рекомендуется. – jrista

0

мне нравится:

protected string _Bar; 

public string Bar   
{    
    get { return _Bar; }   
}  
0

Подумайте большинство разработчиков PREfix переменных-члены с подчеркиванием следующим образом:

protected string _bar; 
7

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

Итак, я часто делаю что-то вроде:

public class Foo 
{ 
    protected string _bar; 

    public string Bar 
    { 
     get { return _bar; } 
    } 
} 

... или ...

public class Foo 
{ 
    protected string mBar; // 'm' for member 

    public string Bar 
    { 
     get { return mBar; } 
    } 
} 
+0

'm' для члена почти заставляет меня бросать мои куки. :) – User1

+0

Я несовершеннолетний кодер. Никаких бомб, пожалуйста. – kenny

+0

Я знаю, что эта тема устарела, но после прочтения тонких дискуссий по этой теме я также остановился на подчеркивании частных полей участника. Просто полезно знать, с первого взгляда, что что-то является частным полем-членом *, а не только тем, что оно подпадает под определенное правило обсадной колонны. – 2012-05-07 15:06:08

0

Я лично делаю следующее:

class SomeClass 
{ 
    private static string s_foo; // s_ prefix for static class fields 
    private string m_bar;   // m_ prefix for instance class fields 

    public static string Foo 
    { 
     get { return s_foo; } 
    } 

    public string Bar 
    { 
     get { return m_bar; } 
    } 
} 

Я изначально использовал только _ или m_ как префикс для всех своих полей, пока не начал копать через много кода Microsoft .NET через Reflector. Microsoft также использует парадигму s_ и m_, и мне это нравится. Это позволяет легко узнать, что такое поле, когда вы читаете тело кода функции. Мне не нужно ничего указывать и ждать появления всплывающей подсказки или что-то в этом роде. Я знаю, что-то статично или экземпляр просто его префикс поля.

0

Это зависит от вас или вашего стандарта организации/организации.Но большинство программистов используют camelCasing или подчеркивание + camelCasing на полях и PascalCasing на свойствах, как:

public class Foo  
{   
    protected string _bar; 

    public string Bar   
    {    
     get { return _bar; }   
    }  
} 
Смежные вопросы