如何证明接口也是对象
2007-05-16 15:56
351 查看
记得很久很久以前跟同事有关于接口是不是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接口类型依然可以工作的很好,那么足以证明接口也是对象了.
一切皆是对象.
我当然是认为接口是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接口类型依然可以工作的很好,那么足以证明接口也是对象了.
一切皆是对象.
相关文章推荐
- 客户端如何调用IBinder接口对象
- [iphone 开发学习笔记]Object-C和C语言最大的区别也是最大的扩展-----消息(即如何调用一个对象中的函数)
- Golang 接口切片存储多层嵌套Map对象,如何初始化,又如何直接读取嵌套层的key-value值
- c# 如何在对象级隐藏接口的实现
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- Delphi 接口使用中,对象生命周期管理,如何释放需要注意的问题
- 服务端如何暴露IBinder接口对象
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- autofac如何注册静态方法里的接口对象
- 如何通过COM接口得到实现该接口的对象实例
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- autofac如何注册静态方法里的接口对象
- 黑马程序员_java如何获取一个类(包括接口和抽象类)的对象
- 如何使用==操作符,Equals方法,ReferenceEquals方法,IEquatable接口比较2个对象
- Delphi 接口使用中,对象生命周期管理,如何释放需要注意的问题
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- Delphi 接口使用中,对象生命周期管理,如何释放需要注意的问题
- Spring 如何将无法使用new操作符新建的对象作为spring的bean (使用FactoryBean接口)
- 如何利用Skyline6.1的接口创建动态对象DynamicObject
- spring Autowired注释以及如何使用接口对象实现解耦