Feld vs. Eigenschaft in C#
Dieses Tutorial erklärt den Unterschied zwischen Feldern und Eigenschaften in Klassen in C#. Um dies besser zu veranschaulichen, müssen Sie zunächst die folgenden Konzepte kennen.
Was ist eine Klasse?
Eine Klasse ist eine Sammlung von Datenmembern, mit der Sie Ihre benutzerdefinierten Typen erstellen können, indem Sie als Blaupause oder Vorlage für Ihre Objekte fungieren. Innerhalb einer Klasse ähneln sich Felder und Eigenschaften dahingehend, dass sie Daten speichern können, der Unterschied besteht jedoch darin, wie sie verwendet werden sollen.
Was ist ein Feld?
Ein Feld
speichert die Daten als Variable. Es kann öffentlich gemacht und dann über die Klasse aufgerufen werden, aber es empfiehlt sich, so viele Daten wie möglich einzuschränken und zu verbergen. Dies gibt Ihnen mehr Kontrolle und vermeidet unerwartete Fehler, indem sichergestellt wird, dass eine Person nur über eine der öffentlichen Methoden der Klasse auf die Daten zugreifen kann.
Was ist eine Eigenschaft?
Eine Eigenschaft macht Felder verfügbar. Die direkte Verwendung der Eigenschaften anstelle der Felder bietet eine Abstraktionsebene, auf der Sie die Felder ändern können, ohne die externe Art des Zugriffs durch die Objekte, die Ihre Klasse verwenden, auf sie zu beeinflussen. Mit Eigenschaften können Sie auch Berechnungen durchführen, bevor Sie den Wert des Felds festlegen oder gültige Daten sicherstellen.
Beispiel:
using System;
namespace FieldProperty_Sample {
class Program {
static void Main(string[] args) {
// Initialize a new Tutorial_Class
Tutorial_Class tutorial = new Tutorial_Class();
// Set the field values through its public property
tutorial.Name = "Sample Tutorial";
tutorial.Created_Date = new DateTime(2021, 12, 31);
tutorial.Description = "Sample Description";
// Print the class values to the console
Console.WriteLine("Tutorial Name: " + tutorial.Name);
Console.WriteLine("Created Date: " + tutorial.Created_Date.ToShortDateString());
Console.WriteLine("Sample Description: " + tutorial.Description);
Console.ReadLine();
}
public class Tutorial_Class {
// These are the private fields that are only accessible by the class
// The actual data is stored here and can be retrieved/set by the properties
private string name;
private DateTime created_date;
// All of the items below are properties that have the power to get and set the field values
public string Name {
get { return name; }
set { name = value; }
}
public DateTime Created_Date {
get { return created_date; }
set { created_date = value; }
}
// This is another kind of property, an AutoProperty
// It acts the same as the original property but does not require you to declare the private
// field The private field is automatically generated for you
public string Description { get; set; }
}
}
}
Im obigen Beispiel haben wir eine Beispielklasse, die Felder, Eigenschaften und AutoProperties verwendet. Nachdem wir eine Instanz von Tutorial_Class initialisiert haben, legen wir die Werte mithilfe der öffentlichen Eigenschaften der Klasse fest. Sie können feststellen, dass Sie beim Versuch, direkt auf die Felder zuzugreifen, eine Fehlermeldung erhalten: Program.Tutorial_Class.x is inaccessible due to its protection level
. Schließlich geben wir die Werte an die Konsole aus, um zu zeigen, dass die Änderungen vorgenommen wurden.
Ausgabe:
Tutorial Name: Sample Tutorial
Created Date: 31/12/2021
Sample Description: Sample Description