1

Can I make some properties public only to same interface classes and readonly to all other classes?

4

2 回答 2

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 访问时,将可以访问;当通过IFoogetter 和 setter 访问时将可以访问。

有什么用?

于 2013-10-26T13:19:14.897 回答
0

接口就像类的契约一样。它不会改变可访问性级别。

如果一个类的成员是公共的,那么它对所有可以访问该类的类都是公共的。您可以拥有的唯一限制是使用internalor protectedinternal使成员对在同一程序集中定义的类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.

于 2013-10-26T14:50:58.833 回答