为什么.Net Framework基类型不包含IConvertible方法的实现



.Net Framework 基本类型,如 Int32、Int64、Boolean 等。 实现 IConvertible 接口,但这些类型的元数据不包含 IConvertible 接口中定义的方法的实现,例如 ToByte、ToBoolean 等。

我试图理解为什么基本类型没有方法实现,即使它们实现了 IConvertible 接口。任何人都可以帮忙吗?

仔细查看文档 - Int32显式实现IConvertible

当类/结构显式实现接口时,在调用这些方法之前,必须将该类型的实例强制转换为其接口

var asConvertable = (IConvertible) 3; //boxing
var someByte = asConvertible.ToByte();

Int32和其他基元类型显式实现IConvertible接口。显式接口实现意味着该方法不会出现在具体方法的类型 public 方法中:不能直接调用它,需要先强制转换为接口。

int x = 42;
IConvertible c = (IConvertible)x;
byte b = c.ToByte();

若要显式实现接口,请不要指定辅助功能级别,而是在方法名称前面加上接口名称:

byte IConvertible.ToByte()
{
    ...
}

若要访问带反射的方法,必须包含接口的全名:

MethodInfo toByte =
    typeof(int).GetMethod("System.IConvertible.ToByte",
                          BindingFlags.Instance | BindingFlags.NonPublic);

相关内容

  • 没有找到相关文章

最新更新