我一直在问自己这个问题很长一段时间了。想发布它。 .Net中的每个类都是从对象类继承的,所以为什么我们在创建新类时不需要继承对象类。在这种情况下,默认情况下框架是否有任何功能?
class Test
{
public override string ToString()
{
return base.ToString();
}
}
class MyClass : Object
{
public override string ToString()
{
return base.ToString();
}
}
上述两类声明有什么不同吗?
答案 0 :(得分:12)
默认情况下,每个class
都会继承object
。您不必指定它,因为编译器会在编译期间为您执行此操作。
取自规范的例子:
class A {}
class B: A {}
(...)
由于
A
未明确指定直接基类,因此其直接基类隐式object
。
您的声明之间没有区别。
对象类类型是所有其他类型的最终基类。 C#中的每个类型都直接或间接地从对象类类型派生。
C#5规范
IT意味着,如果您的类C1
已经继承了另一个类C2
,则编译器不会添加object
继承,因为它已经可以通过C2
类获得遗产。 在继承树的顶部,始终有System.Object
类。
答案 1 :(得分:2)
答案 2 :(得分:1)
您只需检查编译器忽略对象的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