从非泛型基类继承的泛型子类的实例化对象
本文关键字:泛型 子类 实例化 对象 继承 基类 | 更新日期: 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();