struct in C#

Gast #386609
Lesenswert?
• ▲
▼
Wie kann man eine Array in einer struct Anweisung einbinden?
So funktioniert das ganze. Leider sind die Array (1) und (2) außerhalb
der struct Anweisung. In C++ funktioniert das ohne Probleme mit einem
Array in einer struct Anweisung. Wie funktioniert das in C#?

        public int[] byte_transmit = new int[8]; (1)
  public int[] byte_recieve = new int[8];  (2)

  public struct message_write
  {
    public int id;
    public int rtr;
    public int dlc;
  }
        public message_write ptransmit;

  public struct message_read
  {
    public int id;
    public int rtr;
    public int dlc;
  }
        public message_read precieve;
Gast #386610
Lesenswert?
• ▲
▼
So sollte das funktionieren:

public struct message_write
{
    public int id;
    public int rtr;
    public int dlc;
    public int[] byte_transmit;
}

public message_write ptransmit;

ptransmit.byte_transmit = new int[8];


Gruss
Johnny
Gast #386611
Lesenswert?
• ▲
▼
Also eigentlich soll man in C# eigentlich keine Structs nehmen. Die
Philosophie geht ja hin zu Klassen. Also eine Klasse Message mit deinen
Variablen id, rtr, dlc und dann 2 Instanzen davon. Einmal für transmit
und einmal für recieve.

Zum Thema Arrays ins Structs: Man kann nur eine Array Definition im
Strukt anlegen. Das Array an sich muss man dann später initialisieren.

public struct message_write
  {
    public int id;
    public int rtr;
    public int dlc;
    public int[] byte_transmit;
  }

dann z.B. in der Form.load Methode


public message_write ptransmit;
ptransmit.byte_transmit = new int[8];
Gast #386613
Lesenswert?
• ▲
▼
So kannst du die Klasse Deklarieren. Eigentlich fast das Selbe wie beim
Struct nur das du hier direkt sagen kannst, wie groß dein Array sein
soll und du hast nen Konstruktor.

public class message
{
  public int id;
  public int rtr;
  public int dlc;
  public int[] x = new int[8];

  public message()
  {
    //Construktor
  }
}

So legst du dann instanzen von der Klasse an. Dann kannst einfach wie
im Struct drauf zugreifen.

public message ptransmit = new message();
public message precieve = new message();


Theroretisch sollten die Klassenvariablen (id, rtr, ..) nicht Public
sondern Private sein und du nur mit Get und Set Methoden drauf
zugreifen. Aber man kann es sich auch einfacher machen.
Gast #386614
Lesenswert?
• ▲
▼
> Also eigentlich soll man in C# eigentlich keine Structs nehmen.

Und was verleitet dich zu dieser Aussage ? Structs können durchaus Sinn
machen, z.B. für simple Wertobjekte (Objekte hier nicht im Sinne von
.NET value/object types) wie System.Drawing.Color.

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