Когато връзката между два класа е композиция, класът, който логически е част от друг клас, е удобно да бъде деклариран като вътрешен клас.
Следователно, ако декларираме класа за кола Car, ще е подходящо да си създадем като вътрешен клас Engine, който ще отразява съответно концепцията за двигател на колата:
Car.cs
|
class Car
{
Door FrontRightDoor;
Door FrontLeftDoor;
Door RearRightDoor;
Door RearLeftDoor;
Engine engine;
public Car()
{
engine = new Engine();
engine.horsePower = 2000;
}
public class Engine
{
public int horsePower;
}
}
|
Декларация на изброен тип в клас
Преди да преминем към следващата тема за шаблонните типове (generics), трябва да отбележим, че понякога изброените типове се налага и могат да бъдат декларирани в рамките на даден клас с оглед на по-добрата капсулация на класа.
Например, изброеният тип CoffeeSize, който създадохме в предходната секция може да бъде деклариран вътре в тялото на класа Coffee, като по този начин се подобрява капсулацията:
Coffee.cs
|
class Coffee
{
// Enumeration
public static enum CoffeeSize
{
Small = 100, Normal = 150, Double = 300
}
// Instance variable
private CoffeeSize size;
public Coffee(CoffeeSize size)
{
this.size = size;
}
public CoffeeSize Size
{
get { return size; }
}
}
|
Съответно, методът за изчисляване на цената на едно кафе ще претърпи лека модификация:
public double CalcPrice(Coffee.CoffeeSize coffeeSize)
{
switch (coffeeSize)
{
case Coffee.CoffeeSize.Small:
return 0.20;
case Coffee.CoffeeSize.Normal:
return 0.40;
case Coffee.CoffeeSize.Double:
return 0.60;
default:
throw new InvalidOperationException(
"Unsupported coffee quantity: " + ((int)coffeeSize));
}
}
|
Шаблонни типове и типизиране (generics)
В тази секция ще обясним концепцията за типизиране на класове. Преди да започнем, обаче, нека разгледаме един пример, който ще ни помогне за разберем по-лесно идеята.
Приют за бездомни животни – пример
Нека имаме два класа. Нека класът Dog описва куче:
Сподели с приятели: |