Guten Abend zusammen,
bitte um Hilfe hier bei dieser doch einfachen Frage.
Da ich gerade die Basics von C# lerne, bin ich hier ned ganz sicher, bzw. komme ned ganz weiter. In Java ist es so, dass mit dem Schlüsselwort "final" eine Eigenschaft einer Klasse unveränderbar gemacht werden kann, sprich eine Konstante.
Ich will jetzt in C# Folgendes machen:
class Character {
//Attribut
public const string Name { get; }
set habe ich natürlich weggelassen, da der Wert ja unveränderlich sein soll.
bei get wird angezeigt: "get ist im aktuellen Kontext nicht vorhanden"
Das ganze initialisiere ich dann weiter unten mit einem Konstruktor, sprich der Wert Name wird zugewiesen.
Könnt ihr hier kurz helfen? danke
edit: was mir jetzt grad auffällt, ist es möglich das "const" wegzulassen, denn wenn kein set dabei steht, es dann eh quasi nur einmal über Initialisierungskonstruktor zuweisbar ?
ist es möglich das "const" wegzulassen, denn wenn kein set dabei steht, es dann eh quasi nur einmal über Initialisierungskonstruktor zuweisbar ?
Wie kommst Du überhaupt darauf, "const" gehört dahin? 😄
Das gehört da nie hin.
Wenn Du von Java kommst, solltest Du dir erst einmal anlesen, was Properties überhaupt sind, denn die gibt es in Java nicht und sie haben so ziemlich nichts mit den üblichen Klassen-Variablen gemeinsam, eher mit Methoden.
Aber wenn es um unveränderliche Daten geht, ist die Property ohne Setter schon mal der richtige Weg - außer es soll private sein, dann finde ich das etwas unnötig.
Unveränderliche Werte sind mit zwei Varianten möglich:
private const string ConstName = "Michael";
private readonly string _readonlyName;
public MyClass()
{
_readonlyName = "Michael";
}
Die Konstante ist wirklich konstant und das ändert sich auch nie, man kann sie nur im Quellcode (naja, fast) ändern.
readonly ist ist vermutlich das, was Du suchst bzw. von Java kennst.
Und dann gibt's noch der Weg mit der Property. Der ist nicht ganz identisch, da der Compiler eigentlich erst die readonly Variable generiert, aber im Endeffekt dürfte es zu dem gleichen Verhalten führen.
Für alles was public (und mMn. auch protected) ist, solltest Du Properties nutzen. Bei private greift man normalerweise auf normale Variablen zurück.
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.
ok danke;)
ja bei Java, private final String name;
da steht auch das final mit drinnen, deshalb kam ich auf das const 😉
aber ok das reicht dann erstmal ;9
danke.
Java:
private final String name;
Das Äquivalent in C#:
private readonly String name;
Aber Du solltest dir die Grundlagen besser nicht mit Trial&Error aneignen, das funktioniert zwar, aber viele Konzepte unterscheiden sich voneinander, sodass Du Gefahr läufst, dir unnötig Steine in den Weg zu legen.
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.
jep sehr gut, werde das OnlineBook mal durchgehen 😉
die grundsätzlichen Dinge zu OOP sind mir bewusst, aber ich denke schadet nicht nochmal drüber zu gehen und gleich die C#-Syntax zu lernen.
Keine Full Quotes
[Hinweis] Wie poste ich richtig?