如果一个属性具有相同的名称作为它的类型?如果一个属性具有相同的名称作为它的类型?(Should a

2019-05-17 12:31发布

我有时看到这样写的代码:

public class B1
{
}

public class B2
{
    private B1 b1;

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

即类B2有一个名为“B1”属性,这也是类型“B1”。

我的直觉告诉我,这是不是一个好主意,但是否有任何技术原因,你应该避免给人一种属性相同的名称,它的类?

(我使用.NET 2.0,在重要的情况下)。

Answer 1:

没关系。 这里典型的例子是

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

有迹象表明,来这里,但还不足以保证避免这种装置罕见的问题(极端情况)。 坦率地说,我觉得这个装置非常有用。 我不喜欢不能够做到以下几点:

class Ticker { ... }


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

我不想不得不说Ticker StockTickerTicker ThisTicker等。



Answer 2:

该会员微软命名指南状态:

考虑赋予属性相同的名称和类型。

如果您有一个强类型为枚举的属性,该属性的名称可以是相同的枚举的名称。 例如,如果您有一个名为枚举CacheLevel ,返回其值中的一个,也被命名的属性CacheLevel

尽管我承认有一点不含糊,他们是否只是建议这对枚举或在一般属性。



Answer 3:

我只能想到一个缺点。 如果你想要做这样的事情:

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属性重叠,所以你的形式事件必须使用完整的命名空间访问静态成员。



Answer 4:

就在今天,埃里克的博客上讲述了“颜色颜色”问题。

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

就个人而言,我想如果可能避免。



Answer 5:

有与它没有具体的技术问题。 它可能损害或提高可读性。 事实上,微软的一些图书馆有这几样特性(特别是,随着enum的属性,这通常是有道理的)。



Answer 6:

另一个疑难杂症是具有内的类型。

我碰上这一个所有的时间:

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


Answer 7:

它可以明显有点当一个属性的名称,它的类型是一样的混乱,但比它不是一个真正的问题等。

如果名称是有道理的,它通常是更好地让你的名字和类型是相同的。 如果你能想到一个更好的名字,你当然应该使用,但你不应该试图弥补一个名字不惜任何代价,只是为了避免这种情况。



Answer 8:

这种常见的模式就是为什么我一直使用的原因之一this指的是类中的一个实例成员时。 例如,总是

this.SomeMethod(this.SomeProperty);

永不

SomeMethod(SomeProperty);

在大多数情况下,没有任何实际的歧义,但我觉得它有助于澄清事情。 另外,您现在知道属性/方法被定义在哪里。



Answer 9:

我给的东西相同的名称,它们的类型,除了案例:我的方法和属性是“小写”; 我因此不会有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是类的名称。



文章来源: Should a property have the same name as its type?