界面的私有成员

时间:2014-05-08 14:49:09

标签: c#

如果在我的程序中我有界面,那么它的所有成员都是公开隐式。在实现该界面的类中,我必须使那些成员(属性)公开

是否可以将其设为私人

3 个答案:

答案 0 :(得分:5)

  

是否可以将接口实现设为私有?

完全私有 - 接口代表公共方法和属性集。没有办法让接口实现变得私有。

public interface IFoo
{
   void Bar();
}

public class FooImpl
{
    void IFoo.Bar()
    {
       Console.WriteLine("I am somewhat private.")
    }

    private void Bar()
    {
       Console.WriteLine("I am private.")
    }

}

现在,通过界面显式 调用IFoo.Bar()的唯一方法是

FooImpl f = new FooImpl();
f.Bar();   // compiler error
((IFoo)f).Bar();

答案 1 :(得分:4)

简短回答:不。

接口的基本思想是它是你的类和组件之间的契约,这意味着它的成员是供公众使用的。如果您需要私人会员,这可能意味着您可能需要重新审视您的设计。

答案 2 :(得分:4)

接口应公开曝光。

你可以做的是切换到带有受保护抽象成员的抽象基类。在许多方面,这将通过强制实施者在没有公开的情况下获得该方​​法来达到同样目的。

public abstract class MyBase
{
    protected abstract void DoSomething();
}

这样做的主要原因是你没有像使用接口那样使用抽象类获得多重继承,所以要权衡这个需求对你的重要性。