Forum: PC-Programmierung struct in C#


von Sven H. (Gast)


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;

von Johnny (Gast)


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

von Locutus (Gast)


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];

von Sven H. (Gast)


Lesenswert?

Ok und wie kann ich das ganze in eine Klasse packen?

von Locutus (Gast)


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.

von Bartli (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.