C#public仅适用于同一接口的类

时间:2013-10-26 13:14:39

标签: c# interface private

我是否可以将某些属性仅公开给相同的接口类,并且只读给所有其他类?

2 个答案:

答案 0 :(得分:6)

您可以使用显式实现,例如:

interface IFoo {
    int Value { get; set; }
}

public class Foo : IFoo {
    public int Value { get; private set; }

    int IFoo.Value {
        get { return Value; }
        set { Value = value; }
    }
}

通过Foo访问时,只有get可以访问;当通过IFoo访问时,可以访问getter和setter。

有用吗?

答案 1 :(得分:0)

接口就像类的合同。它不会改变可访问性级别。

如果某个类的成员是公共的,则它对所有可以访问该类的类都是公共的。您可以使用的唯一限制是使用internalprotectedinternal使成员公开给在同一个程序集中定义的类,protected使它对从类派生的类公开。

您可以创建一个抽象基类,并使成员受到保护,而不是接口:

public interface IFoo
{
    int Value { get; set; }
}

public abstract class FooBase : IFoo
{
    public abstract int Value { get; set; }

    protected void ProtectedMethod()
    {
    }
}

public class Foo : FooBase
{
    public int Value { get; set; }
}

但是,您无法定义可由实现特定接口的类访问的成员。没有像public-to-IFoo-otherwise-private这样的访问修饰符。