2016-04-07 27 views
0

Benim Temel Sınıf olduğunuçağırır Temel Sınıf Yöntemi Jenerik içinde Yöntem C#

public abstract class BaseContext { 
    public void SaveChanges() { 
     context.SaveChanges(); 
    } 
} 

Ve drived sınıf I gibi Taban sınıf SaveChanges yöntemi çağırmak için genel yöntemler içeren başka bir sınıf yaşıyorum

public class DriveClass : BaseContext {  
} 

olduğunu

public class AnyClass { 
    MyMethod<DriveClass>(repo); 

    private void MyMethod<T>(T repo) { 
     MethodInfo savech = typeof(T).GetMethod("SaveChanges", new Type[] {}); 
     savech.Invoke(repo, null); 
    } 
} 

Ben

çalışıyorum

GetMethod ("SaveChanges", yeni Type [] {})

Ben boş alıyorum

, BaseContext sınıfında yöntemlerinin çağrılması anlamına gelir .

Özet BaseContext Sınıfından yöntemin nasıl çağırılacağı konusunda herhangi bir öneride bulunun.

+0

? Sonra yansımayı önleyebilirsiniz. – Lee

+0

Merhaba vc, önerilerinizi denedi, işe yaramıyor ... hata veriyor ... lütfen biraz daha detaylandırın ... Teşekkür ederim –

cevap

1

Açıklamalarda belirtildiği gibi, MyMethod<T>'unuzdaki T bir BaseContext türüyle sınırlı olmadığından, doğrudan SaveChanges yöntemini çağıramazsınız.

Genel bir yöntemde başka bir yöntemi çağırmak için yansıma kullanmanız gerekiyorsa, jenerik doğru bir şekilde kullanmıyorsunuz demektir. Yansıtma olmadan jenerik kullanın ya da jenerik olmadan yansıma kullanın.

Bu çözüm olabilir: `a BaseContext` parametresi ile genel olmayan MyMethod` değildir Neden

public class AnyClass { 
    private void MyMethod<T>(T repo) where T : BaseContext { 
     repo.SaveChanges(); 
    } 
+0

Merhaba Maarten, Mevcut çözüm bu şekilde yazıldığından, minimum değişiklik yapmaya çalışıyorum Çözüm ve her ikisini de elde edin. Lütfen hem Jenerik hem de Yansıma'yı kullanabileceğim bir çözüm öner. –

+0

Önerinizi ekledim ve hata alıyorum: 'MyInterface' den 'BaseContext' seçeneğine örtük bir referans dönüşümü yoktur –

+0

Sorunuzda herhangi bir MyInterface'den bahsetmediniz. Bunun yanı sıra: asıl sorunun nedir? Jenerikleri ve/veya yansımayı yok sayın, bu bir çözümdür, ancak önce probleminizi bilmemiz gerekir. – Maarten

İlgili konular