我想知道是否有任何模式可以解决这个问题: 我有一组属性需要公开给几个类和其他类,它们应该只是readonly, 课程必须是公开的。
我不想使用反射或任何其他糟糕的性能制造商。
我知道我可以让他们成为RO并在课堂上实现逻辑,但我认为这不好。
任何帮助?
答案 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)
两个选项:
可悲的是,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
}
}
如果我正确理解了这个问题:)