我有一个通用代理类包含T类型对象,它也是一个类。我想创建一个T的对象。
class Proxy<T>: IClient
{
T _classObj;
public Proxy()
{
this._classObj = //create new instance of type T
}
}
答案 0 :(得分:3)
您可以使用该类型的默认值(参考类型为null
,或者为值类型使用其中一个:Default Values Table)
_classObj = default(T);
或者应用new()
generic constraint,强制类型T
拥有默认的无参数构造函数
class Proxy<T>: IClient where T: new()
{
T _classObj;
public Proxy() {
_classObj = new T();
}
}
答案 1 :(得分:0)
如果T
是一个类,并且它保证它有一个new()
运算符:
class Proxy<T> : IClient where T : class, new() {
T _classObj;
public Proxy() {
this._classObj = new T();
}
}
否则,或者如果T
是struct
,那么您可以这样做:
class Proxy<T>: IClient where T : struct {
T _classObj;
public Proxy() {
this._classObj = default(T); // which will be null for reference-types e.g. classes
}
}
<强>更新强>
对于T
上的方法,有一些不同的情况。但是,根据问题和评论,我认为T
是class
,并且它有一个new()
运算符。此外,它实现了IGetDataImplementer
,其中有一个名为GetData
的方法。所以我们可以:
interface IGetDataImplementer{
object GetData();
}
class Proxy<T> : IClient where T : class, IGetDataImplementer, new() {
T _classObj;
public Proxy() {
this._classObj = new T();
var data = this._classObj.GetData();
}
}