从非泛型基类继承的泛型子类的实例化对象

本文关键字:泛型 子类 实例化 对象 继承 基类 | 更新日期: 2023-09-27 18:30:39

我有一个这样的基类:

public class Base{
    private string name = string.Empty();
    public Base(string name){
        this.name = name;
    }
    public string Name{get;set;}
}

我有一个继承自 Base 类的泛型类,并且还包含一个返回泛型类型的对象的方法,T如下所示:

public SubClass<T>:Base{
    public SubClass(string name):base(name){}
    public T method(string parameter){
        //do some stuff here and return T
        return T;
    }
}

我实例化了SubClass的对象:

object instance = new SubClass<object>("name");

并且我不在构造函数中使用泛型类型。 SubClass构造函数中的参数是预定义的类型(例如字符串、int 等)。此实现工作正常,但我想知道这是否正确?有没有其他更合适的方法可以做到这一点。感谢

编辑

上下文:Base 类是处理与 CouchDB 连接的类。所以我提供了必要的信息(用户名、通行证、主机、端口和数据库名称),SubClass是 CouchDB 的简单客户端。因此,当我创建SubClass的对象时,我想提供 CouchDB 的凭据,并且我还希望提供我期望从数据库中获得的模型(例如帐户模型、产品模型)。

从非泛型基类继承的泛型子类的实例化对象

看着你的代码,我有点困惑。为什么要将SubClass实例存储在对象中?这样,您将无法调用类的任何成员(除了从System.Object继承的成员之外的其他成员)。

我还想提供模型(例如帐户模型、产品模型) 我期望从数据库中得到的

我假设这些不同类型的模型实现了一个通用接口,因此结构如下所示:

public interface IModel
{
    Foo GetFoo();
}
public class AccountModel : IModel
{
    public Foo GetFoo()
    {
        // whatever
    }
}
public class ProductModel : IModel
{
    public Foo GetFoo()
    {
        // whatever
    }
}

由于我们知道 SubClass 的类型参数是一个IModel,因此最好在 T 上放置一个类型约束:

public class SubClass<T> : Base where T : IModel
{
    public SubClass(string name) : base(name){}
    public T Method(string parameter)
    {
        //do some stuff here and return T
        return T;
    }
}

我会像这样使用它:

SubClass<ProductModel> pm = new SubClass<ProductModel>("blurg");
IModel model = pm.Method();
Foo foo = model.GetFoo();