Verständnisfrage zu C#

OP #6317428
Lesenswert?

Hallo Ich bin ein C# Noop komme aus der Pascal C++ Welt
und schreibe ein C# Program für meine Bedürfnisse um.

Ich habe das ein Verständnis Problem

   public void Loop()
            {
                CPUMainboard_t Temperature;
                Temperature = GetSystemInfo();

                var command = new SendCommand((int)Command.kCore4Speed, 
f.ToString());
                 _cmdMessenger.SendCommand(command);

Der Author definiert eine Loop Schleife in main und das vertsähe ich 
nicht

>var command = new SendCommand((int)Command.kCore4Speed, f.ToString());

In C++ oder Pascal wird mit new ein Neues Object erstellt und auf dem 
Heap abgelegt ist das in C# nicht der Fall was macht das new hier, 
erstellt es nur eine neue Instanz ohne neuen Speicher anzufordern. Einen 
schönen Tag noch.
#6317466
Lesenswert?

Martin M. schrieb:
>>var command = new SendCommand((int)Command.kCore4Speed, f.ToString());
>
> In C++ oder Pascal wird mit new ein Neues Object erstellt und auf dem
> Heap abgelegt ist das in C# nicht der Fall was macht das new hier,
> erstellt es nur eine neue Instanz ohne neuen Speicher anzufordern. Einen
> schönen Tag noch.
1
command
 ist nach dieser Zeile ein Object vom Typ
1
SendCommand
Das
1
var
überlässt dem Compiler die Wahl, welchen Typ er hier
verwendet. Und ja, es wird Speicher alloziert.

merciless
Gast #6318113
Lesenswert?

Steht doch da, es wird eine neues Objekt erzeugt:
1
  var command = new SendCommand(...)

Und der Konstruktor hat eben zwei Parameter:
1
  var erster = (int)Command.kCore4Speed;
2
  var zweiter = f.ToString();
3

4
  var command = new SendCommand(erster, zweiter);
OP #6318363
Lesenswert?

Dirk K. schrieb:
> Und ja, es wird Speicher alloziert.

Danke wie kann man den freigeben in Pascal wirt mit  object.free
der Speicher wieder freigegeben.
I denke mal das macht C# automatisch als Moderne Sprache.
Die fertige Loop function sieht so aus und
funktioniert tadellos


1
            public void Loop()
2
            {
3
                //CPUMainboard.GetSystemInfo();
4

5
                CPUMainboard_t Temperature;
6
                Temperature = GetSystemInfo();
7
                
8
                var command1 = new SendCommand((int)Command.kCore1Temp, Temperature.TempCore1);
9
                 _cmdMessenger.SendCommand(command1);
10

11
                var command2 = new SendCommand((int)Command.kCore2Temp, Temperature.TempCore2);
12
                _cmdMessenger.SendCommand(command2);
13

14
                var command3 = new SendCommand((int)Command.kCore3Temp, Temperature.TempCore3);
15
                _cmdMessenger.SendCommand(command3);
16

17
                var command4 = new SendCommand((int)Command.kCore4Temp, Temperature.TempCore4);
18
                _cmdMessenger.SendCommand(command4);
19

20
                var command5 = new SendCommand((int)Command.kCore1Clock, Temperature.ClockCore1);
21
                _cmdMessenger.SendCommand(command5);
22

23
                var command6 = new SendCommand((int)Command.kCore2Clock, Temperature.ClockCore2);
24
                _cmdMessenger.SendCommand(command6);
25

26
                var command7 = new SendCommand((int)Command.kCore3Clock, Temperature.ClockCore3);
27
                _cmdMessenger.SendCommand(command7);
28

29
                var command8 = new SendCommand((int)Command.kCore4Clock, Temperature.ClockCore4);
30
                _cmdMessenger.SendCommand(command8);
31

32
                var command9 = new SendCommand((int)Command.kGPUClock, Temperature.ClockGPU);
33
                _cmdMessenger.SendCommand(command9);
34

35
                var command10 = new SendCommand((int)Command.kGPUTemp, Temperature.TempGPU);
36
                _cmdMessenger.SendCommand(command10);
37

38

39
                DateTime LocalDate = DateTime.Now;
40
                DateTime utcDate = DateTime.UtcNow;
41

42

43
                int Month = LocalDate.Month;
44
                int Year = LocalDate.Year;
45
                int Day = LocalDate.Day;
46

47
                int Hour = LocalDate.Hour;
48
                int Min = LocalDate.Minute;
49
                int Sec = LocalDate.Second;
50

51
                string date = String.Format("--> {0}:{1}:{2} {3}.{4}.{5} <--\r", Hour, Min, Sec, Day, Month, Year);
52

53
                Console.Write("Counter : ");
54
                Console.WriteLine(Counter++);
55

56
                var command11 = new SendCommand((int)Command.kGetTime, date);
57
                _cmdMessenger.SendCommand(command11);
58
                               
59
                Thread.Sleep(2500);
60
            }

Und ja Loop wurde in Main definiert


1
 
2
       static void Main(string[] args)
3
        {
4
     Console.WriteLine("Start the application...");
5
           
6
             var receive = new CPUMessenger_t { RunLoop = true};
7
            receive.Setup();
8
            while (receive.RunLoop) receive.Loop();
9
            receive.Exit();
10

11
        }
12
    }
13
}

Konnte sogar ein Admin Manifest hinzufügen wirklich einfach. Muss 
eigentlich um die C# Programme auszuführen auf allen Rechnern Net 
Installiert sein damit die Exe ausführbar ist.

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