gpt4 book ai didi

C# 内部接口(interface)与内部实现

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

我突然想到了一些我并不真正理解的东西。

我有一个项目,其中有一个内部接口(interface)。实现该接口(interface)的类也是内部的。在接口(interface)的实现中,我将我实现的所有成员都设为内部成员。我没有做明确的实现。

我有两个接口(interface)和两个实现这些接口(interface)的类,它们工作正常。

它看起来像这样:

internal interface IA
{
void X();
}

然后

internal class CA : IA
{
internal void X()
{
...
}
}

这适用于上述两个类。但是当我尝试用另一个接口(interface)和类来做时,它不起作用。事实上,对于上面的例子,我得到了错误:

“WindowsFormsApplication1.CA”未实现接口(interface)成员“WindowsFormsApplication1.IA.X()”。 “WindowsFormsApplication1.CA.X()”无法实现接口(interface)成员,因为它不是公共(public)的。

我意识到我可以公开方法或进行显式实现(并省略 internal 和 public 修饰符),但我很困惑为什么它与它一起工作的两个类一起工作,但我似乎是无法在其他任何地方复制它。

稍微修改一下代码(因为它是 secret 的),这是在我的项目中实际工作的代码之一。

internal interface IScanner
{
void SetHardware(Hardware hardware);
void Start();
void PauseScan();
void ResumeScan();
void Stop();
bool InScan { get; }
event ScanCompleteHandler ScanComplete;
}

然后我上课了:

internal class MyScanner : IScanner
{
internal void SetHardware(Hardware hardware)
{
...
}

internal void Start()
{
...
}

internal void Stop()
{
...
}

internal void PauseScan()
{
...
}

internal void ResumeScan()
{
...
}

internal bool InScan
{
get
{
...
}
}

internal event ScanCompleteHandler ScanComplete;
}

为了让事情变得更奇怪,我创建了另一个名为 Temp 的内部类。然后我让它实现了 IScanner 接口(interface),我将实现从 MyScanner 复制并粘贴到它,它不会编译,给我一个错误:“无法实现接口(interface)成员,因为它不是公共(public)的。”

谁能解释这种不一致?

谢谢

(已更新以修复拼写错误并澄清一些文本)

编辑:附加信息

我通过反射器运行代码,我的实现已被编译为显式实现,即使它们不是显式的。 Reflector 没有显示内部关键字的迹象。我只能猜测这是编译器中的某种故障,出于某种原因,允许我将它们设为内部和隐式,并且它以某种方式将其解决为显式实现。

我已经多次查看代码。我找不到任何其他解释。

最佳答案

如果您正在隐式实现一个接口(interface),我认为该成员必须声明为公共(public)的。在您的示例中,CA 尝试隐式实现 X() 方法但未声明为公开。如果您想将 X() 保留为内部,那么您应该使用显式接口(interface)实现。

void IA.X() { /* stuff */ }

但是,我还要补充一点,将 X() 方法设为 public 无论如何都不会造成任何伤害,因为该类是内部类,因此该成员已经受到该访问修饰符的限制...也就是说,它实际上已经是内部的...因此您不妨将其公开!

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

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