当前位置: 首页 > news >正文

怎么在自己电脑上搭建网站wordpress 手机适应

怎么在自己电脑上搭建网站,wordpress 手机适应,wordpress wplms,医药包装设计公司说在#xff0c;开篇之前在.NET世界里#xff0c;我们常常听到的一句话莫过于“System.Object是一切类型的根#xff0c;是所有类型的父类”#xff0c;以至于我在《你必须知道的.NET》8.1节 以“万物归宗#xff1a;System.Object”这样的title为System.Object授予至高荣…说在开篇之前在.NET世界里我们常常听到的一句话莫过于“System.Object是一切类型的根是所有类型的父类”以至于我在《你必须知道的.NET》8.1节 以“万物归宗System.Object”这样的title为System.Object授予至高荣誉。所以基于这样的观点就有了下面这句“接口是否也继承于System.Object”事实上这正是今天在技术群里小小讨论的一个插曲。                                                                                         www.anytao.com1 缘起 在.NET世界里我们常常听到的一句话莫过于“System.Object是一切类型的根是所有类型的父类”以至于我在《你必须知道的.NET》8.1节 以“万物归宗System.Object”这样的title为System.Object授予至高荣誉。所以基于这样的观点就有了下面这句“接口是否也继承于System.Object”事实上这正是今天在技术群里小小讨论的一个插曲。 持“interface也继承于object”是基于以下的两个观点推断的 观点一 接口本质上也是一个class因为接口类型编译之后在IL中被标识为.class既然是类那么不可避免的最终继承于System.Object。 观点二 假如有如下的接口和实现接口的类型 // Release : code01, 2009/03/04 // Author : Anytao, http://www.anytao.com // List : IObjectable.cs public interface IObjectable { } // Release : code02, 2009/03/04 // Author : Anytao, http://www.anytao.com // List : MyObject.cs public class MyObject : IObjectable { } 那么对于IObjectable对象而言下面的调用是可行的 // Release : code03, 2009/03/04 // Author : Anytao, http://www.anytao.com // List : Program.cs class Program {static void Main(string[] args){IObjectable obj new MyObject();//Call Object instance methodsobj.ToString();//Call Object static methodsIObjectable.Equals(null, null);} } 显然IObjectable类型变量obj可以访问存在于System.Object中的实例方法ToString()和虚方法Equals当然其他的几个公共服务也不例外GetType()、Equals()、GetHashcode()、ReferenceEquals()也可以由此推断interface可访问Object方法的蛛丝马迹。 不可否认以上观点的部分推理是完全正确的但是却遗憾的导致了错误的答案所以在本文中我将明确的找出interface不继承于object的原因和原理。关于接口本质话题的深度讨论请参考《你必须知道的.NET》1.5 “玩转接口”和7.4 “面向抽象编程接口和抽象类”的详细分析。 2 从面向对象寻找答案 为了找出接口继承的原因我想从接口存在的意义入手是最能够说明问题的办法接口就像面向对象设计中的精灵为OO思想注入了灵魂和活力接口突破了继承在纵向上的扩展方向在横向给予对象以更灵活的支持机制。 接口封装了对于行为的抽象定义了实现者必须遵守的契约。例如实现了System.ICloneable接口的类型被赋予了“可以被拷贝”这样的契约实现了System.Collections.IEnumerable接口的类型被赋予了“可以被枚举”这样的契约不同的接口定义了不同的契约就像不同的法律约束了不同的行为。那么接口应该赋予的契约至少在层次上保持相对的单纯和统一如果为所有接口都无一例外的赋予GetType()、Equals()、GetHashcode()、ReferenceEquals()还有ToString()这样的契约未免使得接口的纯洁和统一变得无从谈起例如强迫任何实现了System.ICloneable接口的类型同时遵守其他的约定是对ICloneable本身的侮辱。 从接口单一原则延伸思考一个包含杂七杂八的接口定义显然不是interface应该具有的纯正血统对于深谙面向对象为何物的.NET设计者而言这是不言而喻的问题。所以我们从接口本身的职责和意义出发决定interface不从System.Object继承是完全正确的。 3 在IL探求究竟 再次应用强大的IL武器来探求事实的真相我们以Reflector打开所有的.NET既有接口例如IList、IEmumerable、ICollection都会有个共同的发现那就是你找不到extends System.Object这样的标识 .class public interface abstract auto ansi ICloneable {.custom instance void System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) { bool(true) }.method public hidebysig newslot abstract virtual instance object Clone() cil managed{} } 自定义类型也是如此我们看看IObjectable的IL反编译定义 .class public interface abstract auto ansi IObjectable { } 而以extends标识继承关系是IL代码告诉我们真相的最佳证明。 System.Object真是“万物归宗”吗 让我们再次回眸一笑把Object进行一番把玩难道一切类型都得继承自Object吗其实不然。以ILASM.exe进行IL代码编译时有一个参数选项NOAUTOINHERIT正如其解释所描述的那样 /NOAUTOINHERIT Disable inheriting from System.Object by default 显然NoAutoInherit选项提供了为.NET类型“去掉帽子”的作用简单言之就是在未指定基类时禁止类型自动从Object继承。 我们可以玩儿一个翻来覆去的IL游戏将我们本文开始的Anytao.Insidenet.InterfaceInside.exe控制台程序以ILDASM.exe工具Dump为IL代码My.il例如MyObject被反编译为 .class public auto ansi beforefieldinit Anytao.Insidenet.InterfaceInside.MyObjectextends [mscorlib]System.Objectimplements Anytao.Insidenet.InterfaceInside.IObjectable {.method public hidebysig specialname rtspecialname instance void .ctor() cil managed{// Code size 7 (0x7).maxstack 8IL_0000: ldarg.0IL_0001: call instance void [mscorlib]System.Object::.ctor()IL_0006: ret} // end of method MyObject::.ctor} // end of class Anytao.Insidenet.InterfaceInside.MyObject 我们可以选择删除其中所有extends继承的代码再以ILASM.exe对其进行noautoinherit编译并生成 ilasm /exe /output:noobject.exe /noautoinherit my.il 新生成的noobject.exe程序将没有从object继承某种程度上打破了“万物归宗”的创奇MyObject就像一个无根之木飘摇在我机器的某个深处。 4 结论 interface不从object继承那么足下高见呢文章虽短取一瓢饮之畅也。 那么我们该如何回答本文开始对此质疑的两种观点呢 回答观点一 接口本质上还是一个类但是一个特殊的类它的特殊性表现在诸多的方面例如所有的方法和属性都是抽象的、支持多继承等等既然特殊那就特殊到底不继承于任何的父类也是其中之一吧。 虽然这种解释未免牵强但是如前文所述回到接口本源的角度而言却是最好的解释。 回答观点二 .NET一切类型都隐式继承于System.Object那么对于实现了任何接口的类型而言例如 // Release : code02, 2009/03/04 // Author : Anytao, http://www.anytao.com // List : MyObject.cs public class MyObject : IObjectable { } 其在本质上相当于 // Release : code02, 2009/03/04 // Author : Anytao, http://www.anytao.com // List : MyObject.cs public class MyObject : Object, IObjectable { } 所以对于MyObject实例obj而言obj.ToString()实质是MyObject类继承于object而不代表接口IObjectable也继承于object。那么IObjectable.Equals()则是编译器做了手脚将IObjectable.Equals()翻译为Object.Equals()所致来自脑袋高论表示热烈感谢。事实上对于接口声明类型的方法调用在实现机制上完全不同于一般的直接方法调用和虚方法分派机制我们将在后续篇幅中详细讨论这一更重要的话题。 好了interface想说爱你不容易可能我们还会再次相遇也敬请朋友们继续关注你必须知道的.NET。 补充讨论Leo ZhangInterface到底继承于Object吗之我见 支持(0) 反对(0) #8楼 2009-03-05 08:37 海天一鸥 CLR对象可以继承另一个对象可以继承N多个接口。 所有的对象都有根继承对象Sytem.Object但它可以继承多个接口。接口和对象仍然是本质上不同的东西。   支持(0) 反对(0) #9楼 [楼主] 2009-03-05 08:53 Anytao xiao_p  哈哈老赵一般都比较晚我很少这么晚那是因为我没他那么牛所以不敢晚睡:-) 支持(0) 反对(0) #10楼 2009-03-05 08:55 落实 天呀这么晚还不睡牛人呀我佩服 支持(0) 反对(0) #11楼 [楼主] 2009-03-05 08:56 Anytao #183;风信子#183;  非也非也我在博客上所发表的只有全书内容的20%左右所以大部分精彩的内容还得到书上寻找答案。  从第20回起发表的系列文章在书中并未包括我将其戏称为“必须的2.0”这些新内容将考虑在后续《你必须知道的.NET》中出版。  谢谢:-) 支持(0) 反对(0) #12楼 [楼主] 2009-03-05 08:57 Anytao 李战  老哥近来很少见你冒泡了常来呀:-P 支持(0) 反对(0) #13楼 [楼主] 2009-03-05 08:57 Anytao CoderZh  --引用--------------------------------------------------  CoderZh: 刚到公司惯例先浏览博客园的新文章。  --------------------------------------------------------  好像是很多人的习惯 支持(0) 反对(0) #14楼 [楼主] 2009-03-05 09:00 Anytao 海天一鸥  诚如所言接口确实存在诸多的不一样本文论述的也算是特殊之一但是在IL级别将接口看做class也未尝不可。 支持(0) 反对(0) #15楼 [楼主] 2009-03-05 09:01 Anytao 落实  一口气上五楼不觉得累:-)  写完才发现好像比较晚了好在时间没有太久:-) 支持(0) 反对(0) #16楼 [楼主] 2009-03-05 09:03 Anytao Anders Liu  哈哈是滴是滴这也算“罪证”之一。 支持(0) 反对(0) #17楼 2009-03-05 09:07 不知道用什么昵称了 先留名在读  一天睡几个小时呀佩服 支持(0) 反对(0) #18楼 2009-03-05 09:08 Jeffrey Zhao 有时候也很矛盾啊比如  IMyObject o ...  Type t o.GetType();  如果我说如果IMyObject没有定义GetType方法的话为什么可以这样调用呢我觉得从概念上语言已经作了约定了即任何对象都会继承Object拥有Object的成员。  那么如果/noautoinherit了呢我不知道啊如果没人试试看的话只能我自己来了赫赫……  支持(0) 反对(0) #19楼 2009-03-05 09:14 徐少侠 我的理解是编译器做的手脚 同样的问题还出现在值类型、枚举这些东西身上 从定义上说他们也都是派生自object的   支持(0) 反对(0) #20楼 [楼主] 2009-03-05 09:14 Anytao -brian-  今天睡的比较少 支持(0) 反对(0) #21楼 2009-03-05 09:17 麒麟.NET 李战  呵呵我通常是一边吃早饭一边看  //如果留言有表情好像无法引用是个bug吧 支持(0) 反对(0) #22楼 2009-03-05 09:18 飞林沙 Jeffrey Zhao  那么如果/noautoinherit了呢我不知道啊如果没人试试看的话只能我自己来了赫赫……  -----------------  如果那样的话一样可以调用GetType()方法的。我还是支持观点一我一直都坚信接口从本质上来说是一个类。不过是一个特殊的类罢了 支持(0) 反对(0) #23楼 2009-03-05 09:18 WXWinter(冬) 接口,是栈模板  类(这里指类的实体部分),是堆模板  如果有如下结构:  //  public interface I  {  void call();  }  public class C1 : I  {  public void call()  {  }  }  //  当我们这样写时:  C1 obj new C1();  其实是完成了如下工作:  I obj new C1();  (1) I obj : 用接口初始化栈  (2) new C1() : 用类实体初始化堆  (3) : 栈与堆关联  //  当然,很多时候我们常这样写  public class C2  {  public void call()  {  }  }  //-  C1 obj new C1();  其实通常情况下,定义一个类,一定要有接口与实现两部份,只不过很多语言帮我们做了这样一件事,当定义一  Class时,如果有的实现不是实现某个接口的定义,在使用时会为其提取一个接口,用于初始化栈  接口,存在于栈中  类(这里指类的实体部分),存在于堆中,  他们分别处于两个世界中,沟通这两个世界的纽带就是指针.  而NET中的interface与Class只不过是对这个基本关系进行了一个包装 支持(0) 反对(0) #24楼 [楼主] 2009-03-05 09:19 Anytao Jeffrey Zhao  --------------------------  IMyObject o new LaoZhao();  Type t o.GetType();  --------------------------  哈哈这一点不奇怪因为为o实例化的类型例如LaoZhao同时隐式继承于object所以以o访问GetType是没有任何问题的而且返回的应该是类型LaoZhao。  关于/noautoinherit情况试完告诉我:-)    支持(0) 反对(0) #25楼 2009-03-05 09:20 红泥 interface A { void Do(); } class B : A { public void Do() { } } class Test { static void Main() { A a new B(); a.ToString(); A.Equals(null,null); Console.Read(); } } a.ToString();A.Equals(null,null);能调用都是为了圆‘一切继承自Object’吧即使接口不继承自Object也能做成像继承Object其实把A.Equals(null,null)编译成call bool [mscorlib]System.Object::Equals(object,object) 但下面就有些迷惑了 !dumpclass 009813b8 Class Name: A mdToken: 02000002 (C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\ph\ph\bin\Debug\ph.exe) Parent Class: 790c3ef0 Module: 00982c5c Method Table: 00983094 Vtable Slots: 1 Total Method Slots: 1 Class Attributes: a0 Interface, Abstract,  NumInstanceFields: 0 NumStaticFields: 0 !dumpclass 790c3ef0 Class Name: System.Object mdToken: 02000002 (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll) Parent Class: 00000000 Module: 790c1000 Method Table: 79330508 Vtable Slots: 4 Total Method Slots: a Class Attributes: 102001  NumInstanceFields: 0 NumStaticFields: 0 能看出来A的父类Parent Class: 790c3ef0是Object这个是为啥也是为了圆’一切都继承Object 呵呵 支持(0) 反对(0) #26楼 2009-03-05 09:21 Jeffrey Zhao Anytao  但是接口引用的对象应该只能访问到接口的成员吧从概念上讲。  编译器在这方面就是在搞“默认”了。 支持(0) 反对(0) #27楼 [楼主] 2009-03-05 09:22 Anytao 徐少侠  编译器将将IObjectable.Equals()翻译为Object.Equals()是编译器做的小小手脚而IObjectable是否继承于Object则是“与生俱来”的。 支持(0) 反对(0) #28楼 2009-03-05 09:22 dfgdfgdfgdfgd 用户自定义类型默认是继承object的只不过编译器隐式的为我们写好了。 第二点 就是刚刚提到的 interface 不继承object 可不可以认为 interface 和object 都是用户类型的基类 .而唯一的区别在于object 提供几个方法让子类去实现。 支持(0) 反对(0) #29楼 [楼主] 2009-03-05 09:24 Anytao 麒麟.NET  可以通知duduhelp了 支持(0) 反对(0) #30楼 2009-03-05 09:25 小军人 写的比较易懂,看好你出《你必须知道的.NET》续.  支持(0) 反对(0) #31楼 [楼主] 2009-03-05 09:26 Anytao 飞林沙  --引用--------------------------------------------------  飞林沙: Jeffrey Zhao  那么如果/noautoinherit了呢我不知道啊如果没人试试看的话只能我自己来了赫赫……  -----------------  如果那样的话一样可以调用GetType()方法的。我还是支持观点一我一直都坚信接口从本质上来说是一个类。不过是一个特殊的类罢了  --------------------------------------------------------  我想文中已经有明确的解释和说明了 支持(0) 反对(0) #32楼 2009-03-05 09:27 Jeffrey Zhao --引用--------------------------------------------------  飞林沙: Jeffrey Zhao  那么如果/noautoinherit了呢我不知道啊如果没人试试看的话只能我自己来了赫赫……  -----------------  如果那样的话一样可以调用GetType()方法的。我还是支持观点一我一直都坚信接口从本质上来说是一个类。不过是一个特殊的类罢了  --------------------------------------------------------  那就怪了如果noautoinherit则说明类不默认继承Object那么GetType()从哪里来 支持(0) 反对(0) #33楼 [楼主] 2009-03-05 09:30 Anytao WXWinter(冬)  说得很精彩不过是很多“障眼法”迷失了眼睛罢了。 支持(0) 反对(0) #34楼 2009-03-05 09:34 dfgdfgdfgdfgd --引用-------------------------------------------------- Jeffrey Zhao: --引用-------------------------------------------------- 飞林沙: Jeffrey Zhao 那么如果/noautoinherit了呢我不知道啊如果没人试试看的话只能我自己来了赫赫……  ----------------- 如果那样的话一样可以调用GetType()方法的。我还是支持观点一我一直都坚信接口从本质上来说是一个类。不过是一个特殊的类罢了 -------------------------------------------------------- 那就怪了如果noautoinherit则说明类不默认继承Object那么GetType()从哪里来 ----------------------------------------------------------引用-------------------------------------------------- Jeffrey Zhao: --引用-------------------------------------------------- 飞林沙: Jeffrey Zhao 那么如果/noautoinherit了呢我不知道啊如果没人试试看的话只能我自己来了赫赫……  ----------------- 如果那样的话一样可以调用GetType()方法的。我还是支持观点一我一直都坚信接口从本质上来说是一个类。不过是一个特殊的类罢了 -------------------------------------------------------- 那就怪了如果noautoinherit则说明类不默认继承Object那么GetType()从哪里来 -------------------------------------------------------- 应该还是从object 来 支持(0) 反对(0) #35楼 2009-03-05 09:38 Jeffrey Zhao BZZ  好吧看上去大家还是在猜……过一会儿我自己去试试看 支持(0) 反对(0) #36楼 2009-03-05 09:50 麒麟.NET 是不是也可以这样说如果interface继承自Object就无法实现多重继承了 支持(0) 反对(0) #37楼 [楼主] 2009-03-05 09:51 Anytao 红泥  需要一点探索和思考~~~ 支持(0) 反对(0) #38楼 [楼主] 2009-03-05 09:52 Anytao BZZ  --引用--------------------------------------------------  BZZ: 用户自定义类型默认是继承object的只不过编译器隐式的为我们写好了。  第二点 就是刚刚提到的 interface 不继承object 可不可以认为 interface 和object 都是用户类型的基类 .而唯一的区别在于object 提供几个方法让子类去实现。  --------------------------------------------------------  呵呵这种说法我不敢贸然肯定任何官方或者非官方都没有这么说过:-) 支持(0) 反对(0) #39楼 [楼主] 2009-03-05 09:52 Anytao 凌军  谢谢 支持(0) 反对(0) #40楼 2009-03-05 10:16 重典 Jeffrey Zhao 老赵山寨我。。。。 支持(0) 反对(0) #41楼 2009-03-05 10:25 我的地盘我做主 IObjectable obj new MyObject();  //Call Object instance methods  obj.ToString();  虽然MyObject也继承Object,由于obj的类型是IObjectable类型,所以在这里怎么能调用ToString()方法呢.  看完了整片文章,对这里还是新潮疑惑 支持(0) 反对(0) #42楼 2009-03-05 10:44 viping 从运行的情况看  MyObject的Parent Class: 是System.Objectobj 可当做指针在C#里它运行时是确定的(在C里不确定这就是CLR能使用GC的好处)  但是如果把接口更改为  public abstract class IObjectable  这样在运行时MyObject的Parent Class是IObjectable且Class Attributes: 为Abstract,。  而IObjectable的Parent Class才是System.Object。  所以接口这玩意规约于设计时。。与运行时无关。 支持(0) 反对(0) #43楼 2009-03-05 10:57 jason wei 强解 支持(0) 反对(0) #44楼 2009-03-05 10:58 残香恨 接口是不是可以看成这样的一个特殊“类”在IL中接口貌似类它不仅有自己声明的方法而且还把Object的所有方法声明“偷”过来了呢因为任何implement接口的类都直接或间接的extends了Object类。 支持(0) 反对(0) #45楼 2009-03-05 12:04 会长 好文啊 支持(0) 反对(0) #46楼 2009-03-05 13:04 AlexLiu 确实我们似乎是应该对一些看似真理的东西加以反思。  凡事都要问一个为什么呢 支持(0) 反对(0) #47楼 2009-03-05 13:55 包建强 由于接口是由暴露给其它类型的项方法、属性、事件组成的描述符所以接口本身不能提供这些项的实现因此从定义上它是一个抽象类型。在ILAsm中定义一个接口时因为IL汇编器在遇到interface时会自动添加关键字abstract所以可以省略关键字abstract。  再说一个BT的概念接口只可能为它的静态方法提供实现。就是说在IL中你可以写静态方法。我想我这么说会雷倒一片人。 支持(0) 反对(0) #48楼 [楼主] 2009-03-05 14:27 Anytao 重典  怎么山寨的我也想:-P 支持(0) 反对(0) #49楼 [楼主] 2009-03-05 14:28 Anytao 我的地盘我做主  呵呵对于你提出的问题需要一大篇长篇大论来解释我已经计划在后续内容中以3-4篇的内容来阐释清楚这个问题届时再请来兄继续欣赏何如 支持(0) 反对(0) #50楼 [楼主] 2009-03-05 14:31 Anytao 红泥  overred 我想这是对运行时分析的很好的补充:-P #55楼 [楼主] 2009-03-05 14:36 Anytao 包建强  好像谁也没雷着详细参考《Expert .NET 2.0 IL Assembler》 第七章 命名空间和类  :-) 支持(0) 反对(0) #56楼 2009-03-05 15:08 MSFT:waywa 韦恩卑鄙 --引用--------------------------------------------------  包建强: 由于接口是由暴露给其它类型的项方法、属性、事件组成的描述符所以接口本身不能提供这些项的实现因此从定义上它是一个抽象类型。在ILAsm中定义一个接口时因为IL汇编器在遇到interface时会自动添加关键字abstract所以可以省略关键字abstract。  再说一个BT的概念接口只可能为它的静态方法提供实现。就是说在IL中你可以写静态方法。我想我这么说会雷倒一片人。  --------------------------------------------------------  我已经雷倒了 支持(0) 反对(0) #57楼 2009-03-05 15:09 MSFT:waywa 韦恩卑鄙 --引用--------------------------------------------------  Anytao: 包建强  好像谁也没雷着详细参考《Expert .NET 2.0 IL Assembler》 第七章 命名空间和类  :-)  --------------------------------------------------------  你骂我不是人 我bs你 亩哈哈 支持(0) 反对(0) #58楼 2009-03-05 15:15 MSFT:waywa 韦恩卑鄙 个人认为 既然是共性的oo思想 那么 .net il 对于interface 的特殊处理就不应该作为共性的接口认知的一部分。初学者看了这篇文章 对理解.net 以外的接口会产生很不好的作用。  作为正统oo思想 接口不能独立于实例存在 而且理应不存在任何已经实现的方法和静态成员接口的实例不应存在接口的静态方法也不应该存在  在这个帖子里我不小心听到了一些关于,net的风言风语 现在我决定把它忘记。  亩哈哈 支持(0) 反对(0) #59楼 2009-03-05 15:40 Ivony... 这个题目本来就是不成立的因为在C#的概念中接口不是类接口不能被继承只能被实现接口也不能从一个类型继承。而C#的官方说法也是所有类型都间接继承于System.Object这里的主语是类型而不是接口。  一个接口可以扩展进化另一个接口但没有继承于某一个类型的概念。  所以这个问题的答案应该说“接口” “不能” “继承”这个命题不成立。 支持(0) 反对(0) #60楼 2009-03-05 16:00 我的地盘我做主 Anytao  呵呵,到时候我一定好好拜读你的佳作 支持(0) 反对(0) #61楼 2009-03-05 17:55 Anders06 妙文妙文  接口定义可以理解为声明性的东西 接口是不能直接被创建的如下实际是创建了MyObject类的一个实例  IObjectable obj new MyObject();  所以万物还是皆对象不知是否可以如此理解 支持(0) 反对(0) #62楼 2009-03-05 18:37 primeli 万物归宗System.Object。但Interface不是“物”是契约是规则是虚的思想不是实实在在的物“。类似万有引力定律一样是抽象出来的思想不能归为物体。 OKIObjectable obj new MyObject(); 其实是实例化了一个继承自System.Object的具体对象为啥因为你用的是class MyObject。class关键字就表明了其肯定继承System.Object是个实物。 而继承自IObjectable接口仅仅是符合其契约和规则符合协定的定律而已。照规矩办事但规矩本身不是物是抽象思维。 另外interface关键字与class关键字代表的含义不同哦你用class默认继承System.Object。而用interface你找不到System.Object痕迹。 因此这个结论很简单interface本身不继承System.Object但其具体的实现因为使用class关键字肯定继承System.Object也就是楼主的结论2。 大家想想数学定律万有引力定律等等能算“物”么还是这些是客观存在的但没有任务物体附属的规律呢 支持(0) 反对(0) #63楼 2009-03-05 20:10 Anders06 非主流程序员  赞 支持(0) 反对(0) #64楼 [楼主] 2009-03-05 20:55 Anytao 韦恩卑鄙  呵呵我是在你之前说的再说包子雷人是他的事儿反正我没被雷:-)  不过我作证你是大大的好人。 支持(0) 反对(0) #65楼 [楼主] 2009-03-05 20:58 Anytao 韦恩卑鄙  --引用--------------------------------------------------  韦恩卑鄙: 个人认为 既然是共性的oo思想 那么 .net il 对于interface 的特殊处理就不应该作为共性的接口认知的一部分。初学者看了这篇文章 对理解.net 以外的接口会产生很不好的作用。  作为正统oo思想 接口不能独立于实例存在 而且理应不存在任何已经实现的方法和静态成员接口的实例不应存在接口的静态方法也不应该存在  在这个帖子里我不小心听到了一些关于,net的风言风语 现在我决定把它忘记。  亩哈哈  --------------------------------------------------------  事实上对应接口不光是在IL层有特别的处理其本质的定位上就是完全不同于普通类型的概念所以对初学者有不好影响完全么必要只要仔细看文章我想理解是很清楚的。  另外哪里有对.NET的风言风语呀:-) 支持(0) 反对(0) #66楼 [楼主] 2009-03-05 21:30 Anytao Ivony...  首先这不是一个关于C#接口和类概念的清算贴全文没有任何字眼和概念直言接口就是类类也是接口如果那样搞两个概念是完全没有必要的而且事实上我们讨论的是基于.NET概念而言阐述的也是通用类型系统的概念。  如果对于“而C#的官方说法也是所有类型都间接继承于System.Object这里的主语是类型而不是接口。 ”有所质疑。那么首先需要了解接口是不是类型我想官方定义可能更加权威所以请不妨参照http://msdn.microsoft.com/zh-cn/library/2hf02550(VS.80).aspx  事实上对于类型的分类和定位可以有多个角度其实在我看来CTS单纯以值类型和引用类型的二元分法有时不一定表达了最科学的角度例如从大概念上分为值类型、引用类型、指针类型和接口类型也未尝不可。  本文的意义在于什么呢我想答案是事实上很多身边的朋友都存在对这一问题的误区也是我想写写想法的初衷仅此而已。    支持(0) 反对(0) #67楼 [楼主] 2009-03-05 21:30 Anytao 我的地盘我做主  谢谢 支持(0) 反对(0) #68楼 [楼主] 2009-03-05 21:31 Anytao Anders06  我觉得可以这么理解而且很对。哈哈 支持(0) 反对(0) #69楼 [楼主] 2009-03-05 21:32 Anytao 非主流程序员  Anders06  表达同样的呼声赞。 支持(0) 反对(0) #70楼 2009-03-06 01:00 Anders Cui 嗯唯“物”主义还是站得住脚的:) 支持(0) 反对(0) #71楼 2009-03-06 09:34 MSFT:waywa 韦恩卑鄙 --引用--------------------------------------------------  Anytao: 韦恩卑鄙  --引用--------------------------------------------------  韦恩卑鄙: 个人认为 既然是共性的oo思想 那么 .net il 对于interface 的特殊处理就不应该作为共性的接口认知的一部分。初学者看了这篇文章 对理解.net 以外的接口会产生很不好的作用。  作为正统oo思想 接口不能独立于实例存在 而且理应不存在任何已经实现的方法和静态成员接口的实例不应存在接口的静态方法也不应该存在  在这个帖子里我不小心听到了一些关于,net的风言风语 现在我决定把它忘记。  亩哈哈  --------------------------------------------------------  事实上对应接口不光是在IL层有特别的处理其本质的定位上就是完全不同于普通类型的概念所以对初学者有不好影响完全么必要只要仔细看文章我想理解是很清楚的。  另外哪里有对.NET的风言风语呀:-)  --------------------------------------------------------  老包不是说interface 在il可以加入静态成员么 这么雷人的事情我尽量忘记他 恩恩    支持(0) 反对(0) #72楼 [楼主] 2009-03-06 09:54 Anytao Anders Cui  :-) 支持(0) 反对(0) #73楼 [楼主] 2009-03-06 10:15 Anytao 韦恩卑鄙  :-) 支持(0) 反对(0) #74楼 2009-03-09 11:08 Ivony... --引用--------------------------------------------------  Anytao: Ivony...  首先这不是一个关于C#接口和类概念的清算贴全文没有任何字眼和概念直言接口就是类类也是接口如果那样搞两个概念是完全没有必要的而且事实上我们讨论的是基于.NET概念而言阐述的也是通用类型系统的概念。  如果对于“而C#的官方说法也是所有类型都间接继承于System.Object这里的主语是类型而不是接口。 ”有所质疑。那么首先需要了解接口是不是类型我想官方定义可能更加权威所以请不妨参照a hrefhttp://msdn.microsoft.com/zh-cn/library/2hf02550 target_newhttp://msdn.microsoft.com/zh-cn/library/2hf02550/a(VS.80).aspx  事实上对于类型的分类和定位可以有多个角度其实在我看来CTS单纯以值类型和引用类型的二元分法有时不一定表达了最科学的角度例如从大概念上分为值类型、引用类型、指针类型和接口类型也未尝不可。  本文的意义在于什么呢我想答案是事实上很多身边的朋友都存在对这一问题的误区也是我想写写想法的初衷仅此而已。  --------------------------------------------------------  事实上LZ已经在不知不觉中把这个问题给挖出来了我只是进一步阐述罢了。  我们证明一个命题之前必须先将其中的概念明确。而在这个例子中事实上继承这个概念就是不明确的所以这个命题是没有意义的。  这一点LZ已经在文章中挖出来了只是自己没发现引用文中一句话  “而以extends标识继承关系是IL代码告诉我们真相的最佳证明。”  很好如果我们定义extends标识了继承关系那么继承接口是不是extends标识的呢答案是否定的。  这就出问题了LZ在文中给我们提出了一个命题  “继承关系以extends标识“  如果这个命题是正确的则接口永远不会出现在任何extends中也不会extends任何别的东西即使是“继承”于别的接口。可以推论接口不能被任何东西“继承”也不能“继承”于任何东西。原命题“interface到底继承于object吗“就不成立了。  如果这个命题是错误的那么LZ的推论也就不成立了。  所以要说明白“interface到底继承于object吗”我们就一定要先厘清继承的定义。  所以这个问题可以有N个答案比如说  1、令“继承”即是指A类型对象可以直接被当作B类型对象处理其中并无隐式类型转换也未曾创建一个新的B类型的对象而是用B类型来操作A类型对象即称为A类型继承于B类型。  从这个定义出发接口的确继承于System.Object。就算实际上是实现接口的类型都继承于System.Object但如果继承的定义仅从效果上来看待的话那么接口的确继承于System.Object。  其他的定义我就不探讨了。 支持(0) 反对(0) #75楼 2009-03-31 23:15 残香恨 《框架设计第二版CLR Via C#》的P265-266“此外CLR还允许调用Object定义的方法因为所有类都继承了Object的方法........此外可以调用Object定义的任何一个方法比如GetType因为CLR知道所有类型都继承自Object。”  由此可知之所以出现这种现象是CLR的支持C#的约定。 支持(0) 反对(0) #76楼 2009-05-22 16:12 DiggingDeeply C里没有interface关键字但同样完美实现了OO而且有多继承。  叫什么无所谓我的理解其实interface就是C的抽象类的一种特例。  可以这么理解抽象类可以实现接口的功能但是反之不行因为接口不能有实现代码所以接口也其实就是只含有定义的抽象类。  不知道这么说合适不 支持(0) 反对(0) #77楼 2009-06-02 18:16 xxxxxxxxxxxxxxxxx --引用-------------------------------------------------- 我的地盘我做主: IObjectable obj new MyObject(); //Call Object instance methods obj.ToString(); 虽然MyObject也继承Object,由于obj的类型是IObjectable类型,所以在这里怎么能调用ToString()方法呢. 看完了整片文章,对这里还是新潮疑惑 -------------------------------------------------------- 这个时候obj的类型并不是IObjectable而是MyObjectIObjectable写在前面只是代表obj是一个实现了这个接口的类的实例。接口是不能实例化的。 支持(0) 反对(0) #78楼 2009-06-02 18:24 xxxxxxxxxxxxxxxxx --引用-------------------------------------------------- DiggingDeeply: C里没有interface关键字但同样完美实现了OO而且有多继承。 叫什么无所谓我的理解其实interface就是C的抽象类的一种特例。 可以这么理解抽象类可以实现接口的功能但是反之不行因为接口不能有实现代码所以接口也其实就是只含有定义的抽象类。 不知道这么说合适不 -------------------------------------------------------- 支持你这种说法 支持(0) 反对(0) #79楼 2009-08-21 03:11 拓荒者.贾 继承就是extends,实现就是implements. 继承就是继承,实现就是实现索性清楚一点多好吗 直接搬用java代码嘿嘿   支持(0) 反对(0) #80楼 2011-10-14 14:08 杨曹贵 距离你出书已经有两年了现在才来看你文章会努力的学习楼主V5. 支持(0) 反对(0) #81楼 2015-03-07 21:48 残香恨 多年以后回头来看或许这三行代码可以说明问题。 Type type typeof(IDisposable); Console.WriteLine(type.BaseType); Console.WriteLine(type.IsSubclassOf(typeof(Object)));
http://www.pierceye.com/news/118854/

相关文章:

  • 全景网站建设做米业的企业网站
  • 珠海哪个建设网站建设好ui网站界面设计
  • 中国有名的模版网站电商建设网站
  • 网站改域名合肥网站建设企业
  • 建网站需要软件c 怎么做能让窗体访问网站
  • 呼家楼网站建设黄骅市官方网站
  • 空包网站分站怎么做手表网站哪个最好知乎
  • 手机商城建站系统网站建设有关建筑网站建设方案
  • 做网站需要具备的基础条件wordpress 修改后台
  • 网站做点击收费标准重庆建设工业集团
  • wordpress个人网站备案管理广州网站搭建费用
  • 英文网站建设的原因泰安房产信息网网签查询
  • 怎么将网站做成html如何寻找一批做网站的公司
  • 苏州网站建设孙峰南宁站建站时间
  • 海淀手机网站设计公司苏州建设工程有限公司
  • 兰州网站设计制作王妃貌美还狠凶
  • 做新闻微网站有哪些淘宝优惠劵做网站模版
  • 网站维护的意义百度一下官网首页百度
  • 我是做网站怎么赚钱外贸网站google推广
  • 无锡网站seo报价软件开发模型是对软件开发过程的一种规范描述
  • 暴利产品竞价单页网站微信电商小程序开发公司
  • 网站中的搜索功能怎么做怎样在网站做友情链接
  • 新闻单位建设网站的意义怎么和其它网站做友情链接
  • 做哪类网站没有版权问题帮忙做公司网站
  • 商城式网站具备哪些功能吗郑州网站设
  • 潍坊市做网站沈阳专业网站制作团队
  • 婚恋网站女孩子都是做美容西安做网站南通公司
  • 网站制作培训中心想做网站建设
  • 免费模板素材网站ppth5开源网站模板
  • 建筑型专业网站有哪些网站想做个链接怎么做的