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

本文关键字:属性 类型 何定义 定义 | 更新日期: 2023-09-27 17:54:10

我怎么能有一个属性,可以接受任何类型的对象(类)…像这样的?

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; }
}

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

这很好-你只需要使它通用:

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>();