C#为什么在创建新类时不需要继承对象类
本文关键字:继承 对象 不需要 新类时 为什么 创建 | 更新日期: 2023-09-27 18:29:58
我问自己这个问题已经很久了。想发布一下。.Net中的每个类都是从对象类继承的,所以为什么我们在创建新类时不需要继承对象类呢。在这种情况下,框架默认会做什么吗?
class Test
{
public override string ToString()
{
return base.ToString();
}
}
class MyClass : Object
{
public override string ToString()
{
return base.ToString();
}
}
上面两个类声明有什么不同吗?
class
都继承object
。您不必指定,因为编译器将在编译期间为您执行此操作。
示例取自规范:
class A {}
class B: A {}
(…)
由于
A
没有显式指定直接基类,因此其直接基类是隐式object
。
你们的声明没有区别。
对象类类型是所有其他类型的最终基类C#中的每个类型都直接或间接地派生自对象类类型
C#5规范
这意味着,如果您的类C1
已经继承了另一个类C2
,则编译器不会添加object
继承,因为它将通过C2
类继承而可用在继承树的顶部总是有一个System.Object
类
来自MSDN;
因为.NET Framework中的所有类都是从Object派生的,Object类中定义的每个方法在所有对象中都可用在系统中。
所以,你不需要做任何特别的事情。他们是一样的。
您只需检查IL代码,编译器就会忽略对象。
private class MyClass
{
public MyClass()
{
ldarg.0
call System.Object..ctor()
ret
}
public override string ToString()
{
locals:
V_0: string
ldarg.0
call string System.Object.ToString()
stloc.0
ldloc.0
ret
}
} // class MyClass
private class Test
{
public Test()
{
ldarg.0
call System.Object..ctor()
ret
}
public override string ToString()
{
locals:
V_0: string
ldarg.0
call string System.Object.ToString()
stloc.0
ldloc.0
ret
}
} // class Test