Laden...

Deklaration, Definition, Initialisierung, Public, Private, Protected, Void

Erstellt von LittleTester vor 2 Jahren Letzter Beitrag vor 2 Jahren 591 Views
L
LittleTester Themenstarter:in
158 Beiträge seit 2019
vor 2 Jahren
Deklaration, Definition, Initialisierung, Public, Private, Protected, Void

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

H
523 Beiträge seit 2008
vor 2 Jahren

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.

https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers

2.079 Beiträge seit 2012
vor 2 Jahren

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.

190 Beiträge seit 2012
vor 2 Jahren

Für Anfänger eine hilfreiche Lektüre:
Visual C# 2012 Rheinwerk Computing Das Klassendesign

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

2.079 Beiträge seit 2012
vor 2 Jahren

... 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.

309 Beiträge seit 2020
vor 2 Jahren

Vorallem ließe sich wahrscheinlich der Großteil deiner bisher gestellten Fragen durch die ersten Kapitel bereits lösen 😉

16.834 Beiträge seit 2008
vor 2 Jahren

"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 🙂

M
368 Beiträge seit 2006
vor 2 Jahren

... 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 😉