部分封装字段C#

时间:2009-10-24 17:47:23

标签: c# design-patterns

我想知道是否有任何模式可以解决这个问题: 我有一组属性需要公开给几个类和其他类,它们应该只是readonly, 课程必须是公开的

我不想使用反射或任何其他糟糕的性能制造商。

我知道我可以让他们成为RO并在课堂上实现逻辑,但我认为这不好。

任何帮助?

4 个答案:

答案 0 :(得分:8)

在当前程序集中,您可以将其设为internal

在当前程序集之外,您可以做的最好的事情是通过[InternalsVisibleTo]将其提供给特定程序集。

.NET不提供更细粒度的“朋友”访问。

答案 1 :(得分:7)

class Person : IReadOnlyPerson {
    public string Name { get; set; }
}

public interface IReadOnlyPerson {
    string Name { get; }
}

对那些应该进行r / o访问的类 - 使用IReadOlyPerson

答案 2 :(得分:2)

两个选项:

  1. 使属性内部(不是类)并将类分组到不同的程序集中。
  2. 使用反射魔法。
  3. 可悲的是,C#中没有friend个类。

答案 3 :(得分:0)

您可以尝试将您的setter声明为基类中的受保护。任何派生它的类都可以设置它。但是使用派生类的任何类只会看到只读属性。

public class ClassBase
{
    public int MyProperty
    {
        get;
        protected set;
    }
}

public sealed class ClassDerived : ClassBase
{
    public ClassDerived()
    {
        MyProperty = 4; // will set
    }
}

public class ClassUsingDerived
{
    public ClassUsingDerived()
    {
        ClassDerived drv = new ClassDerived();
        drv.MyProperty = 5; // will fail
    }
}

如果我正确理解了这个问题:)