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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.