vik*_*iky 1 c# interface public internal
我有一个接口(称为IMessage),它有一个方法Check(),一个类实现这个接口
interface IMessage
{
bool Check();
}
class NewClass : IMessage
{
#region IMessage Members
public bool Check()
{
//Some logic
}
}
Run Code Online (Sandbox Code Playgroud)
那一切都很好.问题是我不希望这个方法(Check())是公共的,我想把它保持在asssembly的内部,但如果我把它作为内部,那么编译器说它没有实现接口.它需要公开才能实现接口.我能做什么?
您可以通过使用显式接口实现语法(删除访问限定符并将接口名称作为方法前缀)来实现接口方法,而不将其作为类的直接公共接口的一部分:
interface IMessage
{
bool Check();
}
class NewClass : IMessage
{
bool IMessage.Check() { }
}
Run Code Online (Sandbox Code Playgroud)
但是,任何可以强制转换为IMessage接口的人仍然可以调用Check().这不是一种阻止调用方法的方法 - 只是对类的公共接口进行整理.如果接口是程序集的内部接口,则只有该程序集中的类可以转换为它并调用该方法.
通常,.NET不提供仅在接口实现内部创建接口的某种方法的方法.在这个区域中,您可能需要考虑一个抽象基类 - 您可以在其中创建受保护的抽象方法,继承者可以在不将其暴露给外部调用者的情况下实现这些方法.例如:
abstract class MessageBase
{
protected abstract bool Check();
}
class NewClass : MessageBase
{
protected override bool Check() { ... }
}
Run Code Online (Sandbox Code Playgroud)