C# 仅对同一接口的类公开
本文关键字:接口 | 更新日期: 2023-09-27 18:37:06
我可以将某些属性仅对相同的接口类公开,而对所有其他类只读吗?
您可以使用显式实现,例如:
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都可以访问。
有什么用吗?
接口就像类的协定一样。它不会更改辅助功能级别。
如果类的成员是公共的,则它对所有可以访问该类的类都是公共的。您可以拥有的唯一限制是使用 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
这样的访问修饰符。