struct in C#

OP #6313126
Lesenswert?

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 #6313220
Lesenswert?

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
}
Gast #6314195
Lesenswert?

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 #6315869
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren