Forum: PC-Programmierung Globales in C#


von freundlicher gast (Gast)


Lesenswert?

Hallo, habe als Ansi-C-Programmierer mal eine Frage zu C#:
1
namespace Esd.IO.Ntcan.Example
2
{
3
    class CanMonitor
4
    {
5
      static void OnCanData(ref CanMessage[] cmsgArray, ref Int32 entries)
6
        {
7
            
8
          int[, ,] PDO =            new int[800, 8, 8];
9
          int[, ,] PDO_alt =        new int[800, 8, 8];
10
          int[,]   tx_modulstatus = new int[2047, 8];

die Variablen unten werden immer bei Aufruf von OnCanData neu deklariert 
und auf Null gesetzt. Ich möchte diese aber einmalig bei Programmstart 
global initialisieren. Wie und Wo schreibe ich das hin? HAbe schon 
versucht "lose" in der Klasse mit public zu arbeiten, aber ohne 
Erfolg...

von Arc N. (arc)


Lesenswert?

freundlicher gast schrieb:
> Hallo, habe als Ansi-C-Programmierer mal eine Frage zu C#:

> die Variablen unten werden immer bei Aufruf von OnCanData neu deklariert
> und auf Null gesetzt. Ich möchte diese aber einmalig bei Programmstart
> global initialisieren. Wie und Wo schreibe ich das hin? HAbe schon
> versucht "lose" in der Klasse mit public zu arbeiten, aber ohne
> Erfolg...

In der Klasse mit public static arbeiten oder die Klasse mit static 
class...

von freundlicher gast (Gast)


Lesenswert?

ja sehr gut, funktioniert. Danke ;) Das public ist dann wohl das, was 
ich aus C als global kenne, aber was tut das static vor der Variablen?

von Peter II (Gast)


Lesenswert?

freundlicher gast schrieb:
> ja sehr gut, funktioniert. Danke ;) Das public ist dann wohl das, was
> ich aus C als global kenne, aber was tut das static vor der Variablen?

also global kenn ich von C nicht - alles was ausserhalb von funktionen 
steht ist global!

Static macht das gleiche wie in C.

Und Public macht auch das gleich wie C++.

Kann sein das du einiges durcheinandern bringst?

von freundlicher gast (Gast)


Lesenswert?

wahrscheinlich, dass ich static aus c nicht kenne...

von Frank M. (aktenasche)


Lesenswert?

static bezeichnet ein objekt dass bereits beim kompilieren instanziert 
wird

bei c# gibt es eigentlich nur objekte mit methoden. so müsstest du zB 
eine funktion ohne static schlüssel instanzieren.

wenn du globale konstanten/variablen verwenden willst, empfehle ich dir 
so etwas:
1
namespace Esd.IO.Ntcan.Example
2
{
3
   public static class Globals
4
   {
5
       public static int a;
6
   }
7
}

zugriff erfolgt dann wie gewohnt ueber Globals.a

wenn es nur um die paar variablen geht, kannst du auch einfach alles als 
static deklarieren.

von freundlicher gast (Gast)


Lesenswert?

Macht es denn dann auch Sinn, sich die Klasse, wo die GUI drin steht als 
public static zu deklarieren?

#Develop hat mir automatisch 'partial class MainForm : Form' erstellt, 
dann ist das wahrscheinlich auch so üblich habe ich mir gedacht.

Ich kann dann aber nciht von aussen drauf zugreifen. Wie sieht 
normalerweise ein Programm mit GUI aus, um auf die Elemente zuzugreifen. 
Oder soll man wirklich nur aus der Forms-Klasse zugreifen?

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.