C# 仅对同一接口的类公开

本文关键字:接口 | 更新日期: 2023-09-27 18:37:06

我可以将某些属性仅对相同的接口类公开,而对所有其他类只读吗?

C# 仅对同一接口的类公开

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

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都可以访问。

有什么用吗?

接口就像类的协定一样。它不会更改辅助功能级别。

如果类的成员是公共的,

则它对所有可以访问该类的类都是公共的。您可以拥有的唯一限制是使用 internalprotected . 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 这样的访问修饰符。