如何启动Generic类的T类型对象

时间:2014-03-06 11:28:30

标签: c# generics

我有一个通用代理类包含T类型对象,它也是一个类。我想创建一个T的对象。

class Proxy<T>: IClient
{
    T _classObj;

    public Proxy() 
    {
        this._classObj = //create new instance of type T     
    }
}

2 个答案:

答案 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();
    }
}

否则,或者如果Tstruct,那么您可以这样做:

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上的方法,有一些不同的情况。但是,根据问题和评论,我认为Tclass,并且它有一个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();
    }
}