2011-09-21 11 views
6

Kodumdaki bazı nesnelerin ve sınıfların durumu hakkında bilgi kaydetmeye çalışıyorum. Tüm sınıflar ya da kütüphaneler Serileştirme ile uygulanmamıştır. Bu yüzden, bir XML belgesini yazmak için Properties üzerinde Reflection kullanıyorum. Ancak, yerleşik sınıflar (Strings, DateTime, Numbers vs ...) gibi bazı nesnelerin, sınıfın değerini anlamlı bir şekilde basan bir ToString fonksiyonuna sahip olması konusunda bir meydan okuma var. Fakat diğer sınıflar için, ToString'i çağırmak sadece nesne tipinin adını çıkarmak için miras alınan taban ToString'i kullanır (Örneğin, bir Sözlük). Bu durumda, o sınıf içindeki özelliklere tekrar tekrar incelemek istiyorum.Bir nesnenin ToString'i açıkça uygulayıp uygulamadığını anlamak için bir yol var mı? #

Birisi bana, ya da bir yöntem üzerinde çalıştığım bir ToString olup olmadığını anlamak için yansıma ile bana yardımcı olabilir temel yöntem değil VE alma almak için GetValue kullanarak doğru yolu işaret etmek için değil özellikleri takdir ediyorum.

J

cevap

10

bir yöntem şöyle varsayılan .ToString() çek MethodInfo.DeclaringType geçersiz olup olmadığını belirlemek için:

void Main() 
{ 
    Console.WriteLine(typeof(MyClass).GetMethod("ToString").DeclaringType != typeof(object)); 
    Console.WriteLine(typeof(MyOtherClass).GetMethod("ToString").DeclaringType != typeof(object)); 
} 

class MyClass 
{ 
    public override string ToString() { return ""; } 
} 

class MyOtherClass { 
} 

Baskılar dışarı:

True 
False 
+0

BindingFlags.DeclaredOnly doğrudan test sağlar kullanma. –

+2

Ancak, nesne dışındaki bir temel sınıftan devralınan bir geçersiz kılma olabilir. – phoog

+0

Sağ. Ve Hans Passant'ın sadece nesnenin çalışma zamanı tipi tarafından bildirilen geçersiz kılmalara bakma önerisi bu nedenle kısa düşüyor. – phoog

İlgili konular