Autor Beitrag
relic
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 02.02.14 13:52 
Hallo zusammen,
ich bin neu hier und arbeite mich gerade in C# ein. In meinem Buch wird beim Zugriff auf die Klassenvariablen nur das this vorangestellt, wenn im Methodenkopf eine Variable mit gleichen Namen übergeben wurde.
Bevor ich mir hier etwas falsches angewöhne wollte ich mal Nachfragen wie hier in C# die Code Convention ist. In meinem Buch wird darauf nicht eingegangen :(

1. Setzt man immer ein this vor die Klassenvariable wie z.Bsp. in Java?
2. Setzt man das this nur davor wenn eine gleichnamige Variable in der Methode übergeben wurde?


Danke und Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 02.02.14 14:10 
2.tens.

Das man das this zur Unterscheidung braucht sollte dir eigentlich nur regelmäßig in Konstruktoren passieren bei der Zuweisung von Parametern an Klassenvariablen. Der Fall das du eine lokale Variable und eine Klassenvariable gleichen Namens hast gehört als solches schon zu schlechtem Stil. Die Frage nach this oder nicht stellt sich dann schon gar nicht mehr.
relic Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 02.02.14 14:24 
Danke das beantwortet meine Frage.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 02.02.14 19:49 
Wir haben eine entsprechende Namens-Konventionen, wo ein this gar nicht nötig ist.

Properties - Groß geschrieben
Globale Felder - klein geschrieben mit voran gesetztem Unterstrich
Methoden - Groß geschrieben, bezeichnet eine Tätigkeit
Variablen im Methoden (auch Parameter) - klein geschrieben, ohne Unterstrich am Anfang

Allgemein Properties/Felder/Variablen sollten einen Namen haben, der den Inhalt als Objekt beschreibt.
Ist der Typ ein Delegat, dann schreibe ich dennoch eine Tätigkeit, wie bei den Methoden, allerdings nicht groß geschrieben. (Außer bei Properties, da setze ich dann sowas wie "Func" ans Ende)
Events enden immer mit "Event" und sind groß geschrieben, dazu eine passende OnEvent-Methode.


So können wir dann immer anhand des Namens erkennen, was das für eine Variable ist, wo sie liegt und - wenn die Benennung gut ist - wofür sie da ist.
Ein this ist dann gar nicht mehr nötig, da die Parameter immer klein geschrieben sind, während alles Andere entweder groß geschrieben oder mit Unterstrich da steht.
Einzige Stelle, wo man es braucht, ist die Konstruktor-Überladung, wo dann eventuell ein anderer Konstruktor aufgerufen wird.

Manchmal kommt auch so die Argumentation auf: Wenn ich das this für einen Aufruf benötige, habe ich irgendetwas falsch benannt. ^^



PS:

Ein Beispiel, was in meinen Augen sauberer Code ist:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
public class Person
{
    private readonly string _name;
    private readonly DateTime _birthday;

    public string Name
    {
        get { return _name; }
    }
    public DateTime Birthday
    {
        get { return _birthday; }
    }

    public Person(string name, DateTime birthday)
    {
        if (string.IsNullOrEmpty(name))
            throw new ArgumentNullException("name");
        if (CalculateAge(birthday) < 0)
            throw new ArgumentException("Your birthday must be in the past.""birthday");

        _name = name;
        _birthday = birthday;
    }

    public int CalculateAge()
    {
        return CalculateAge(Birthday);
    }

    private int CalculateAge(DateTime birthday)
    {
        var years = DateTime.Now.Year - birthday.Year;
        birthday = birthday.AddYears(years);

        if (DateTime.Now.CompareTo(birthday) < 0)
            years--;

        return years;
    }
}