2012-05-24 15 views
31

Yukarıda belirtildiği gibi, C# içinde Object'ten devralmak gereksiz mi? Her iki kod kümesi de eşdeğer nesnelerin tanımlanmasıyla sonuçlanıyor mu?C# nesnesinde Object devralınacak kadar?

class TestClassUno : Object 
{ 
    // Stuff 
} 

vs

class TestClassDos 
{ 
    // Stuff 
} 

MSDN snooped ama mükemmel kesin bir şey bulmak mümkün değildi.

+13

Herhangi sınıf tanımı bu diğer makalesine bakın. Aslında, aslında –

cevap

33

nesnenin devralmak gereksiz olduğunu söylüyor.

Bu ikisinin farklı olacağı tek zaman, bir başkasının aynı ad alanında başka bir Object türü tanımlamasıdır. Bu durumda Object yerel tanım önceliklidir ve değişim Çok miras nesnesi

namespace Example { 
    class Object { } 
    class C : Object { } 
} 

bir köşe durumda ama

Not önce görmeseydim bunu işaret olmaz ki Object yerine object kullandıysanız, aynı doğru değildir. C# anahtar sözcüğü object, System.Object için bir tür takma addır ve dolayısıyla Example.Object ile eşleşmez.

Elbette
namespace Example2 { 
    class Object { } 
    class C : Object { } // Uses Example.Object 
    class D : object { } // Uses System.Object 
} 

Eğer hala 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 
} 
+7

Yerel "Example.Object" hala "System.Object" öğesinden devralmaz mı? – Aren

+1

@Aren yerel 'Nesne' gerçekten olurdu ama' C' bu durumda 'Örnek.Object'den miras alacaktır – JaredPar

+0

Hızlı yanıt için teşekkürler. Bu kesinlikle düşündüğüm bir durum değil - iyi bir çağrı. – Keplah

20

Evet, her şey en sonunda class olarak tanımlanırsa bir nesneden miras alınır. Açık mirasınızı kodunuzdan ayırın.

+1

'struct'. –

+0

@Cicada, Haklısınız. – Aren

+1

@Cicada: 'struct' türevlerini * doğrudan * System.ValueType'dan. Aynı zamanda System.Object türünden de (her şey nihayetinde) elde edilir, ancak yapı türleri OP'ye bile uygulanmaz, çünkü yalnızca arayüzleri uygulayabilirler; Yapı olarak bildirilen bir yapı, hiçbir zaman doğrudan doğruya bir şeyden değil, bir türden türetilebilir. – KeithS

6

Nesne, .Net'deki tüm sınıfların anasıdır. Üstünde hiçbir şey yok.

Tüm sınıflar bundan devralınır. Bu nedenle, bu kod, nesneden miras aldığı anlamına gelir.

Kanıtı: Herhangi bir nesneyi, eğer devralırsa, mümkün olan nesneye önceden yazabilirsiniz. Object sınıfı

Özeti

// 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. 
+0

Ayrıca, .NET'deki arabirimlerde' .ToString() 'de bulacaksınız. Ancak arabirimler 'System.Object''den devralmaz. (Sonucunuza katılıyorum, sadece verdiğiniz kanıtla değil.) – hvd

+0

@hvd: Ama sonuçta arayüzler sınıflar tarafından uygulanacaktır. –

+1

Evet veya "object" öğesinden devralınan yapılar. Ama benim amacım, '.ToString()' ın kullanılabilir olmasının, yalnızca 'nesnenin' üyelerini, 'nesneden' devralmayan bazı türler için bile ekleyen derleyicideki özel bir istisna yüzünden olmasıdır. – hvd

8

Evet sol belirtilmemiş her class tanımı kapalı bir biçimde iki tanım eşdeğerdir dolayısıyla System.Object devralan olacaksa sınıfta

7

MSDN ile karışıklık neden olabilecek gerçekten kötü geliştirici varsa: Object class: .NET Framework sınıf hiyerarşisinde tüm sınıfları destekler ve düşük seviyeli hizmetleri vermektedir türetilmiş sınıflara. Bu, .NET Framework'teki tüm sınıfların temel taban sınıfıdır; Bu tür hiyerarşinin köküdür.

Kontrol Bu araştırma: inherits from object? An investigation into how.

enter image description here

2

Evet, aynı şey hem ben kimsenin söz yapılar gördüğünü sanmıyorum, ama tüm nesneler (bir sınıf bildirmek eğer olursa olduğunu yoksa hepsi sonuçta Nesne devralan bir yapı), bu Object MSDN article ve açıkça `örtük Nesnesi` gelen devralır bir temel sınıf belirtmeyen Structs

İlgili konular