4

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

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

4

2 回答 2

8

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

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

var asConvertable = (IConvertible) 3; //boxing
var someByte = asConvertible.ToByte();
于 2014-11-24T00:31:01.863 回答
3

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

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);
于 2014-11-24T00:31:32.287 回答