struct in C#

OP #6313126
Hallo
Ich habe eine Frage zu C#. Ich habe noch nie in C# programmiert aber für 
das was ich machen möchte langt es, dank C++ und Pascal.

ein struct wie

public struct Temp_t
{
   public Int32 Zahl;
   public UInt32 UZahl;
   public string Temp_CPU;
}

ist OK
aber ich möchte ein String Array im struct haben
also so was.

public struct Temp_t
{
   public Int32 Zahl;
   public UInt32 UZahl;
   string[] Temp_CPU  = new string[5];
}

nur da meckert der Compiler
Wie geht so was in C#
Gast
Wenn es unbedingt ein Struct sein muss mach eine Factory-Methode:
1
 struct InputCard
2

3
{
4

5
 public string CardNo;
6

7
 public int BaseAddress;
8

9
 public int LowerAddress;
10

11
 public int UpperAddress;
12

13
 public int[] WriteBitNo;
14

15
 public int[] ReadBitNo;
16

17

18

19
 static InputCard Create()
20

21
 {
22

23
  return new InputCard()
24

25
  {
26

27
   CardNo = string.Empty,
28

29
   WriteBitNo = new int[16],
30

31
   ReadBitNo = new int[16]
32

33
  };
34

35
 }
36

37
}
OP
Ich habe es mit einer Klasse gelöst

     public class Mainboard_t
        {
            public string[] Temp_CPU = new string[5];
            public string[] Temp_GPU = new string[5];
            public string[] Speed_CPU = new string[5];
            public string[] Speed_GPU = new string[5];

        }

So funktioniert es
Gast
Lass einfach das new weg.
1
public struct Temp_t
2
{
3
   public Int32 Zahl;
4
   public UInt32 UZahl;
5
   string[] Temp_CPU;
6
}
Nunja, Du musst es dann nach jedem Anlegen einer Instanz des Structs 
machen...
Gast
Bedenke, dass zwischen "struct" und "class" in C# ein wesentlicher 
Unterschied besteht, im Gegensatz zu C++. Klassen (class) werden in .NET 
als Objekte auf dem Heap alloziert, unterliegen der Garbage Collection 
und sind "Copy-By-Reference" während Strukturen (struct) rein 
stackbasiert und "Copy-By-Value" sind. Das kann u.U. zu unterwartetem 
Verhalten bei Funktionsaufrufen führen.
Gast
FS schrieb:

> Bedenke, dass zwischen "struct" und "class" in C# ein wesentlicher
> Unterschied besteht, im Gegensatz zu C++. Klassen (class) werden in .NET
> als Objekte auf dem Heap alloziert, unterliegen der Garbage Collection
> und sind "Copy-By-Reference" während Strukturen (struct) rein
> stackbasiert und "Copy-By-Value" sind. Das kann u.U. zu unterwartetem
> Verhalten bei Funktionsaufrufen führen.

Erstens das und zweitens sind Arrays (und damit auch Strings) 
grundsätzlich Referenzen, während bei C/C++ Arrays fester Maximallänge 
durchaus auch als Werte direkt innerhalb von Strukturen liegen können 
oder sogar ohne deklarativ feste Maximallänge, wenn sie das letzte 
Element der Struktur darstellen.

C ist halt schmutzig und C++ hat all den Dreck von C geerbt. Millionen 
Sicherheitslücken können nicht lügen...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.