记得很久很久以前跟同事有关于接口是不是object一争.
我当然是认为接口是object了,一起皆是对象哇.不过同事却不已为然,他反驳的理由我现在已经想不起来的.稍微有点印象就是我当时苦苦寻找interface是object的证据.
一开始盯上interface这个关键字,看看它是不是继承自object,,后来发现它实际上根本就不是什么类,只是一个声明的关键字而已.就如我们想要定义一个值类型,我们不是去声明它继承自ValueType类,而是用struct声明它,就能表明我们定义的是一个值类型,在FCL里是根本找不到这个struct类的.用struct声明的类,编译器会自动将其继承ValueType类,这个用Reflector看一下就知道了.
这个interface就相当于struct,只是个语义上的声明关键字,而没有存在一个实际的类与之对应.
后来想想应该将目标聚集到象IComparable之类的,这个才是真正的接口.然而我用Reflector查看时,根本没找着它的基类.所以当时只是"固执"地认为"一切皆是对象,接口固然是对象",然后心里的底气是不足的,没有找到强硬的理由来说服自己.
今天在重看<<CLR Via C#>>关于box跟unbox一节时突然意思到其实方法很简单:
public class Test
{
public static string GetString(object o)
{
return "Get it!";
}
}
public static void Main(string[] args)
{
IComparable ic = (IComparable)6;
Test.GetString(ic);
}
编译器就能告诉我们答案.因为GetString()方法只接受object类型,而我们传入一个IComparable接口类型依然可以工作的很好,那么足以证明接口也是对象了.
一切皆是对象.