Autor Beitrag
tgi
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 22.01.08 19:31 
Hallo Zusammen

Ich habe das Problem, dass ich auf instantierte innere Klassen geschützt zugreifen möchte, d.h. innerhalb der Klasse befinden sich die Original-Werte, die ausschliesslich bei einer Direktzuweisung geändert werden dürfen. Das Auslesen des internen Klassentyps soll entweder nicht möglich sein oder es soll eine Kopie statt einer Referenz zurückgegeben werden.

Beispiel:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
public static Config
{
   public class TIC[/google]
   {
      int click
      int base

      // zwei Properties, die auf die internen Eigenschaften zugreifen
      public int Click
      { .. }
      public int Base
      { .. }
   }

   etc.
}

mit folgenden Statements dürfen die Werte der internen Klasse nicht verändert werden, d.h. also, eine Zuweisung auf tmpclick soll nicht möglich sein oder dann eine Kopie erzeugen
ausblenden C#-Quelltext
1:
2:
3:
Config.TIC tmpclick = Config.TIC;
tmpclick.Click = 3;
tmpclick.Base = 5;

folgende Statements geben die inneren Werte zurück
ausblenden C#-Quelltext
1:
2:
int clk = Config.TIC.Click;
int bs = Config.TIC.Base;

mit folgenden Statements werden die inneren Werte verändert
ausblenden C#-Quelltext
1:
2:
Config.TIC.Click = 5;
Config.TIC.Base = 7;

oder auch, falls eine Variable des Typs Config.TIC deklariert werden darf, werden die inneren Werte verändert
ausblenden C#-Quelltext
1:
Config.TIC = tmpclick;					

Ich habe es auch schon über Interfaces probiert, aber da gibt mir das Statement
ausblenden C#-Quelltext
1:
Config.TIC tmpclick = Config.TIC;					
ebenfalls eine Referenz auf die interne Klasse zurück, wobei die Werte der Originalklasse geändert werden, wenn ein Wert auf tmpclick zugewiesen wird.

Desweiteren habe ich es über ein Property, welches mit new eine Kopie der internen Klasse erzeugt, die Werte zuweist und zurückgibt. Dann können aber mit den Statements
ausblenden C#-Quelltext
1:
2:
Config.TIC.Click = 5;
Config.TIC.Base = 7;
die Werte nicht mehr an die innere Klasse zugewiesen werden.
Vielleicht gibt es hier einen Trick, herauszufinden, wie das Property aufgerufen wird.

Die einzige Lösung, die bis jetzt funktioniert, ist die interne Klasse als static struct zu deklarieren.
Jedoch möchte ich in einer anderen Klasse ein Array mit einem Indexer-Property verwenden und dies ist wiederum in einer statischen Strucktur nicht möglich. Zudem kann dann über die Indexer nicht mehr direkt auf die Properties der Struktur zugegriffen werden
ausblenden C#-Quelltext
1:
Config.TIC[2].Click;					
ist dann nicht mehr möglich.

Weiss hier jemand eine Lösung zu diesem sicher nicht einfachen Problem.

Danke
Tom