.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Is Object Class, the Root of all Hierarchies?

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站


Is Object Class, the Root of all Hierarchies?

Author: C. Prashanth
Date Added: 02nd Apr 2003
Type: Tutorial
Rating: Average visitor rating of 5 out of 10Average visitor rating of 5 out of 10Average visitor rating of 5 out of 10Average visitor rating of 5 out of 10Average visitor rating of 5 out of 10Average visitor rating of 5 out of 10Average visitor rating of 5 out of 10Average visitor rating of 5 out of 10Average visitor rating of 5 out of 10Average visitor rating of 5 out of 10

This is a printable version of "Is Object Class, the Root of all Hierarchies?". For the complete online version, please visit http://www.devarticles.com/content.php?articleId=498


Page 1: Introduction

This might come as a surprise for many, to see me doubting the information presented in almost all of the .NET books available and even the MSDN library, but as we delve deeper into this topic, you will find yourself in the same predicament as I am now.


Page 2: The Article

What is an Object class?


For those who are new to .NET, according to MSDN library - "Object is the ultimate superclass of all classes in the .NET Framework; it is the root of the type hierarchy."


This is the class declaration of the object class


[Serializable]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class object


All the classes are required to inherit from this Object class but they need not declare inheritance from it explicitly as it is taken care internally. While all classes inherit from it, it doesn’t inherit from any super class or interface.


So what's the problem?


This I will explain with a help of an example.


Let's define a class called Foo


Class Foo
{
 void show() {}
 static void main(string[] args)
 {
  Foo f=new Foo();
}
}


If you have Visual Studio IDE or any other editor which supports intellisense, when you type f. you will get the following methods


1. Equals
2. GetHashCode
3. ToString
4. GetType
5. show


Even though you have defined only one method show since Foo implicitly inherits from Object it gets the other four methods.


Let's now define an interface called IFoo and make Foo class inherit from it.


Interface IFoo
{
 void Ishow();
}
class Foo:IFoo
{
 void show(){}
 void IFoo.Ishow(){}
 static void main(string[] args)
 {
  Foo f=new Foo();
  IFoo ifoo=f;
}
}


Since we have inherited from IFoo, we need to implement the Ishow method. When we type ifoo.show(), we get a compile time error saying that the interface doesn’t contain a definition for show method. This is correct since an interface is allowed to access only methods declared by it even though the object it might be referring has other methods.


The problem arises now when we type ifoo.equals(f), ideally this should give a compile time error since it is not declared by IFoo interface or none of its super interface but it  doesn’t. Nor does it give a compile time error for using any of the methods of Object class.


This is definitely a discrepancy from the fact that an interface is allowed to access only methods declared by it. An interface for sure can't inherit from a class so how then can we explain for the four methods of Object which are available to any interface. The only possible solution can be that there must be a super interface like IObject as declared below:


Interface IObject
{
 public virtual bool equals(object);
 public virtual int getHashCode();
 public Type getType();
 public virtual string toString();
}


and the Object class must have inherited from this interface and also that this IObject must be the super interface of all the interfaces just like Object  is to other classes.



Page 3: Conclusion

This is one of the issues which Microsoft should clarify so that the programmers can have a better understanding of the language.


For more great programming articles, please visit http://www.devarticles.com. If you have an opinion or question about this article, then please post it at the devArticles developer forum, which is located at http://www.devarticles.com/forum




相关文章

相关软件