把这个字符串称为“;字符串”;
本文关键字:字符串 | 更新日期: 2023-09-27 18:21:29
我有一个名为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
)