C#接口。隐式实现与显式实现
C#接口。隐式实现与显式实现
在C#中,隐式实现接口和显式实现接口有哪些不同之处?
应该在什么时候使用隐式实现和显式实现?
一种方式与另一种方式相比,有什么优点和/或缺点吗?
微软的官方指南(来自第一版框架设计指南)指出,不建议使用显式实现接口,因为它会给代码带来意外的行为。
我认为,这个指南在一个IoC之前的时间非常有效,当您不把接口作为参数传递时。
是否有人也能谈谈这方面呢?
admin 更改状态以发布 2023年5月23日
implicit 是指通过类成员来定义接口。 explicit 是指在接口上为类定义方法。我知道这听起来有点混乱,但是这就是我的意思: IList.CopyTo
被隐式实现为:
public void CopyTo(Array array, int index) { throw new NotImplementedException(); }
而显式实现为:
void ICollection.CopyTo(Array array, int index) { throw new NotImplementedException(); }
区别在于隐式实现允许您通过将接口转换为类及接口本身的方式访问您创建的类的接口。显式实现仅允许您将接口转换为接口本身来访问接口。
MyClass myClass = new MyClass(); // Declared as concrete class myclass.CopyTo //invalid with explicit ((IList)myClass).CopyTo //valid with explicit.
我主要使用显式实现来保持实现的清晰,或者当我需要两种实现时使用。无论如何,我很少使用它。
我相信还有更多的原因可以使用/不使用显式实现,其他人会在此帖中发帖提出优秀的原因。
请参见此线程中的下一个帖子,其中提供了每个原因的出色论据。