从抽象 class 调用的通用助手 class

Generic helper class called from an abstract class

我有一些通用的辅助方法。我希望能够从抽象 class 中调用一个,但我没有派生类型传递给通用方法。我怎么得到它?我不想让抽象 class 也成为通用的。这可能吗?!这是一些不起作用的代码... :'(

public abstract class Base
{
    public bool Save()
    {
        try
        {
            Helper<this.GetType()>.Save(this);
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }
}

和助手 class 代码

public class Helper<T> where T: class
{
    public static bool Save(T obj)
    {
        try
        {
            Context.DDBContext.Save<T>(obj);
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }
}

如果您需要更多代码,请询问。

您的抽象基 class 不能 "know" 任何派生类型 class。

将对辅助方法的调用委托给派生的 class(es),例如通过在基础 class:

中定义一个抽象虚方法
protected abstract void Save(…);

然后不直接调用辅助方法,而是调用这个抽象方法。派生的 classes 可以覆盖它,它们 将知道它们自己的类型:

sealed class Derived : Base
{
    protected override void Save(…)
    {
        Helper<Derived>.Save(this);
    }
}

只是一个建议,你也可以将你的助手定义为扩展方法,将泛型类型参数移动到方法中,将类型参数限制为 Base,你可以从派生类型中调用它作为虽然它是在基础中派生的:

public static class Helper
{
    public static bool Save<T>(this T obj) where T: Base
    {
        try
        {
            Context.DBContext.Save<T>(obj);
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }               
}

public class Derived : Base{}

var x = new Derived();
x.Save();

然后你可以完全删除Base.Save