Laden...

Zugriff auf Member über Variable

Erstellt von manunidi vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.481 Views
M
manunidi Themenstarter:in
221 Beiträge seit 2008
vor 15 Jahren
Zugriff auf Member über Variable

Hallo liebe C# Community,

ich hatte einen komischen Einfall, und möchte einfach mal hören, ob dies möglich ist.

Man nehme an ich habe eine Klasse "Test".

Diese hat die öffentliche Funktion "teste" und eine öffentlich zugänglich Variable abc.

Es ist möglich über

Test t = new Test();
t.abc = "abc";

bzw.
t.test() ruft die Funktion auf.

Nun zu meiner Frage:

Ist es möglich, das t.[VARIABLE] = "abc" gesetzt wird, wobei die VARIABLE den Wert abc hat?

Bzw. ist es möglich teste() aufzurufen, in dem ich t.[VARIABLE] schreibe, und in der Variable teste() steht?

3.003 Beiträge seit 2006
vor 15 Jahren

Hm, eventuell lohnt es sich für dich, dich etwas näher mit einigen Sprachkonstrukten in C# vertraut zu machen.

Frage 1: Ja, ist möglich. Stichwort Indexer.
Frage 2: Ja, ist möglich, wenn auch nicht genau mit der von dir angefragten Syntax (Punkt gefolgt von eckigen Klammern? hmmm). Stichwort delegate.

Beim Stichwort "öffentlich zugängliche Variable" stellen sich mir die Nackenhaare auf. Ich hoffe, du redest nicht von "public int myVar;"

Gruß,

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

M
manunidi Themenstarter:in
221 Beiträge seit 2008
vor 15 Jahren

Das hab ich mir schon gedacht, das die Frage aufkommt!

Nein, ich verwende Getter und Setter!

656 Beiträge seit 2008
vor 15 Jahren

Klingt für mich nach Dynamic Invocation über Typ/Methodennamen...

Meinst du sowas?

class Test { public void DoSomething() { Console.WriteLine("doing something"); } }
//...
string method = "DoSomething";
Test test = new Test();
Type t = test.GetType();
MethodInfo m = t.GetMethod(method);
m.Invoke(test, null); //ruft DoSomething auf und gibt "doing something" aus

Das andere klingt danach, als ob du dynamisch Properties "erzeugen" willst.
Geht direkt nicht, kann man aber über ein Dictionary und/oder einen Indexer abbilden:

class Test 
{
   private Dictionary<string, object> _myValues = new Dictionary<string, object>();
   public object this[string key] 
   {
      get { return _myValues[key]; }
      set { _myValues[key] = value; }
   }
}
//...
Test test = new Test();
test["abc"] = randomObject;

Sollte keins der beiden zutreffen, versuch mal genauer zu beschreiben, was du eigentlich vorhast - mit entsprechendem Pseudocode, wie du es dir vorstellst; und wenn möglich ohne object.[replaceMe] 😉

Gruß, BhaaL

1.433 Beiträge seit 2006
vor 15 Jahren

Kleine Frage am Rande: was für einen Sinn würde es machen eine öffentliche Methode den Wert einer öffentlichen Eigenschaft zu verändern?

Stichwort Codesecurity, nur soviel wie notwendig public.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt