Должно ли свойство иметь то же имя, что и его тип?

Я иногда видел код, написанный следующим образом:

public class B1
{
}

public class B2
{
    private B1 b1;

    public B1 B1
    {
        get { return b1; }
        set { b1 = value; }
    }
}

то есть класс B2 имеет свойство с именем "B1", которое также имеет тип "B1".

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

(Я использую .net 2.0, в случае, если это имеет значение).

 niico20 сент. 2016 г., 00:51
какое соглашение об именах - называть их одним и тем же или менять регистр для дифференциации?
 NotDan08 июл. 2009 г., 04:15
Я полагаю, что руководящие принципы разработки платформы .NET также рекомендуют это соглашение об именах.

Ответы на вопрос(9)

http://blogs.msdn.com/ericlippert/archive/2009/07/06/color-color.aspx

Лично я бы избежал этого, если это возможно.

Я сталкиваюсь с этим все время:

public class Car {
    public enum Make {
        Chevy,
        Ford
    };

    // No good, need to pull Make out of the class or create
    // a name that isn't exactly what you want
    public Make Make {
        get; set;
    }
}

Руководство по именованию Microsoft для участников государство:

Consider giving a property the same name as its type.

When you have a property that is strongly typed to an enumeration, the name of the property can be the same as the name of the enumeration. For example, if you have an enumeration named CacheLevel, a property that returns one of its values can also be named CacheLevel.

Хотя я признаю, что есть некоторая двусмысленность, рекомендуют ли они это только для Enums или для свойств в целом.

Решение Вопроса

public Background {
    public Color Color { get; set; }
}

Здесь встречаются редкие проблемы (угловые случаи), но их недостаточно, чтобы избежать использования этого устройства. Честно говоря, я нахожу это устройство весьма полезным. Мне бы не понравилось, что я не могу сделать следующее:

class Ticker { ... }


public StockQuote {
    public Ticker Ticker { get; set; }
}

Я не хочу говоритьTicker StockTicker или жеTicker ThisTicker и т.п.

что это может немного сбивать с толку, когда имя свойства и его тип совпадают, но в остальном это не проблема.

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

о вроде этого:

public class B1
{
        public static void MyFunc(){ ; }
}

public class B2
{
        private B1 b1;

        public B1 B1
        {
                get { return b1; }
                set { b1 = value; }
        }

        public void Foo(){
                B1.MyFunc();
        }
}

Вместо этого вы должны использовать:

MyNamespace.B1.MyFunc();

Хорошим примером этого является распространенное использование в программировании Winforms, где класс System.Windows.Forms.Cursor перекрывается со свойством System.Windows.Forms.Form.Cursor, поэтому события формы должны обращаться к статическим элементам, используя полное пространство имен ,

мои методы и свойства являются «lowerCase»; и поэтому у меня не будет проблемы, которая есть у MiffTheFox.

public class B1
{
    public static void myFunc(){ ; }
}

public class B2
{
    private B1 m_b1;

    public B1 b1
    {
        get { return m_b1; }
        set { m_b1 = value; }
    }

    public void Foo()
    {
        B1.myFunc(); //this is Ok, no need to use namespace
    }
}

Так что для меня,m_b1 это данные участника,b1 является свойством (или локальной переменной или параметром), иB1 это имя класса.

this при обращении к члену экземпляра в классе. например всегда

this.SomeMethod(this.SomeProperty);

и никогда

SomeMethod(SomeProperty);

В большинстве случаев нет никакой реальной неопределенности, но я считаю, что это помогает прояснить ситуацию. Кроме того, теперь вы знаете, где определяется свойство / метод.

улучшить читаемость. На самом деле, некоторые библиотеки Microsoft имеют такие свойства (в частности, сenum свойства, это обычно имеет смысл).

Ваш ответ на вопрос