Habe ich das so eigentlich richtig verstanden, damit es da keine Verwirrungen meinerseits gibt?
Eine Deklaration ist sowas wie:
string computerName;
Eine Initialisierung ist sowas:
const string emailAdress = "info@example.com"; // Variable unveränderbar
string emailAdress = "info@example.com"; // Variable änderbar
Eine Definition ist sowas wie eine Funktion, also beispielsweise das hier:
public void SendMail() {}
Was mir nicht klar ist: Wann in der Praxis verwendet man public und wann kommt private zum Einsatz und warum macht man nicht alles public? Dann gibt es noch protected, aber das scheint eine Sonderform zu sein, die ich kaum wo sehe, bzw. ich habe nur davon gehört, gesehen noch gar nie.
Bei Funktionen wird wohl immer public genommen. Beim Form_Load oder Button_Click nimmt VS automatisch private.
Bei Funktionen kenne ich nur den Zusatz "void". Gibt es noch andere? Welche und wann werden die in praktischen Fällen verwendet?
IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6
Das ganze nennt sich Zugriffsmodifizierer und gehört zu den Grundlagen von OOP. Zugriffsmodifizierer geben die Möglichkeit, einfach zu steuern, wer wann auf welche Weise auf Klassen, Properties, Events, Felder und Methoden zugreifen darf.
Eine Initialisierung ist sowas:
Deine Beispiele sind Deklaration und Initialisierung in einem.
Richtig wäre:
string email; // Deklaration
email = "abc@def.ghi"; //Initialisierung
Eine Definition ist sowas wie eine Funktion, also beispielsweise das hier
"Definition" ist meines Wissens nach gar nicht genauer belegt, ich würde darunter aber alles verstehen, wo irgendetwas eindeutig "beschrieben" wird, also auch Methoden, Klassen, Variablen, völlig egal was.
"Funktionen" sind in C# aber etwas anderes, was Du gezeigt hast, ist die Definition einer Methode.
Wann in der Praxis verwendet man public und wann kommt private zum Einsatz und
Man überlegt sich, wann man etwas public braucht, alles andere bleibt private.
Das Thema heißt Kapselung - solltest Du dir anschauen, ist ein wichtiger Bestandteil von OOP.
warum macht man nicht alles public?
Zur Sicherheit - Du lässt ja auch nicht jeden dein Geld überweisen, das willst Du schön selbst machen und dabei kontrollieren.
Dann gibt es noch protected, aber das scheint eine Sonderform zu sein
Keine Sonderform, aber nur bei Vererbung relevant.
Sonderformen wären "internal", "private protected" und "protected internal".
Bei Funktionen wird wohl immer public genommen
Natürlich nicht, aber es gibt leider viele, die das machen.
Man sollte sich immer überlegen, was von außen erreichbar sein soll und was nicht.
Ich persönlich versuche immer so wenig wie möglich public zu machen, eben nur das, was ich auch brauche. Dadurch muss ich in den Methoden nicht sicherstellen, dass sie auch gefahrlos von außen benutzt werden können und ich brauche keine Probleme mit anderen Code befürchten, wenn ich sie ändere.
Bei Funktionen kenne ich nur den Zusatz "void"
Völlig anderes Thema.
"void" meint, dass die Methode keinen Rückgabewert hat.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Für Anfänger eine hilfreiche Lektüre:
Visual C# 2012 Rheinwerk Computing Das Klassendesign
... generell das ganze Buch.
Wer Bereit ist, die 50€ auszugeben, kann auch direkt zum Nachfolger (Visual C# 2019) greifen.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Vorallem ließe sich wahrscheinlich der Großteil deiner bisher gestellten Fragen durch die ersten Kapitel bereits lösen 😉
"Definition" ist meines Wissens nach gar nicht genauer belegt, i
"Funktionen" sind in C# aber etwas anderes, was Du gezeigt hast, ist die Definition einer Methode.
Wenn man den Ursprung beachtet und ganz ganz ganz exakt abwiegen will, dann ist eine Deklaration wenn etwas im Speicher reserviert wurde während eine Definition die Speicherinhalt-Zuweisung darstellt.
Letzteres ist also der Initialisierung in gewisser Art und Weise gleichzusetzen. Aber ja, Initialisierung ist hier das weit verbreitete Wort dafür.
Im Alltag ist Deklaration tatsächlich "alles".
string email; // Deklaration -> Speicherreservierung
email = "abc@def.ghi"; // Definition -> Speicherzuweisung
Eine Definition ist sowas wie eine Funktion, also beispielsweise das hier:
Wenn man das Wording streng auslegt, dann ist das keine Funktion (Funktionale Sprache), sondern eine Methode (OOP Sprache).
Einfacher kann man sich das eventuell merken wenn man statische Methoden Functions nennt und Klassen-Methoden eben Methoden; das ist durchaus gängig.
Ansonsten Funktionen in C# sind nochmal was extra, eine Art Syntaxzucker: Lokale Funktionen – C#-Programmierhandbuch
Aber fängst ganz schön spät mit den ganzen Grundlagen an, dafür dass Dir hier jeder seit mehreren Wochen in Deinen Themen sagt, dass Du Dich endlich mit den Grundlagen beschäftigen sollst 🙂
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
... generell das ganze Buch.
Ein Teil der Vorgehensweisen von 2012 ist aber geändert worden, Stichworte (z.B.): NuGet, Einsatz von VS Code, DateTime vs. DateTimeOffset
Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉