为什么我可以将继承另一个接口的接口中的方法标记为私有?

问题描述 投票:0回答:1

Afaik,在 C# 中,任何从接口实现的方法都必须是公共的。

interface A { void DoA(); }
class B : A { public void DoA() {} }

但是如果你继承了一个继承自另一个接口的接口,那么你可以将基接口方法标记为private。

interface A1 { void DoA1(); }
interface A2 : A1 { void DoA2(); }
class B : A2
{
    public void DoA2() { } // Still need to be marked as public
    void A1.DoA1() { } // Can be marked as private
    // or I can do this: public void DoA1() { }
}

当我看到一个班级

class MyClass : IEnumerable<SomeType>
正是这样做时,我首先注意到了这一点。

public IEnumerator<MyType> GetEnumerator() { ... }
private IEnumerator IEnumerable.GetEnumerator() { ... }

为什么允许这样做?为什么我可以将

B
的实例传递给采用
A1
的方法,即使
DoA1
是私有的?我找不到任何关于此的文档。

c# inheritance interface private
1个回答
0
投票

void A1.DoA1() { }
没有将方法标记为私有,它是一个 显式接口实现

显式接口实现没有访问修饰符,因为它不能作为定义它的类型的成员访问。相反,它只能在通过接口实例调用时访问。如果为显式接口实现指定访问修饰符,则会出现编译器错误 CS0106。

© www.soinside.com 2019 - 2024. All rights reserved.