【问题标题】:C# public only for classes of the same interfaceC# public 仅用于相同接口的类
【发布时间】:2013-10-26 13:14:38
【问题描述】:

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

【问题讨论】:

  • 此要求成为抽象类代替接口的主要候选者。

标签: c# interface private


【解决方案1】:

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

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

有什么用吗?

【讨论】:

  • 不是我认为的 OP 的意思.. 但很好!
  • 确实如此。此外,您有一个错字(type-o...双关语)。 into.. 而不是 int.
  • 没关系..刚刚意识到我可以根据人们的答案来解决这种问题...希望你不介意!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 2022-01-13
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    相关资源
    最近更新 更多