www.mikrocontroller.net

Forum: PC-Programmierung struct in C#


Autor: Sven H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Locutus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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];

Autor: Sven H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok und wie kann ich das ganze in eine Klasse packen?

Autor: Locutus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.