如何定义类型为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; }
}
这很好-你只需要使它通用:
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>();