Laden...

Code Conventionen einer Klasse

Erstellt von Pardasus vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.024 Views
P
Pardasus Themenstarter:in
63 Beiträge seit 2016
vor 6 Jahren
Code Conventionen einer Klasse

Moin,
ich habe mal ein Simples Objekt gebastelt was einfach nur ein Label Blinken lässt in 1 Sek. Takt.
Ich bin nie so wirklich schlau draus geworden, wie man so eine Objekt von Aufbau "richtig" macht. In vielen Beispielen fließt eine Persönliche Note mit ein.
Wie würde man mein kleines Objekt ordentlich Aufbauen und was sollte man mit einem Kommentar versehen und wann ist es überflüssig?
Wo fügt man Leerzeilen ein? Gibt es da eine "regel" oder macht das jeder wie er es für "hübsch" Empfindet?

Ganz nebenbei, würde das Objekt auch noch schlanker gehen?


    public class LableBlinking
    {
        private Label _Label = null;
        private string _Text = string.Empty;
        bool _Show = false;
        System.Timers.Timer timer = new System.Timers.Timer(1000);

        /// <summary>
        /// Lässt ein Label Blinken
        /// </summary>
        /// <param name="label"></param>
        public LableBlinking(Label label)
        {
            _Label = label;
            _Text = label.Text;

            timer.Elapsed += Timer_Elapsed;
        }

        private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if(_Label.InvokeRequired)
            {
                _Label.Invoke(new Action(() => Timer_Elapsed(sender, e)));
            }
            else
            {
                _Label.Text = _Show ? _Text : string.Empty;
                _Show = !_Show;
            }
        }

        // Startet den Timer fürs Blinken.
        public LableBlinking Start()
        {
            timer.Start();
            return this;
        }

        // Beende den Timer fürs Blinken.
        public void Stop()
        {
            timer.Stop();
            _Label.Text = _Text;
        }
    }

16.806 Beiträge seit 2008
vor 6 Jahren

Ich hab mal "Schreibstil" in Code Conventionen geändert; denn genau so nennt sich das.

In C# orientiert man sich an denen von Microsoft.
C# Coding Conventions (C# Programming Guide)

Letzten Endes gibt es hier aber keine absolute Antwort; hatten wir hier auch schon mehrfach im Forum.
Jedes Team muss einen Stil für sich finden.

Es gibt Code, da macht es Sinn Teile zu kommentieren; bei anderen Snippets eher nicht.
Ein Kommentar (und auch noch ein deutsches Kommentar!) wie "Startet den Timer" bei einer Methode mit dem Namen "Start" ist in meinen Augen absolut sinnfrei und würde ich im Rahmen eines Reviews (Pull Request Review) auch ablehnen.
Methoden werden sowieso wenn überhaupt dann direkt über Summaries kommentiert - dafür unterstützt C# das.

Siehe auch
[Artikel] C#: Richtlinien für die Namensvergabe

PS: In JavaScript/TypeScript gibt es https://prettier.io/ was eine sehr hohe Verbreitung und Beliebtheit hat.
In C# gibt es sowas nicht; aber es gibt Tools im Rahmen von Continuous Inspection und "Code Smells" zB. FxCop oder SonarQube.

PPS: bitte verschmisch keine Themen.
Wenns Dir um eine Review geht, dann verwende das Review Forum und separiere die Fragen.
Siehe auch [Hinweis] Wie poste ich richtig? Punkt 1.2
Weitere Beiträge zum Review bitte ich in diesem Thread zu unterlassen.

P
Pardasus Themenstarter:in
63 Beiträge seit 2016
vor 6 Jahren

Vielen Dank für die Hinweise! Jetzt habe ich erst einmal was zu lesen 😉

286 Beiträge seit 2011
vor 6 Jahren

Clean Code Developer

könnte in dem Zusammenhang auch interessant für dich sein.

2+2=5( (für extrem große Werte von 2)

4.931 Beiträge seit 2008
vor 6 Jahren

Hallo,

für die automatische Code-Formattierung kann ich dir auch Code Maid empfehlen (eine VS-Extension).

PS: Sollte die Klasse nicht LabelBlinking heißen?
Und warum gibt die Start-Methode das Klassenobjekt zurück (Stop tut es ja auch nicht)?
Außerdem könntest du die Blinkzeit variabel machen.

T
461 Beiträge seit 2013
vor 6 Jahren

Und warum gibt die Start-Methode das Klassenobjekt zurück (Stop tut es ja auch nicht)?

Das würde mich auch interessieren:



private void dummy()
{
    LableBlinking lb = new LableBlinking(_AnyLabel);
    
    LableBlinking lb2 = ld.Start();

    if(lb.Equals(lb2))
    {
        // Gibt es dafür jemals einen Sinn?
    }

}


Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

F
10.010 Beiträge seit 2004
vor 6 Jahren

Fürs Formatieren kann ich noch AStyle empfehlen.

D
985 Beiträge seit 2014
vor 6 Jahren

Und warum gibt die Start-Methode das Klassenobjekt zurück (Stop tut es ja auch nicht)?

Weil der TE das wohl so verwendet


_blinker = new LableBlinking( label1 ).Start();

und er keinen Bedarf für


_blinker = new LableBlinking( label1 ).Stop();

sieht 😁