上記のように、C# で Object から継承するのは冗長ですか? 以下の両方のコード セットで、同等のオブジェクトが定義されますか?
class TestClassUno : Object
{
// Stuff
}
対。
class TestClassDos
{
// Stuff
}
私は MSDN を調べましたが、完全に決定的なものを見つけることができませんでした。
指定されていない場合、すべてのclass
定義は暗黙的に継承されるSystem.Object
ため、2 つの定義は同等です。
これら 2 つの値が異なるのは、誰かが実際に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クラス階層内のすべてのクラスをサポートし、派生クラスに低レベルのサービスを提供します。これは、.NETFrameworkのすべてのクラスの究極の基本クラスです。これは、型階層のルートです。
この調査を確認してください:オブジェクトから継承しますか?方法の調査。
はい、クラスのオブジェクトから継承するのは冗長です
オブジェクトは、.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から継承します。このObjectMSDNの記事とこれを参照してください。 Structsに関する他の記事