Mit Extension-Methods auf private Member des Objects zugreifen?



  • Hallo Leute,

    gibt es ne möglichkeit, das ich mit eine Erweiterungs-Methode eines Objekts auf desssen private member zugriefen könnte?

    grüße



  • Nein, sowas ist nicht vorgesehen.



  • NullBockException schrieb:

    Hallo Leute,

    gibt es ne möglichkeit, das ich mit eine Erweiterungs-Methode eines Objekts auf desssen private member zugriefen könnte?

    grüße

    Ein geschachtelter Typ wäre eine Möglichkeit - der hat nämlich Zugriff auf alle (also auch private und protected) Member, auf die sein enthaltender Typ zugreifen kann.

    Ausführliche Beispiele mit Erläuterung findest du hier.



  • Servus,

    es gibt auch noch den dreckigen Weg via Reflection:

    public class Foo
    {
        private int bar;
    
        public Foo(int bar)
        {
            this.bar = bar;
        }
    }
    
    private void Do()
    {
        Foo foo = new Foo(1000);
    
        Type fooType = foo.GetType();
    
        FieldInfo barField = fooType.GetField("bar", BindingFlags.NonPublic | BindingFlags.Instance);
    
        object value = barField.GetValue(foo);
    }
    

    Hier habe ich jetzt direkt nach den Feld gesucht, du kannst auch direkt nach allen Feldern suchen lassen und dann das richtige rauswählen. Das Gleiche gilt auch für private Properties und private Methods. Wichtig sind hier nur die BindingFlags.

    Aber mit einer Extended Method hast du keine Chance...

    gruß
    Hellsgore



  • Danke jungs .. i ♥ Reflections;)



  • schmidt-webdesign.net schrieb:

    NullBockException schrieb:

    Hallo Leute,

    gibt es ne möglichkeit, das ich mit eine Erweiterungs-Methode eines Objekts auf desssen private member zugriefen könnte?

    grüße

    Ein geschachtelter Typ wäre eine Möglichkeit - der hat nämlich Zugriff auf alle (also auch private und protected) Member, auf die sein enthaltender Typ zugreifen kann.

    Ausführliche Beispiele mit Erläuterung findest du hier.

    Dann kann man auch gleich eine normale Member-Funktion verwenden.

    Ich verstehe nämlich grad nicht, wieso man einen Nested Type verwenden sollte, wenn man eigentlich eine Extension-Method machen wollte.

    Eine Extension-Method macht man normalerweise dann, wenn man die eigentliche Klasse nicht verändern kann. Und dann scheiden Nested Types auch aus.



  • hustbaer schrieb:

    Dann kann man auch gleich eine normale Member-Funktion verwenden.

    Ich verstehe nämlich grad nicht, wieso man einen Nested Type verwenden sollte, wenn man eigentlich eine Extension-Method machen wollte.

    Eine Extension-Method macht man normalerweise dann, wenn man die eigentliche Klasse nicht verändern kann. Und dann scheiden Nested Types auch aus.

    Hm, die Frage lautete lediglich:

    NullBockException schrieb:

    gibt es ne möglichkeit, das ich mit eine Erweiterungs-Methode eines Objekts auf desssen private member zugriefen könnte?

    Der Hinweis "die eigentliche Klasse soll/darf nicht verändert werden" ...

    Nun denn ... s'ist Wochenende 🙄


Anmelden zum Antworten