繁体   English   中英

从抽象类调用的通用帮助程序类

[英]Generic helper class called from an abstract class

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

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

和助手类代码

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;
        }
    }
}

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

只是一个建议,您还可以将助手定义为扩展方法,将泛型类型参数移至该方法,将类型参数限制为Base ,然后可以从派生类型调用它,就像它是在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完全。

您的抽象基类无法“知道”任何派生类的类型。

将对辅助方法的调用委托给派生的类,例如,通过在基类中定义抽象的虚方法:

protected abstract void Save(…);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM