【发布时间】:2013-10-26 13:14:38
【问题描述】:
我可以让某些属性只对相同的接口类公开而对所有其他类只读吗?
【问题讨论】:
-
此要求成为抽象类代替接口的主要候选者。
我可以让某些属性只对相同的接口类公开而对所有其他类只读吗?
【问题讨论】:
可以使用显式实现,例如:
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 都可以访问。
有什么用吗?
【讨论】:
into.. 而不是 int.
接口就像类的契约。它不会改变可访问性级别。
如果一个类的成员是公共的,那么它对所有可以访问该类的类都是公共的。您可以拥有的唯一限制是使用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 这样的访问修饰符。
【讨论】: