Eigenschaften


In diesem Lernprogramm wird erörtert, warum Eigenschaften ein wesentlicher Bestandteil der C#-Programmiersprache sind. Es wird veranschaulicht, wie Eigenschaften deklariert und verwendet werden.

Beispieldateien

Wie Sie die in diesem Lernprogramm behandelten Beispieldateien downloaden und Builds davon erstellen, erfahren Sie unter Beispiel für Eigenschaften.

Weitere Themen

Lernprogramm

Dieses Lernprogramm umfasst zwei Beispiele. Im ersten Beispiel wird erläutert, wie Sie Eigenschaften mit Lese-/Schreibzugriff deklarieren und verwenden. Im zweiten Beispiel werden abstrakte Eigenschaften behandelt, und Sie erfahren, wie diese Eigenschaften in Unterklassen überschrieben werden.

Beispiel 1

Dieses Beispiel enthält eine Person-Klasse mit zwei Eigenschaften: Name (string) und Age (int). Beide Eigenschaften unterstützen Lese-/Schreibzugriffe.

// person.cs
using System;
class Person
{
    private string myName ="N/A"; //not available
    private int myAge = 0;

    // Declare a Name property of type string:
    public string Name
    {
        get    {           return myName;         }
        set    {           myName = value;        }
    }

    // Declare an Age property of type int:
    public int Age
    {
        get         {            return myAge;         }
        set         {            myAge = value;        }
    }

    public override string ToString()
    {
        return "Name = " + Name + ", Age = " + Age;
    }

    public static void Main()
    {
        Console.WriteLine("Simple Properties");
        Person person = new Person();
        Console.WriteLine("Person details - {0}", person);
        person.Name = "Joe";
        person.Age = 99;
        Console.WriteLine("Person details - {0}", person);
        person.Age += 1;
        Console.WriteLine("Person details - {0}", person);
    }
}

Ausgabe

Simple Properties
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100

Codeerläuterung

Beispiel 2

Im folgenden Beispiel wird die Definition abstrakter Eigenschaften erläutert: Eine abstrakte Eigenschaftendeklaration stellt keine Implementierung für die Eigenschaftenaccessoren bereit. Das Beispiel veranschaulicht, wie diese Eigenschaften in Unterklassen überschrieben werden.

Dieses Beispiel besteht aus drei Dateien. In diesem Lernprogramm wird jede Datei einzeln kompiliert, und von der nächsten Kompilierung wird auf die resultierende Assembly verwiesen:

Sie kompilieren das Beispiel mit folgender Befehlszeile:

csc abstractshape.cs shapes.cs shapetest.cs

Dadurch wird die ausführbare Datei shapetest.exe erstellt.



Datei1 - abstractshape.cs

Durch diese Datei wird die Shape-Klasse deklariert, die die Area-Eigenschaft vom Typ double enthält.

// abstractshape.cs
// compile with: /target:library
// csc /target:library abstractshape.cs
using System;

public abstract class Shape
{
   private string myId;

   public Shape(string s)
   {
      Id = s;   // calling the set accessor of the Id property
   }

   public string Id
   {
      get       {         return myId;      }
      set       {         myId = value;     }
   }

   // Area is a read-only property - only a get accessor is needed:
   public abstract double Area
   {
      get;
   }

   public override string ToString()
   {
      return Id + " Area = " + string.Format("{0:F2}",Area);
   }
}

Codeerläuterung



Datei 2 - shapes.cs

Im folgenden Code sind drei Unterklassen von Shape enthalten, durch die die Area-Eigenschaft überschrieben wird, um ihre eigenen Implementierungen bereitzustellen.

// shapes.cs
// compile with: /target:library /reference:abstractshape.dll
public class Square : Shape
{
   private int mySide;

   public Square(int side, string id) : base(id)
   {      mySide = side;   }

   public override double Area
   {  
          get      {         return mySide * mySide;      }   
   }
}

public class Circle : Shape
{  private int myRadius;
   public Circle(int radius, string id) : base(id)
   {            myRadius = radius;      }
   public override double Area
   {
      get    {     return myRadius * myRadius * System.Math.PI;      }
   }
}

public class Rectangle : Shape
{
   private int myWidth;
   private int myHeight;

   public Rectangle(int width, int height, string id) : base(id)
   {
      myWidth  = width;      myHeight = height;
   }

   public override double Area
   {
      get     {          return myWidth * myHeight;      }
   }
}



Datei 3 - shapetest.cs

Der folgende Code stellt ein Testprogramm dar, das einige von Shape abgeleitete Objekte erstellt und ihre Bereiche ausgibt.

// shapetest.cs
// compile with: /reference:abstractshape.dll;shapes.dll
public class TestClass
{
   public static void Main()
   {
      Shape[] shapes =
         {
            new Square(5, "Square #1"),
            new Circle(3, "Circle #1"),
            new Rectangle( 4, 5, "Rectangle #1")
         };
      
      System.Console.WriteLine("Shapes Collection");
      foreach(Shape s in shapes)
      {
         System.Console.WriteLine(s);
      }
         
   }
}

Ausgabe

Shapes Collection
Square #1 Area = 25.00
Circle #1 Area = 28.27
Rectangle #1 Area = 20.00