C#:通用继承工厂

Mik*_*ike 3 c# inheritance

我有一个基类,它接受一个通用参数.然后我有几个继承自这个基类的类.子类是否有一种简单的方法来固定基类中的工厂?

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);
     }
}
Run Code Online (Sandbox Code Playgroud)

我在代码中注意到了我想要的工作.我可以想出一种方法来解决这个问题,方法是将一个隐式运算符添加到从BaseClass转换为ChildClass的BaseClass或SubClass.

我也可以明确地将Factory添加到ChildClass,但这会破坏继承点.

这样做有更好,更标准化的方法吗?

bni*_*dyc 8

我会做这样的事情:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)