Laden...

Wie kann ich ein unveränderbares Property in einer C# Klasse erstellen?

Erstellt von Michael1995 vor 3 Jahren Letzter Beitrag vor 3 Jahren 668 Views
M
Michael1995 Themenstarter:in
22 Beiträge seit 2020
vor 3 Jahren
Wie kann ich ein unveränderbares Property in einer C# Klasse erstellen?

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 ?

2.079 Beiträge seit 2012
vor 3 Jahren

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.

M
Michael1995 Themenstarter:in
22 Beiträge seit 2020
vor 3 Jahren

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.

2.079 Beiträge seit 2012
vor 3 Jahren

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.

[FAQ] Wie finde ich den Einstieg in C#?

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.

M
Michael1995 Themenstarter:in
22 Beiträge seit 2020
vor 3 Jahren

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.

Hinweis von Abt vor 3 Jahren

Keine Full Quotes
[Hinweis] Wie poste ich richtig?