Ich möchte den Zugriff auf Methoden einschränken, abhängig vom übergebenen Typ. In meiner speziellen Situation entwickle ich einen UDP- "Manager", wenn Sie so wollen.Dynamischer Methodenzugriffsmodifikator
Ich möchte meine UDPManager
für verschiedene Dinge verwendet werden. Zum Beispiel könnte ich 1 UDPManager
für die Kommunikation zwischen Client und Server haben, und ein anderes UDPManager
, um die Kommunikation zwischen Server und einem anderen Server zu behandeln.
Ich habe eine enum
definiert, die den Typ UDPManager
angibt. So zum Beispiel, ManagerType.A = 1
und ... ManagerType.B = 2
Die UDPManager
hat bestimmte Ereignisse, die abonniert werden können, und ich will sie nicht zur Verfügung, wenn diese Ereignisse nicht relevant sind, angesichts der Art des UDPManager
. Hier
ist ein Beispiel einer Klasse
public class Something
{
public int SomethingsType { get; set; }
public void A() { }
public void B() { }
}
Wie kann ich es so machen, dass, wenn SomethingsType == MessageType.A
, dann MessageType.B
nicht verfügbar ist (dh es ist privat)?
Für weitere Klarheit, wenn ich schreibe:
Something something = new Something();
someting.SomethingsType = 1
I verfügbar sein nicht something.B()
wollen.
UPDATE
Ich entschuldige mich runtime
für die Erwähnung. Was ich meine, ist, dass ich die genannte Methode (B
) nicht verfügbar habe, wenn SomethingsType
A
ist.
ist nicht möglich. Sie können Methoden immer mit Reflektion aufrufen, auch wenn sie privat sind. – Steve
Das Zeug wird vom Compiler erzwungen. Es ist zur Laufzeit bedeutungslos. Was bedeutet "zur Zeit nicht verfügbar (dh privat)" zur Laufzeit *? Was erwarten Sie, wenn der Compiler Code kompiliert, der 'something.B()' aufruft (weil er in der Quelldatei öffentlich ist), und später wird die Methode plötzlich privat? –
Implementieren Sie 'SomethingA',' SomethingB' etc. Verwenden Sie dann eine Factory-Methode mit dem Namen 'ManagerType'. – mxmissile