gpt4 book ai didi

c# - 为什么 C# 类可以隐式和显式地从一个接口(interface)继承?

转载 作者:可可西里 更新时间:2023-11-01 03:05:57 26 4
gpt4 key购买 nike

今天偶然发现一个C#类可以隐式和显式继承一个接口(interface)。这让我很吃惊。如果 C# 以这种方式工作,那么当以不同方式引用时,一个实例可能会有不同的行为。

interface IFoo
{
void DoSomething();
}

class Foo : IFoo
{
#region IFoo Members
public void DoSomething()
{
Console.WriteLine("do something implicitly");
}
#endregion

#region IFoo Members
void IFoo.DoSomething()
{
Console.WriteLine("do something explicitly");
}
#endregion
}


Foo f = new Foo();
f.DoSomething();

((IFoo)f).DoSomething();

以上代码运行并输出

do something implicitly
do something explicitly

我认为 C# 的这种设计会导致行为不一致。也许一个 C# 类可以以隐式或显式方式从一个接口(interface)继承是强制性的,但不能同时从两者继承。

为什么 C# 是这样设计的?

最佳答案

每个实现接口(interface)的类在该类的成员和接口(interface)的成员之间都有一个映射。如果类显式实现接口(interface)成员,则显式实现将始终映射到接口(interface)。如果没有显式实现,则需要隐式实现,并且该实现将映射到接口(interface)。

当一个类具有与接口(interface)相同的成员名称和关联类型时它还显式实现了该接口(interface)的相应成员,则该类的“隐式”实现不是 完全 考虑了接口(interface)的实现(除非显式实现调用它)。

除了在类实现具有相同成员名称/类型的多个接口(interface)的每种情况下的不同含义之外,即使只有一个接口(interface),类本身也被认为具有隐式接口(interface),这可能具有与唯一接口(interface)相同的成员/类型,但仍然意味着不同的东西。

关于c# - 为什么 C# 类可以隐式和显式地从一个接口(interface)继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/253058/

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