C# Eigenschaft
Eigenschaften in C# sind Member von Klassen und Strukturen, die zum Kapseln von Daten verwendet werden. Sie bieten eine Möglichkeit, Zugriffs- und Zuweisungsregeln für Klassenmember zu definieren, die typischerweise verwendet werden, um die interne Implementierung von Feldern auszublenden und gleichzeitig einen Mechanismus zur Steuerung des Datenzugriffs bereitzustellen.
Eine Eigenschaft kann als Wrapper um ein Feld betrachtet werden, der normalerweise aus get- und set-Accessoren besteht.
Eigenschaften bestimmen keine Speicherorte. Stattdessen verfügen sie über Accessoren, die ihre Werte lesen, schreiben oder berechnen können.Accessoren。
Beispielsweise gibt es eine Klasse namens Student mit den privaten Feldern age, name und code. Außerhalb der Klasse können wir nicht direkt auf diese Felder zugreifen, aber wir können Eigenschaften haben, die auf diese privaten Felder zugreifen.
Grundlegende Syntax
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
Im obigen Code,NameEigenschaften kapseln private Felder.name。getEin Accessor wird verwendet, um den Wert eines Feldes abzurufen, währendsetein Accessor verwendet wird, um den Wert eines Feldes zu setzen.
Auto-implementierte Eigenschaften
Wenn Sie nur eine einfache Eigenschaft benötigen, können Sie in C# auto-implementierte Eigenschaften verwenden, sodass Sie kein Feld explizit definieren müssen.
public class Person
{
public string Name { get; set; }
}In diesem Fall generiert der Compiler automatisch ein privates anonymes Feld für die Eigenschaft Name, um den Wert zu speichern.
Schreibgeschützte Eigenschaft
Wenn Sie nur eine schreibgeschützte Eigenschaft benötigen, können Sie den set-Accessor weglassen.
public class Person
{
public string Name { get; }
public Person(string name)
{
Name = name;
}
}
Nur-Schreib-Eigenschaft
Wenn Sie nur eine Eigenschaft zum Schreiben benötigen, können Sie den get-Accessor weglassen.
public class Person
{
private string name;
public string Name
{
set { name = value; }
}
}Benutzerdefinierte Logik
Sie können benutzerdefinierte Logik in die get- und set-Accessoren aufnehmen.
public class Person
{
private string name;
public string Name
{
get { return name; }
set
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentException("Name cannot be empty.");
name = value;
}
}
}Berechnete Eigenschaft
Eigenschaften können auch berechnet werden und hängen nicht von Feldern ab.
public class Rectangle
{
public int Width { get; set; }
public int Height { get; set; }
public int Area
{
get { return Width * Height; }
}
}
Accessoren
der EigenschaftAccessorAccessoren enthalten ausführbare Anweisungen, die dabei helfen, die Eigenschaft abzurufen (zu lesen oder zu berechnen) oder festzulegen (zu schreiben). Eine Accessor-Deklaration kann einen get-Accessor, einen set-Accessor oder beide enthalten. Zum Beispiel:
public string Code
{
get
{
return code;
}
set
{
code = value;
}
}
// Deklariert die Name-Eigenschaft vom Typ string
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
// Deklariere eine Age-Eigenschaft vom Typ int
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
Beispiel
Das folgende Beispiel veranschaulicht die Verwendung von Eigenschaften:
Beispiel
namespace example
{
class Student
{
private string code = "N.A";
private string name = "not known";
private int age = 0;
// Deklariert die Code-Eigenschaft vom Typ string
public string Code
{
get
{
return code;
}
set
{
code = value;
}
}
// Deklariert die Name-Eigenschaft vom Typ string
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
// Deklariere eine Age-Eigenschaft vom Typ int
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
public override string ToString()
{
return "Code = " + Code +", Name = " + Name + ", Age = " + Alter;
}
}
class ExampleDemo
{
public static void Main()
{
// Erstelle ein neues Student-Objekt
Student s = new Student();
// Code, Namen und Alter des Studenten festlegen
s.Code = "001";
s.Name = "Zara";
s.Alter = 9;
Console.WriteLine("Studenteninfo: {0}", s);
// Alter erhöhen
s.Alter += 1;
Console.WriteLine("Studenteninfo: {0}", s);
Console.ReadKey();
}
}
}
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
Student Info: Code = 001, Name = Zara, Age = 9 Student Info: Code = 001, Name = Zara, Age = 10
Abstrakte Eigenschaften
Abstrakte Klassen können abstrakte Eigenschaften haben, die in abgeleiteten Klassen implementiert werden sollten. Das folgende Programm veranschaulicht dies:
Beispiel
namespace Example
{
public abstract class Person
{
public abstract string Name { get; set; }
public abstract int Age { get; set; }
}
class Student : Person
{
// Deklariere eine automatisch implementierte Eigenschaft
public string Code { get; set; } = "N.A";
public override string Name { get; set; } = "N.A";
public override int Age { get; set; } = 0;
public override string ToString()
{
return $"Code = {Code}, Name = {Name}, Age = {Age}";
}
}
class ExampleDemo
{
public static void Main()
{
// Erstelle ein neues Student-Objekt
Student s = new Student
{
Code = "001",
Name = "Zara",
Alter = 9
};
Console.WriteLine("Studenteninfo:- {0}", s);
// Alter erhöhen
s.Alter += 1;
Console.WriteLine("Studenteninfo:- {0}", s);
Console.ReadKey();
}
}
}
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
Student Info: Code = 001, Name = Zara, Age = 9 Student Info: Code = 001, Name = Zara, Age = 10Weitere Erweiterungen