2013-04-23 14 views
9

Yansımalar aracılığıyla sorgulanırken kendisini pozitif IsValueType ve pozitif IsClass olarak işaretleyen bir C# sınıfı tasarlamak mümkün müdür? Ya da aslında birbirini dışlayan özel işaretler midir?Yansımalar aracılığıyla sorgulama yaparken kendini pozitif IsValueType ve pozitif IsClass olarak işaretleyebilecek bir C# sınıfı tasarlamak mümkün mü?

Ben

En ilkel türleri (& yapılar enums dahil) dönecektir, biliyoruz:
IsValueType = true, IsClass = false.
IsValueType = false, IsClass = true: -

Dize ya da ders dönüş .. çok soyutlar.

Arayüzler verir:
IsValueType = false, IsClass = false

+1

Kullanım durumunuz aslında nedir en IsClass ve IsValueType olacak türünü oluşturamaz, hiçbirnedir? – ken2k

+0

Sadece bir çeşit düz dosyaya kaydetmek için bazı basit kalıcılık yöneticileri yapıyorum ve en geniş çeşitliliğe sahip olmasını istiyorum. ama her zaman merak ettim :) –

+1

Sadece aşağıdaki gereksinimleri yerine getirin: ValueType: 'this.IsSubclassOf (RuntimeType.ValueType);, Sınıf:' (((this.GetAttributeFlagsImpl() & TypeAttributes.Interface) == TypeAttributes.AutoLayout) &&! this.IsValueType); ' – sll

cevap

7

mümkün yansımaları aracılığıyla sorgularken olumlu IsValueType ve pozitif IsClass olarak kendini işaretler bir C# sınıfı tasarlamak için mi ?

Şimdi bu uygulamalara bir göz atalım: (!) (IsValueType özelliğiyle denir) miras bağlıdır VE IsClassIsValueType bağlıdır

protected virtual bool IsValueTypeImpl() 
{ 
     return this.IsSubclassOf((Type) RuntimeType.ValueType); 
} 

public bool IsClass 
{ 
    [__DynamicallyInvokable] get 
    { 
    if ((this.GetAttributeFlagsImpl() & TypeAttributes.ClassSemanticsMask) == TypeAttributes.NotPublic) 
     return !this.IsValueType; 
    else 
     return false; 
    } 
} 

Gördüğünüz gibi, IsValueTypeImpl() .

Sonraki, this description of ValueType, 'un ValueType'dan miras almanın mümkün olmadığını belirtir.

Yani, cevap aynı anda

+1

İlk yöntemin sanal olarak işaretlenmiş olması, bu yöntemin farklı uygulamalarının olabileceğini ima ediyor. –

+0

@BuhBuh ama ikinci yöntem, asla gerçekleşmeyeceğinden emin olmak için sanal değildir .. –

+0

@BuhBuh değiştirebilir mi? elbette, her şeyden önce, dahili çerçeve kodudur, değişebilir, ama gerçekten kamu davranışlarının değişebileceğinden şüpheliyim, birçok üçüncü taraf kodu buna bağlı olabilir. –

İlgili konular