有没有你不能定义一个方法或接口访问修饰符理由吗?(Is there a reason you can

2019-09-02 21:24发布

方法的可见性的责任被转移到实现该接口的类。

public interface IMyInterface
{
  bool GetMyInfo(string request);
}

在C#中设置访问修饰符公共,私人或方法GetMyInfo(前保护)生成以下错误:修改“私”是不适用于这个项目。

有没有你不能定义一个方法或接口访问修饰符理由吗?

(问题已经问过法语这里 )

Answer 1:

该接口定义了一个对象,并调用它的成员的客户端之间的契约。 私有方法不能被任何其他对象进行访问,因此没有意义,将其添加到接口。 接口的所有成员都被视为公共出于这个原因。



Answer 2:

实际上,你可以使实现类的方法私有的,如果你让一个明确的接口实现:

public interface IMyInterface
{
    bool GetMyInfo(string request);
}

public class MyClass : IMyInterface
{
    public void SomePublicMethod() { }

    bool IMyInterface.GetMyInfo(string request)
    {
        // implementation goes here
    }
}

这种方法意味着GetMyInfo不会的公共接口的一部分MyClass 。 它只能通过铸造访问MyClass实例IMyInterface

MyClass instance = new MyClass();

// this does not compile
bool result = instance.GetMyInfo("some request"); 

// this works well on the other hand
bool result = ((IMyInterface)instance).GetMyInfo("some request");

因此,在界面的背景下,它的所有成员都将被公开。 他们可以从一个实现类的公有接口被隐藏,但总是做一个类型转换的实例,并访问成员,这样的可能性。



Answer 3:

在OO方面 - 封装是所有关于数据隐藏。 这意味着无论在里面一类是最多的类实现去。 这意味着这将是无用的合同执行私有成员。

然而,一个使用接口的原因是因为要确保一类附着于特定的合同,并以一致的方式公开了几个公共成员。



Answer 4:

所有的接口的方法必须具有相同的访问级别 - 这样,来电者可以使用他们。 然而接口也可以是内部的(或嵌套的接口私有的)。

如果你需要不同的访问级别使用不同的接口。



Answer 5:

在将接口私人定义:

  1. 提供任何好处,以界面的用户(这是私人毕竟)
  2. 约束实现类必须实现的方法或属性
  3. 泥泞与实施过程中的细节的界面的概念性
  4. 像带私人方法一个抽象类(这是不允许的)


文章来源: Is there a reason you can not define the access modifier on a method or in an interface?