方法可见性的责任归于实现接口的类。
public interface IMyInterface
{
bool GetMyInfo(string request);
}
在 C# 中,在 GetMyInfo() 方法之前设置访问修饰符 public、private 或 protected 会产生以下错误:修饰符 'private' 对此项无效。
您是否有理由不能在方法或接口上定义访问修饰符?
(这里已经用法语问过问题)
方法可见性的责任归于实现接口的类。
public interface IMyInterface
{
bool GetMyInfo(string request);
}
在 C# 中,在 GetMyInfo() 方法之前设置访问修饰符 public、private 或 protected 会产生以下错误:修饰符 'private' 对此项无效。
您是否有理由不能在方法或接口上定义访问修饰符?
(这里已经用法语问过问题)
该接口定义了对象和调用其成员的客户端之间的契约。任何其他对象都无法访问私有方法,因此将其添加到接口是没有意义的。因此,接口的所有成员都被视为公共的。
如果您进行显式接口实现,您实际上可以在实现类中将方法设为私有:
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");
因此,在接口的上下文中,它的所有成员都是公共的。它们可以从实现类的公共接口中隐藏,但总是有可能将类型转换为实例并以这种方式访问成员。
就 OO 而言 - 封装就是数据隐藏。这意味着类中发生的任何事情都取决于类的实现。这意味着以合同方式强制执行私人成员将毫无用处。
但是,使用接口的原因是因为您希望确保一个类遵守特定的约定并以一致的方式公开多个公共成员。
接口的所有方法必须具有相同的访问级别——以便调用者可以使用所有方法。但是接口也可以是内部的(或作为嵌套接口私有)。
如果您需要不同的访问级别,请使用不同的界面。
接口中的私有定义将: