【发布时间】:2012-01-24 11:53:13
【问题描述】:
我有一个基础(抽象)类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
}
}
【问题讨论】:
-
如果有任何不清楚的地方,请告诉我,我会修改。
-
不清楚你想限制什么访问。您要限制访问的属性在哪里?
-
@Matten:这是非法的。您不能更改被覆盖成员的访问修饰符。
-
看起来你想要的实际上并不是继承。
标签: c# access-modifiers