zoukankan      html  css  js  c++  java
  • 如何证明接口也是对象

    记得很久很久以前跟同事有关于接口是不是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接口类型依然可以工作的很好,那么足以证明接口也是对象了.

    一切皆是对象.

  • 相关阅读:
    Spring Boot 使用Redis
    openTSDB(转)
    httpClient 超时时间设置(转)
    HTTPClient 超时链接设置
    入坑python 自己写的小工具,纪念一下
    Linux下SVN创建新的项目
    java对象数组的概述和使用
    解决fastDFS客户端连接超时问题
    显示目录结构
    centos7开启80和8080端口
  • 原文地址:https://www.cnblogs.com/anders06/p/748708.html
Copyright © 2011-2022 走看看