我偶尔发现.NET framework的类System.String
没有实现其继承接口(interface)System.IConvertible
,请问这是为什么?
最佳答案
您看到的是所谓的“显式接口(interface)实现”。这意味着如果您定义一个类(在本例中为 System.String
)并实现一个接口(interface)(在本例中为 System.IConvertible
)并且您使用显式实现它接口(interface)语法,即
这个:
bool IConvertible.ToBoolean(IFormatProvider provider) {
return Convert.ToBoolean(this, provider);
}
对比
public bool ToBoolean(IFormatProvider provider) {
return Convert.ToBoolean(this, provider);
}
如果方法目标的编译时类型实际上是您的类型的实例,而不是接口(interface),则方法 ToBoolean
将不可访问。对于 C# 中的 API 编写者来说,这实际上是一种“隐藏”某些成员的方法,尽管由于各种原因必须由实现类型实现,但实际上并不打算成为您类型的公共(public)表面区域的一部分。它实际上非常好,因为它可以让您的 API 比其他方式更干净。
在这种情况下,人们可能认为防止消费者将 string
作为简单的 IConverter
进行交互更简洁的原因是整个点System.Convert 的 > 允许通过使用将string
等类型的值转换为bool
等类型这些方法。因此,提供接口(interface)方法作为完成 System.Convert
已经完成的相同事情的方法只会通过提供无用的额外方法来完成相同的事情而混淆 API。
关于c# - System.String 没有实现接口(interface) System.IConvertible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36637835/