Hi Leute,
ich habe vor von VB auf C# umzusteigen. Allerdings habe ich schon ein Problem.
Ich habe eine Root-Klasse. In dieser Root-Klasse befinden sich mehrere "Unterklassen". Ich mochte aber von diesen Unterklassen auf die Eigenschaften der Root-Klasse zugreifen und diese auch verändern können. In VB ging das so.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| Module Module1
Sub Main() Dim _Root As New Root() Console.ReadKey() End Sub
Private Class Root
Dim _i As Integer Dim _Unterklasse As Unterklasse
Public Sub New() _i = 5 Console.WriteLine(_i.ToString()) _Unterklasse = New Unterklasse(Me) Console.WriteLine(_i.ToString()) End Sub
Private Class Unterklasse
Public Sub New(ByRef RootKlasse As Root) RootKlasse._i = 10 End Sub
End Class
End Class
End Module |
Hier klappt alles wunderbar. Die Variable _i hat zuerst den Wert 5, dann wird sie über die andere Klasse geändert und hat den Wert 10. Nun das gleiche in C#.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| using System; using System.Collections.Generic; using System.Text;
namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Root _Root = new Root(); Console.ReadKey(); }
private class Root { int _i; Unterklasse _Unterklasse;
public Root() { _i = 5; Console.WriteLine(_i.ToString()); _Unterklasse = new Unterklasse(ref this); Console.WriteLine(_i.ToString()); }
private class Unterklasse { public Unterklasse(ref Root RootKlasse) { RootKlasse._i = 10; } } } } } |
Hier kommt dann der Fehler:
"<this>" kann nicht als ref- oder out-Argument übergeben werden, da das Element schreibgeschützt ist.
Kann ich das irgendwie umgehen oder gibt es vielleicht sogar eine ellegantere Lösung für das Problem?
mfg und vielen Dank im Voraus
duckhunter