调用此字符串 "String" 是危险的还是不好的做法?

Is it dangerous, or bad practice, to call this string "String"?

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

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

显然,我可以随意调用 string 属性。但是因为这个 class 本质上是如此通用,所以最好给它一个非常明显的名字,比如 "String." 这样,属性 可以被访问为:

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

编译器允许这样做。尽管 class 和 属性 的性质不同,但将 class 中唯一的 属性 命名为 [=23] 是否会被视为不良做法或危险=] ?

正如 Eric Lippert 自己所说 here,这是 "perfectly acceptable practice; the C# language has been carefully designed so that this is legal and practical."

此外,在这种情况下,您的 String 属性 的含义似乎很明确:您有一个 class ,它类似于一个字符串,但可序列化,而这个 属性 returns 底层字符串。假设实际上 String 不是原始类型,而原始类型是 str 或其他类型。那么在我看来,将此 属性(你的 class 的中央 属性)简单地称为 "String"(与 return 在我的假设情况下输入 str)

不要这样做,即使就编译器而言它是有效的。 Eric Lippert 的 Color Color 示例是不同的 - 大多数事物很少有超过一种颜色 属性 所以命名 属性 Color 通常会告诉你所有你需要知道的 属性。我称这是一个有效的案例,其中使用类型名称 (Color) 可以用作 属性 的名称。 (有人可能会争论这是否是一个很好的论点,但在过去我不得不处理这个确切的问题并最终使用 Color Color。)

string String 的情况下,您不会从 属性 的名称中学到任何东西 - 给定对象可能具有(并且对象经常具有)类型为 [=16= 的多个属性].将 属性 命名为 String 并不能告诉您任何有关 属性 的用途的信息。这使代码更难理解。

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

专门针对这个问题,我会调用 属性 Value:

public string Value { get; set; }