我有一个采用单个通用参数的基类。然后,我有几个从该基类继承的类。有没有简单的方法可以让子类从基类继承工厂?



class BaseClass<T>
{
     T Value {get; set;}
     string Name {get; set;}

     public static BaseClass<T> Factory(T Value)
     {
        return new BaseClass<T>(Value);
     }
}

class ChildClass : BaseClass<int>
{
     public void Test()
     {
         // I want this below to work
         // but Factory() returns a BaseClass
         ChildClass bs = ChildClass.Factory(10);
     }
}


我已经在代码中指出了我想要的工作。我可以想出一种克服此问题的方法,可以在BaseClass或SubClass中添加一个从BaseClass转换为ChildClass的隐式运算符。

我还可以将Factory显式地添加到ChildClass中,但是这样就无法继承。

有没有更好,更标准化的方式来做到这一点?

最佳答案

我会做这样的事情:

class BaseClass<T, K> where K : BaseClass<T, K>, new()
{
    T Value { get; set; }
    string Name { get; set; }

    public static K Factory(T value)
    {
        return new K { Value = value };
    }
}

class ChildClass : BaseClass<int, ChildClass>
{
    public void Test()
    {
        ChildClass cs = Factory(10);
    }
}

08-26 18:26
查看更多