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

时间:2016-01-17 11:49:22

标签: c# oop generics inheritance

我有一个像这样的基类:

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构造函数中的参数是预定义类型(例如string,int等)。这个实现工作正常,但我想知道这是否正确?是否有另一种更合适的方法来做到这一点。感谢名单

修改

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

1 个答案:

答案 0 :(得分:0)

我有点困惑地看着你的代码。为什么要将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();

我会像这样使用它:

pandas