属性是否应该与其类型具有相同的名称?

我有时看到这样的代码:

public class B1
{
}


public class B2
{
private B1 b1;


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

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

我的直觉告诉我这不是一个好主意,但是有没有什么技术上的原因让你避免给一个属性起与它的类相同的名字呢?

(我使用的是.net 2.0,以防万一)。

35919 次浏览

就在今天,埃里克在博客上谈到了“颜色”问题。

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

就我个人而言,如果可能的话,我会尽量避免。

没有什么特别的技术问题。它可能会损害或提高可读性。事实上,一些 Microsoft 库具有这类属性(具体来说,对于 enum属性,这通常是有意义的)。

没关系,典型的例子是

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。窗户。表格。游标类与系统重叠。窗户。表格。表格。属性,因此窗体事件必须使用完整命名空间访问静态成员。

当一个属性的名称和它的类型相同时,显然会有点混淆,但是除此之外,这并不是一个真正的问题。

如果名称有意义,通常最好让名称和类型相同。如果你能想到一个更好的名字,你当然应该使用它,但是你不应该为了避免这种情况而不惜一切代价去编造一个名字。

除了 case 之外,我给事物命名为与它们的类型相同的名称: 我的方法和属性是“ 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是类的名称。

另一个难题是内在类型。

我经常遇到这种情况:

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

这种常见模式是我在引用类中的实例成员时总是使用 this的原因之一。例如:

this.SomeMethod(this.SomeProperty);

永远不会

SomeMethod(SomeProperty);

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

微软成员命名指南州:

考虑给属性指定与其类型相同的名称。

当具有对枚举强类型化的属性时,该属性的名称可以与 例如,如果您有一个名为 返回其中一个值的属性也可以是 名为 CacheLevel

不过我承认,不管他们只是推荐 Enums 还是一般的属性使用这种方法,都存在一些模棱两可的地方。