any reason why an interface reference would be included before a method name on an implementing class?
本问题已经有最佳答案,请猛点这里访问。
在实现类的方法名之前包含接口引用有什么原因吗?例如,假设您有一个reportService:IReportService和一个getReport(int reportID)方法。我查看了一些代码,另一个开发人员在ReportService中实现了如下方法:
1 2 3 4 | Report IReportService.GetReport(int reportId) { //implementation } |
我以前从未见过这样的服务实现。它有什么作用吗?
这被称为"显式接口实现"。例如,这样做的原因可能是命名冲突。
考虑接口
1 | IEnumerator GetEnumerator(); |
另一个是普通的:
1 | IEnumerator<T> GetEnumerator(); |
在C中,不允许有两个同名的方法,但它们的返回类型不同。因此,如果实现这两个接口,则需要显式声明一个方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class MyEnumerable<T> : IEnumerable, IEnumerable<T> { public IEnumerator<T> GetEnumerator() { ... // return an enumerator } // Note: no access modifiers allowed for explicit declaration IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); // call the generic method } } |
不能对实例变量调用显式实现的接口方法:
1 2 | MyEnumerable<int> test = new MyEnumerable<int>(); var enumerator = test.GetEnumerator(); // will always call the generic method. |
如果要调用非泛型方法,则需要将
1 | ((IEnumerable)test).GetEnumerator(); // calls the non-generic method |
这似乎也是不允许在显式实现中使用访问修饰符(如