【发布时间】:2011-12-07 13:44:14
【问题描述】:
我有一个带有一些通用方法的接口,我想实现一个带有重载的方法,以接受一个类的实例,或者它的 PK 值(它可以是一个 int 或 GUID,但会有所不同)。
我添加了类似于这些示例的方法:
void DoSomething<TKey>(TKey key) where TKey: struct;
void DoSomething<TModel>(TModel model) where TModel : class;
其中第二个的“DoSomething”方法名称被突出显示,错误是
类型“ISomeStuff”已经定义了一个名为“DoSomething”的成员 相同的参数类型。
我对此感到惊讶,因为我已经通过参数明确定义为不同类型:一个是类,另一个是结构。
为什么这不足以使签名不同?
【问题讨论】:
-
Generic constraints, where T : struct and where T : class 的可能重复项。另请参阅 Eric Lippert 的文章 here。
-
@Frederic:我怎么会错过那个!!!
-
显然侧边栏中的“相关”窗格也没有选择它,所以它可能比平时更棘手;)
-
嗯,没错 - 我确实扫描了建议列表。
标签: c# generics overloading