Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az alábbi példa bemutatja, hogyan definiálhat absztrakt tulajdonságokat. Az absztrakt tulajdonságdeklaráció nem biztosítja a tulajdonság tartozékainak implementálását – deklarálja, hogy az osztály támogatja a tulajdonságokat, de a kiegészítő implementációt származtatott osztályokra hagyja. Az alábbi példa bemutatja, hogyan valósítható meg az alaposztálytól örökölt absztrakt tulajdonságok.
Ez a minta három fájlból áll, amelyek mindegyike külön-külön van lefordítva, és az eredményül kapott összeállításra a következő fordítás hivatkozik.
abstractshape.cs: az
Shape
absztraktArea
tulajdonságot tartalmazó osztály.shapes.cs: A
Shape
osztály alosztályai.shapetest.cs: Tesztprogram egyes
Shape
származtatott objektumok területeinek megjelenítésére.
A példa fordításához használja a következő parancsot:
csc abstractshape.cs shapes.cs shapetest.cs
Ezzel létrehozza a végrehajtható fájlt shapetest.exe.
Példák
Ez a fájl deklarálja a Shape
típus double
tulajdonságát tartalmazó Area
osztályt.
// compile with: csc -target:library abstractshape.cs
public abstract class Shape
{
public Shape(string s)
{
// calling the set accessor of the Id property.
Id = s;
}
public string Id { get; set; }
// Area is a read-only property - only a get accessor is needed:
public abstract double Area
{
get;
}
public override string ToString()
{
return $"{Id} Area = {Area:F2}";
}
}
A tulajdonság módosítói közvetlenül a tulajdonságdeklaráción helyezkednek el. Például:
public abstract double Area
Absztrakt tulajdonság deklarálásakor (például
Area
ebben a példában) egyszerűen meg kell adnia, hogy milyen tulajdonságkiegészítők érhetők el, de nem implementálhatja őket. Ebben a példában csak egy get hozzáférő érhető el, így a tulajdonság csak olvasható.
Az alábbi kód három Shape
alosztályt mutat be, és hogy hogyan bírálják felül a Area
tulajdonságot saját megvalósítás biztosítása érdekében.
// compile with: csc -target:library -reference:abstractshape.dll shapes.cs
public class Square : Shape
{
private int _side;
public Square(int side, string id)
: base(id)
{
_side = side;
}
public override double Area
{
get
{
// Given the side, return the area of a square:
return _side * _side;
}
}
}
public class Circle : Shape
{
private int _radius;
public Circle(int radius, string id)
: base(id)
{
_radius = radius;
}
public override double Area
{
get
{
// Given the radius, return the area of a circle:
return _radius * _radius * Math.PI;
}
}
}
public class Rectangle : Shape
{
private int _width;
private int _height;
public Rectangle(int width, int height, string id)
: base(id)
{
_width = width;
_height = height;
}
public override double Area
{
get
{
// Given the width and height, return the area of a rectangle:
return _width * _height;
}
}
}
Az alábbi kód egy tesztprogramot mutat be, amely számos Shape
származtatott objektumot hoz létre, és kinyomtatja a területeiket.
// compile with: csc -reference:abstractshape.dll;shapes.dll shapetest.cs
class TestClass
{
static void Main()
{
Shape[] shapes =
[
new Square(5, "Square #1"),
new Circle(3, "Circle #1"),
new Rectangle( 4, 5, "Rectangle #1")
];
Console.WriteLine("Shapes Collection");
foreach (Shape s in shapes)
{
Console.WriteLine(s);
}
}
}
/* Output:
Shapes Collection
Square #1 Area = 25.00
Circle #1 Area = 28.27
Rectangle #1 Area = 20.00
*/