У меня есть базовый (абстрактный) класс 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
}
}