将此字符串称为"String"是危险还是不良做法?



我有一个名为SerializableString的类,它扩展了基类CustomXmlSerializable。基类提供了对派生类进行XML序列化和反序列化的方法。

public class SerializableString : CustomXmlSerializable
{
    public string String { get; set; }
}

显然,我可以任意调用string属性。但是因为这个类本质上是通用的,所以最好给它一个非常明显的名称,比如"String"

SerializableString userName = new SerializableString();
userName.String = "khargoosh";

编译器允许这样做。不管类和属性的性质如何,将类中唯一的属性命名为"字符串"会被认为是不良做法还是危险的?

不要这样做,即使它对编译器来说是有效的。Eric Lippert的Color Color的例子是不同的-大多数事物很少有一个以上的颜色属性,因此将属性命名为Color通常会告诉您需要了解的关于该属性的所有信息。我称之为一种有效的情况,其中使用类型名称(Color)可以用作属性的名称。(人们可能会争论这是否是一个好的论点,但在过去,我不得不处理这个确切的问题,最终使用了Color Color。)

string String的情况下,你不会从属性的名称中学到任何东西——一个给定的对象可能有(而且对象经常有)几个string类型的属性。将属性命名为String不会告诉您该属性的任何用途。这使得代码更难理解。

这只是个人观点——正如另一个答案所指出的,这在语法上是有效的。最后,这是一个判断调用——我会尽可能避免以属性类型命名属性。较长、唯一的属性/函数名称通常包含有关该符号预期用途的更多信息。

针对这个问题,我将属性称为Value:

public string Value { get; set; }

正如Eric Lippert自己在这里所说,这是"完全可以接受的做法;C#语言经过精心设计,因此合法且实用。"

此外,在这种情况下,String属性的含义似乎是明确的:您有一个类似于字符串但可序列化的类,并且该属性返回底层字符串。事实上,假设String不是基元类型,而基元类型是str或其他什么。然后,在我看来,将这个属性(类的中心属性)简单地称为"String"(在我的假设情况下,返回类型为str

不会有任何问题或歧义

最新更新