2013-08-09 17 views
6

var. c In #nasıl C# System.Type Tip I bu arabirimleri ve devralma uygulanması ile ilgilidir eminim bir isim özelliği

nasıl System.Type sınıf özellik Adı var? Meta veri veya gördüğüm Nesne Tarayıcısı kullanarak Tipi sınıfının kod tipi sınıfı yok zaman örnek:

string Name 

yerde tanımlanmış.

Ben de o Tip MemberInfo devralır ve uygular bkz _Type ve (bu şekilde) IReflect: Ben, bu bildiğim kadarıyla

public abstract string Name { get; } 

:

public abstract class Type : MemberInfo, _Type, IReflect 

taban sınıfı MemberInfo özelliğine sahiptir için soyut değiştiricinin türetilmiş sınıfta geçersiz zorundadır.

string Name { get; } 

ve bu bir arayüz olduğundan o da kendine ait hiçbir uygulama vardır: Orada bir özelliktir _Type arayüzünde Sonra ... Tip

görmüyorum.

Adı tanımlanmış oluyor ve nasıl System.Type sınıfında bir değeri var mı

? Ya da miras ve uygulama arayüzleri System.Type kendisi soyut bir sınıf olduğunu bu sınıf

cevap

10

Bildirimi için nasıl çalıştığını anlamak değilim. Bu, bir alt sınıfta geçersiz kılınabileceği anlamına gelir. Aslında, böyle bir şey yaparsam çalışma anında tipleri System.Type 'ler aslında olduğunu görebilirsiniz:

typeof(Type).GetType().FullName; // System.RuntimeType 

System.RuntimeType Belgelerdeki görmez bir iç türüdür, ancak Name özelliğinin yerini yapar. Biraz şuna benzer:

namespace System 
{ 
    internal class RuntimeType : Type, ISerializable, ICloneable 
    { 
     ... 
     public override string Name 
     { 
      get { ... } 
     } 
    } 
} 

official documentation bu nota bakın:

Tip birden çok uygulamaları sağlayan bir soyut temel sınıftır. Sistem her zaman türetilmiş RuntimeType sınıfı sağlar. Yansımada, Runtime kelimesi ile başlayan tüm sınıflar, sistemdeki her nesne için yalnızca bir kez oluşturulur ve karşılaştırma karşılaştırma işlemlerini destekler. MemberInfo den

1

arka özelliği Name gerçekten System.Type tarafından devralınır.

Arabirimi System.Type niçin uygulayabildiğinin nedeni, bir üye örneğinin, Name'un üyesi olduğu bir üye olduğu sürece, bir arabirimin uygulanmasına izin vermesidir. Arabirimleri uygulayan üyeler, temel sınıflardan miras alınabilir.

System.Type değilName özelliğinin yerini izin nedeni, System.Type kendisi soyut bir sınıf olmasıdır. Bu yüzden soyut üyeyi hiçbir uygulama yapılmadan "bırakabilir". Bundan türeyen soyut olmayan türler hala bu özellik için bir uygulama vermelidir (get accessor). Eğer bir değişken Type t = ...; var ve üzerinde t.Name her aradığında

, çalışma zamanı tip t ait olmayan bazı soyut sınıf olmak zorunda kalacak ve bu sınıf Name bir uygulamasını olacaktır.