[C#] Structs zwischen Klassen übergeben

B

besy

Hallo,

ich schreibe derzeit an einem kleinen Programm und hänge gerade an einer Stelle:

Code:
public void method1()
{
    .
    .
    // Do something
    .
    .
    myStruct[] myS = new myStruct[4];
    .
    .
    Klasse2 k2 = new Klasse2();
    myS = k2.rechneWasGroßes(myS);           //Do something expensive
    .
    .
}

Code:
public struct myStruct
{
    public string name;
    public int wert1;
    public int wert2;
    public int wert3;
    public int wert4;
}


In der Methode sollen mit dem Array voller Structs nun komplexere Berechnungen ausgeführt werden welche ich gerne in eine andere Klasse auslagern würde (Klasse 2). Das Problem ist das eine andere Klasse das Struct ja gar nicht kennt, somit das Array weder entgegennehmen, noch nach den Berechnungen wieder zurückgeben kann.
Ich habe in Klasse 2 versucht einfach ein identisches Struct anzulegen, dann kommt aber ein Fehler der mir sagt das er Klasse1.myS nicht in Klasse2.myS konvertieren könnte.

Wie übergebe ich denn so ein Struct Array ? An eine Funktion innerhalb derselbe Klasse ist kein Problem, da ist das Struct ja bekannt, aber wie bringe ich einer anderen Klasse bei was da kommt ? Ich glaub ich steh irgendwie aufm Schlauch :)
 
Hallo,

Wenn du das struct im namespace deklarierst, also nicht in der Klasse oder Methode, sollte es in beiden Klassen bekannt sein und du kannst es auch in beiden Klassen nutzen.

Vorraussetzung ist das beide Klassen dem sleben Namespace angehören.

Gruß
 
Hallo besy,

da die Struktur public ist, ist das kein Problem. Du musst nur den Klassenbezeichner mit dazuschreiben:
C#:
public class Klasse1
{
    // ...

    public struct myStruct
    {
        // ...
    }
}

public class Klasse2
{
    // ...
    
    public Klasse1.myStruct [] rechneWasGroßes(Klasse1.myStruct [] mystruct)
    {
        return mystruct
    }
}
Gruß
MCoder
 
Hi

Mal noch ein kleiner aber nicht ganz unwichtiger Hinweis :offtopic:
Du verwendest in deinem Struct strings. Dies solltest du nicht tun.

Structs sind Value-Types und werden komplett auf den Stack gepackt. String sind jedoch Reference-Types und liegen normalerweise im Heap. Du würdest hier also einen String in den Stack packen, was für den Computer sehr aufwendig ist und je nach String-Länge auch zu Speicherproblemen führen kann.
Zu dem werden String-Operation extrem langsam, da das komplette Struct beim Ändern des Strings kopiert werden muss.

In einem Struct sollten demnach auch nur Value-Types verwendet werden!
 

Neue Beiträge

Zurück