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:

// 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;
   }
}

Beispiel

Das folgende Beispiel veranschaulicht die Verwendung von Eigenschaften:

Beispiel

using System;
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

using System;
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 = 10
Weitere Erweiterungen