c# - System.String 没有实现接口(interface) System.IConvertible

标签 c# .net

我偶尔发现.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/

相关文章:

c# - 在 C# 依赖项中使用 MySQLConnector

c# - 使用 nuget 和符号服务器

c# - 有没有办法在 winforms 中为标签页的标签着色?

c# - 使用 Input.GetKey 的按键多次返回 true

c# - 避免在 View 中添加 if/else 逻辑

C# 局部变量

.net - 如何在 .net 中应用 XSLT 2.0 转换?

c# - 在列表中查找具有最低属性值的项目

c# - MS在c#/.net中将MDB Access 到Sqlite

c# - 在 Winform 和 aspx 应用程序之间共享类