我有一个基础(抽象)类 Component
。我想控制对派生类的属性的访问,这样每个人都可以获得读访问权限,但只有某些类允许写访问权限。
那些“某些类”目前是任何实现抽象基类 MessageHandler<TMessage>
的东西。理想情况下,我还希望实现 IMessageHandler
的类能够获得访问权限,但我认为这会使要求更加严格。
这将在 xbox 上运行,因此我想避免创建临时对象(例如只读副本)。我还想最大限度地减少方法调用的次数,以获取读取/写入的值。Component
类和 MessageHandler<TMessage>
类目前在它们自己的程序集中,这两个类在使用我的 API 时都会被其他项目引用。
我猜我将不得不以某种方式改变我的模型,但我无法理解它。
public abstract class Component
{
}
public class DerivedComponentA : Component
{
int property {get; set;}
}
public abstract class MessageHandler<TMessage>
{
}
public class IntMsghandler : MessageHandler<int>
{
void DoThing(DerivedComponentA derivedComponentA)
{
derivedComponentA.property = 5; // Allowed
}
}
public class AnyClass // Doesn't inherit MessageHandler, or implement IMessageHandler
{
void DoThing(DerivedComponentA derivedComponentA)
{
derivedComponentA.property = 5; // Not Allowed
}
}
最佳答案
隔离(基于你提出的问题和我的理解)是基于基类定义(如果有的话)。这意味着隔离应该从它开始。
或者,如果您说,如果某些 class X
实现 MessageHandler
应该能够以多种方式对 class Y
类型对象进行操作。 imo,这意味着两者之间存在着艰难的关系class Y
和 MessageHandler
。
这导致我认为你可以做这样的事情:
get
DerivedComponentA
MessageHandler
中的 protected SetProperty(Component compo, string propertyName, object propertyValue)
并使用反射设置所需的属性。 通过这种方式,在任何
Component
派生类上设置属性的唯一可能方法是使用 MessageHandler
方法,因此仅适用于从它派生的那些人。对于其余可用类型,您仅提供 public get
(readonly) poperty 来读取数据。希望这可以帮助。
关于c# - 不同类对属性的不同访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8986370/