gpt4 book ai didi

C# 接口(interface)。隐式实现与显式实现

转载 作者:IT王子 更新时间:2023-10-29 03:27:13 27 4
gpt4 key购买 nike

在 C# 中隐式显式实现接口(interface)有什么区别?

什么时候应该使用隐式,什么时候应该使用显式?

这两者有什么优点和/或缺点吗?


Microsoft 的官方指南(来自第一版 Framework Design Guidelines)声明不推荐使用显式实现,因为它会给代码带来意想不到的行为。

我认为这条准则在 IoC 之前的时代非常有效,那时你不把东西作为接口(interface)传递。

谁也能谈谈这方面?

最佳答案

隐式 是指您通过类中的成员定义接口(interface)。 显式 是指您在接口(interface)上的类中定义方法。我知道这听起来令人困惑,但我的意思是:IList.CopyTo 将隐式实现为:

public void CopyTo(Array array, int index)
{
throw new NotImplementedException();
}

并明确为:

void ICollection.CopyTo(Array array, int index)
{
throw new NotImplementedException();
}

不同之处在于,隐式实现允许您通过将接口(interface)强制转换为该类和接口(interface)本身而创建的类来访问接口(interface)。显式实现允许您仅通过将接口(interface)转换为接口(interface)本身来访问接口(interface)。

MyClass myClass = new MyClass(); // Declared as concrete class
myclass.CopyTo //invalid with explicit
((IList)myClass).CopyTo //valid with explicit.

我使用 explicit 主要是为了保持实现的简洁,或者当我需要两个实现时。无论如何,我很少使用它。

我确信有更多理由使用/不使用其他人会发布的显式内容。

参见 next post在这个线程中,每个背后都有很好的推理。

关于C# 接口(interface)。隐式实现与显式实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/143405/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com