在通用方法C#中调用基类方法

时间:2016-04-07 11:55:59

标签: c# generics

我的基类是

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

我的Drived课程是

public class DriveClass : BaseContext {    
}

我有另一个类,它包含调用基类SaveChanges方法的泛型方法,如

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

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

当我尝试时

  

GetMethod(“SaveChanges”,new type [] {})

我得到null,这意味着无法调用BaseContext类中的方法。

请提出任何建议,如何从Abstract BaseContext Class调用方法。

1 个答案:

答案 0 :(得分:1)

如评论中所述,因为MyMethod<T>中的T不限于BaseContext类型,所以不能直接调用SaveChanges方法。

如果您需要使用反射来调用泛型方法中的其他方法,那么您没有正确使用泛型。要么使用没有反射的泛型,要么使用没有泛型的反射。

这可能是一个解决方案:

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