C# 访问修饰符可以放在接口中的方法声明上吗?

C# 访问修饰符可以放在接口中的方法声明上吗?,c#,C#,如果是,那为什么呢?不,它们总是公开的。不,它们不能。接口中定义的所有函数都必须是公共的(或者在接口中定义它们有什么意义?) 发件人: 接口成员总是公共的,因为接口的目的是使其他类型能够访问类或结构。不能将访问修饰符应用于接口成员 否,访问修饰符是为方法的实现定义的。接口定义了实现所需的公共(或可消费)契约,因此这些实现的方法必须是公共的(除非明确声明)。根据定义,接口方法始终是公共的。为了回答“为什么”,认为接口是两个或多个系统之间使用同一接口(在同一应用程序内部或应用程序、系统或网络之间)的

如果是,那为什么呢?

不,它们总是公开的。

不,它们不能。接口中定义的所有函数都必须是公共的(或者在接口中定义它们有什么意义?)

发件人:

接口成员总是公共的,因为接口的目的是使其他类型能够访问类或结构。不能将访问修饰符应用于接口成员


否,访问修饰符是为方法的实现定义的。接口定义了实现所需的公共(或可消费)契约,因此这些实现的方法必须是公共的(除非明确声明)。

根据定义,接口方法始终是公共的。为了回答“为什么”,认为接口是两个或多个系统之间使用同一接口(在同一应用程序内部或应用程序、系统或网络之间)的某种契约。p> 为了能够共享,意味着这些方法必须是公共的,否则其他类永远无法访问它们

但是,请注意,作为一个整体,接口可以是
私有的
受保护的
内部的
受保护的内部的
公共的
。其中private表示它仅在其当前范围内可用(例如,在包含类内)。以下各项有效:

class SomeClass
{
    // inside a class, an interface can have access modifiers
    private interface IPrivateTest
    { 
        void TestMe();    // always public, cannot even use "public" keyword
    }    
}

那么“为什么”呢?;-)很抱歉,如果答案为“是”,则会附加“为什么”。在某些情况下,程序集Foo可以声明具有“内部”成员的接口,以便程序集Foo可以创建实现该接口的类实例,将它们传递给外部代码,并从外部代码接收它们,没有外部代码能够替换Foo未提供的任何类型。Foo可以定义一个接口,该接口继承自公共接口,让外部世界使用公共接口,并将从外部世界接收的内容转换为私有接口,但这将只提供接口类型的运行时验证,而不是编译时验证。net中可能不存在允许在接口上施加此类限制的机制,但这并不意味着它们没有用处。