我怎样才能拥有一个可以接受任何类型(类)对象的属性......这样的东西?
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; }
}
答案 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>();