如何定义类型为T的类属性

时间:2011-05-02 20:34:08

标签: c#

我怎样才能拥有一个可以接受任何类型(类)对象的属性......这样的东西?

public class HttpConnectorRequest
{
    public int Id { get; set; }
    public T RequestObject { get; set; } where T: class
    public string ResponseData { get; set; }
    public Exception Exception { get; set; }
}

我正试图为这样的事情找到一个替代方案:

public class HttpConnectorRequest
{
    public int Id { get; set; }
    public ClassA ClassARequestObject { get; set; }
    public ClassB ClassBRequestObject { get; set; }
    public ClassC ClassCRequestObject { get; set; }
    public string ResponseData { get; set; }
    public Exception Exception { get; set; }
}

1 个答案:

答案 0 :(得分:25)

没关系 - 你只需要把它变成通用的:

public class HttpConnectorRequest<T> where T: class
{
    public int Id { get; set; }
    public T RequestObject { get; set; }
    public string ResponseData { get; set; }
    public Exception Exception { get; set; }
}

然后你会写一些类似的东西:

var request = new HttpConnectorRequest<string>();
request.RequestObject = "Hello!";

泛型是一个很大的话题 - MSDN可能是一个合理的起点,虽然我怀疑你想在某个教程或书中读到它。 (虽然我自己的书,深度的C#,显然涵盖了泛型,其他很多人也这样做了。)

请注意,这会使整个类型成为通用的。如果你只想制作一个属性泛型,那么你运气不好......虽然你可以制作一个方法泛型:

public class HttpConnectorRequest
{
    // Other members elided

    public void SetRequestObject<T>(T value) where T : class
    {
        ...
    }

    public T GetRequestObject<T>() where T : class
    {
        ...
    }
}

这将取决于你做什么 - 请记住,有人可以写:

var request = new HttpConnectorRequest();
request.SetRequestObject<string>("Hello");
var button = request.GetRequestObject<Button>();