У меня есть базовый (абстрактный) класс 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
}
}
Если что-то неясно, сообщите мне, и я отредактирую. –
Непонятно, к чему вы хотите ограничить доступ. Где находятся свойства, к которым вы хотите ограничить доступ? –
@ Маттен: Это незаконно. Вы не можете изменить модификаторы доступа переопределенных членов. –