如上所述,在c#中从Object继承是否是多余的?下面的两组代码是否会导致定义等效对象?
class TestClassUno : Object
{
// Stuff
}
对比
class TestClassDos
{
// Stuff
}
我在 MSDN 上四处窥探,但无法找到任何完全确定的信息。
如果未指定,每个class
定义都将隐式继承自,System.Object
因此这两个定义是等价的。
这两者唯一不同的是,如果有人Object
在同一个命名空间中实际定义了另一种类型。在这种情况下,本地定义Object
将优先并更改继承对象
namespace Example {
class Object { }
class C : Object { }
}
非常极端的案例,但如果我以前没有看过它就不会指出它
请注意,如果您使用object
而不是Object
. C# 关键字object
是类型别名System.Object
,因此它不会匹配Example.Object
.
namespace Example2 {
class Object { }
class C : Object { } // Uses Example.Object
class D : object { } // Uses System.Object
}
当然,如果您有一个真正邪恶的开发人员,您仍然可能会引起混淆object
namespace System {
class Object {
private Object() { }
}
}
namespace Example3 {
// This will properly fail to compile since it can't bind to the private
// Object constructor. This demonstrates that we are using our definition
// of Object instead of mscorlib's
class C : object { } // Uses our System.Object
}
是的,如果定义为 ,一切最终都继承自一个对象class
。将显式继承排除在代码之外。
是的,从类中的对象继承是多余的
MSDN:对象类:支持 .NET Framework 类层次结构中的所有类,并为派生类提供低级服务。这是 .NET Framework 中所有类的终极基类;它是类型层次结构的根。
检查这项研究:从对象继承?调查如何。
Object 是 .Net 中所有类的母体。上面没有任何东西。
所有类都继承自它。所以这段代码
class TestClassDos
{
// Stuff
}
自动意味着它是从对象继承的。
证明:您可以将任何实体类型转换为对象,如果它继承自它是可能的。
对象类摘要说
// Supports all classes in the .NET Framework class hierarchy and provides low-level
// services to derived classes. This is the ultimate base class of all classes
// in the .NET Framework; it is the root of the type hierarchy.
是的,它们都是一回事,我想我没有看到任何人提到结构,但是所有对象(即无论您声明一个类还是结构)它们最终都继承自Object,请参阅此Object MSDN 文章和此关于结构的其他文章
有时继承自是有意义的——当你有一个定义,并且你想锁定继承并防止其他部分声明扩展不同的类时。尝试从分部类中的另一种类型继承将给您CS0263 Compiler Error。object
partial class
这仅在您的部分类尚未从其他类型继承的情况下才有意义。
该partial
关键字不在您的代码示例中,但我认为它可能值得一提,因为在看到 API 中的类似设置后,我从 Google 找到了我的方式。除了像其他人指出object
的那样从不指向官方的 s 继承之外,这样做没有任何好处,因为所有类都隐式地继承自。System.Object
object