我见过一些例子,他们改变了一个叫做的话
void Add(IDrawing item);
Run Code Online (Sandbox Code Playgroud)
成
void Add<TDrawing>(TDrawing item) where TDrawing : IDrawing;
Run Code Online (Sandbox Code Playgroud)
除了在调用函数时欺骗intellisense显示类的名称而不是接口名称,由于C#4中的推断类型用法,使用第二种方法还有其他优势吗?
要回答Jon Skeet,程序员使用的代码是:
public ObservableCollection<IDrawing> Items { get; private set; }
public void Add<TDrawing>(TDrawing item) where TDrawing : IDrawing
{
this.Items.Add(item);
}
Run Code Online (Sandbox Code Playgroud)
我没有看到使用泛型而不是仅仅使用该IDrawing类型的参数的任何优势.我认为必须有一些非常合适的案例.我很想知道我是否遗漏了什么.
这实际上取决于实施中其他地方的情况.这是一个不同的例子:
void Add<TDrawing>(TDrawing item, IList<TDrawing> list)
where TDrawing : IDrawing
{
if (item.SomePropertyOfIDrawing)
{
list.Add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,你不会想采取IList<IDrawing>在这里-因为你不能使用它,如果你有一个List<Painting>例如...,而上面的通用版本,这是绝对的罚款TDrawing是Painting:约束确保财产可供的if条件,而事实上,它是通用的可以让你的项目安全添加到列表中.
如果你有完整的例子,你认为没有好处,那么值得特别提出.
编辑:不,在现在给出的确切示例中,将其作为通用方法没有任何优势.
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |