我是否可以将某些属性仅公开给相同的接口类,并且只读给所有其他类?
答案 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)
接口就像类的合同。它不会改变可访问性级别。
如果某个类的成员是公共的,则它对所有可以访问该类的类都是公共的。您可以使用的唯一限制是使用internal
或protected
。 internal
使成员公开给在同一个程序集中定义的类,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
这样的访问修饰符。