Я хотел бы ограничить доступ к методам в зависимости от типа, который был передан. В моей конкретной ситуации я разрабатываю UDP-менеджер, если вы это сделаете.Модификатор доступа к динамическому методу
Я хочу, чтобы мой UDPManager
использовался для разных вещей. Например, у меня может быть 1 UDPManager
для связи между клиентом и сервером и еще один UDPManager
для обработки сообщений между сервером и другим сервером.
Я определил enum
, который определяет тип UDPManager
. Так, например, ManagerType.A = 1
и ... ManagerType.B = 2
UDPManager
имеет определенные события, которые могут быть подписаны, и я не хочу, чтобы они доступны, если эти события не имеют значения, учитывая тип UDPManager
.
Вот пример класса
public class Something
{
public int SomethingsType { get; set; }
public void A() { }
public void B() { }
}
Как я могу сделать это так, что если SomethingsType == MessageType.A
, то MessageType.B
не доступна (т.е. частный)?
Для большей ясности, если я типа:
Something something = new Something();
someting.SomethingsType = 1
Я не хочу something.B()
быть доступны.
UPDATE
Прошу прощения за упоминание runtime
. Я имею в виду, что я не хочу, чтобы указанный способ (B
) был доступен, если указан SomethingsType
- A
.
его невозможно. вы всегда можете ссылаться на методы с отражением, даже если они являются частными. – Steve
Этот материал применяется компилятором. Это не имеет смысла во время выполнения. В вашем сознании, что «недоступно (т.е. оно является частным)» означает * во время выполнения *? Что вы ожидаете, когда компилятор компилирует код, который вызывает 'something.B()' (потому что он общедоступен в исходном файле), а позже метод внезапно становится закрытым? –
Внесите 'SomethingA',' SomethingB' и т. Д. Затем используйте фабричный метод, заданный 'ManagerType'. – mxmissile