考虑一下这个泛型类:
public class Request<TOperation>
where TOperation : IOperation
{
private TOperation _operation { get; set; }
public string Method { get { return _operation.Method; } }
public Request(TOperation operation)
{
_operation = operation;
}
}与下面的非通用版本相比,上面的通用版本提供了什么真正的好处?
public class Request
{
private IOperation _operation { get; set; }
public string Method { get { return _operation.Method; } }
public Request(IOperation operation)
{
_operation = operation;
}
}IOperation接口为:
public interface IOperation
{
string Method { get; }
}发布于 2013-02-12 23:00:09
使用泛型版本,方法可以接受Request<FooOperation>类型的参数。传入Request<BarOperation>实例将是无效的。
因此,泛型版本使方法能够确保它们获得正确操作的请求。
发布于 2013-02-12 23:25:54
除了所有其他好的答案之外,我还要补充说,如果您碰巧使用实现IOperation的值类型的T构造Request<T>,那么泛型版本不会受到装箱惩罚。每次都会显示非通用版本框。
发布于 2013-02-12 23:09:49
在上面给出的情况下,很难说你得到了什么好处,这将取决于如何在你的代码库中使用它,但请考虑以下几点:
public class Foo<T>
where T : IComparable
{
private T _inner { get; set; }
public Foo(T original)
{
_inner = original;
}
public bool IsGreaterThan<T>(T comp)
{
return _inner.CompareTo(comp) > 0;
}
}反对
public class Foo
{
private IComparable _inner { get; set; }
public Foo(IComparable original)
{
_inner = original;
}
public bool IsGreaterThan(IComparable comp)
{
return _inner.CompareTo(comp) > 0;
}
}如果您有一个Foo<int>,您可能不想将其与Foo<string>进行比较,但无法使用非泛型版本锁定它。
https://stackoverflow.com/questions/14835342
复制相似问题