将此字符串称为“字符串”是危险的还是不好的做法?

时间:2015-11-10 23:13:32

标签: c# .net .net-4.0

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

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

显然,我可以将string属性称为我想要的任何内容。但是因为这个类本质上是如此通用,所以给它一个非常明显的名称如“String”会很好。这样,该属性可以访问:

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

编译器允许这样做。尽管有阶级和财产的性质,但是,如果将该类别中的唯一财产命名为“字符串”,那么将其视为不良做法或危险吗?

2 个答案:

答案 0 :(得分:4)

不要这样做,即使它在编译器方面有效。 Eric Lippert的Color Color示例不同 - 大多数事物很少有多个颜色属性,因此命名属性Color通常会告诉您需要知道的有关该属性的所有信息。我称之为有效的情况,使用类型名称(Color)可以用作属性的名称。 (有人可能会争论这是否是一个好的论据,但在过去我必须处理这个确切的问题并最终使用Color Color。)

如果string String你没有从属性名称中学到任何东西 - 给定的对象可能有(和对象经常这样做)几个string类型的属性。命名属性String并不会告诉您有关该属性的用途的任何信息。这使得代码更难理解。

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

特别针对此问题,我要调用属性Value

public string Value { get; set; }

答案 1 :(得分:1)

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

此外,在这种情况下,您的String属性意味着什么似乎是明确的:您有一个类似字符串的类,但可序列化,并且此属性返回基础字符串。实际上假设str不是原始类型,原始类型是str或其他类型。那么在我看来,在调用这个属性(你的类的中心属性)时会出现任何问题或含糊不清,而且#34; String" (在我的假设案例中返回类型为currency