2. • Основы наследования
• Доступ к членам класса и наследование
• Конструкторы и наследование
• Наследование и сокрытие имен
• Создание многоуровневой иерархии
• Виртуальные методы и их переопределение
• Использование ключевого слова sealed для предотвращения
наследования
• Использование абстрактных классов
• Класс object
•
3. • Базовый класс (суперклассом)
• Производный класс (подклассом)
class Triangle : TwoDShape
{
//описание класса Triangle
…
}
5. Как базовые, так и производные классы могут иметь
собственные конструкторы.
1. имя_пр_класса переменная = new имя_пр_класса ()
2.Конструктор_производного_класса(список_параметров)
:base(список_аргументов)
{
// тело конструктора
}
6. Для сокрытия имен используется:
• ключевое слово new
• ключевое слово base
Формат записи: base.член
7. • Например, из трех классов (TwoDShape, Triangle и
ColorTriangle) ColorTriangle может быть производным от
Triangle который, в свою очередь, может быть
производным от TwoDShape.
TwoDShape.
Triangle
ColorTriangle
8. class TwoDShape {
protected double width; // Защищенный член
protected double height; // Защищенный член
public TwoDShape() { width = height = 0.0; } // Конструктор по умолчанию.
public TwoDShape(double w, double h) { width = w; height = h; } /// Конструктор класса TwoDShape.
public TwoDShape(double x) { width = height = x; } // / Конструктор, создающий объекты, у которых ширина равна высоте.
public double Width { get { return width; } set { width = value; } } // Свойства width и height.
public double Height { get { return height; } set { height = value; } }
public string showDim(){ return "Ширина и высота равны: " + width + " и "+height;}
}
// Класс треугольников, производный от класса TwoDShape.
class Triangle : TwoDShape{
protected string style; // Защищенный член.
public Triangle() { style = "null"; } // Конструктор по умолчанию – вызывает конструктор по умолчании класса TwoDShape
public Triangle(string s, double w, double h) : base(w, h) { style = s; }// Конструктор с параметрами.
public Triangle(double x) : base(x) { style = "равнобедренный"; }// Создаем равнобедренный треугольник.
public double area() { return width * height / 2; }// Метод возвращает значение площади треугольника.
public string showStyle() { return "Треугольник: " + style; } // Метод отображает тип треугольника.
}
class ColorTriangle : Triangle {
string color;
public ColorTriangle(string c, string s, double w, double h) : base(s, w, h) { color = c; }
// Метод отображает цвет треугольника.
public string showColor() { return "Цвет: " + color; }
}
9. • Чтобы объявить метод в базовом классе виртуальным, его
объявление необходимо предварить ключевым словом
virtual.
• При переопределении виртуального метода в производном
классе используется модификатор override.
// Создаем виртуальный метод в базовом классе.
public virtual void Show() {
Console.WriteLine("Метод Show() в классе Base.");
}
10. Абстрактный класс создается с помощью модификатора типа
abstract
abstract class имя класса
{
// Защищенный члены
// Конструктор по умолчанию.
// Конструктор с параметрами.
// Обычные методы
// абстрактные методы
}
• Для объявления абстрактного метода используйте следующий
формат записи.
abstract тип имя(список_параметров);
11. abstract class TWODShape {
protected double width; // Защищенный член
protected double height; // Защищенный член
protected string name; // Защищенный член
public TWODShape() { width = height = 0.0; name = "null"; } // Конструктор по умолчанию
public TWODShape(double w, double h, string n) { width = w; height = h; name = n; } // Конструктор с
параметрами.
public TWODShape(double w, double h, string n) { width = w; height = h; name = n; }
public TWODShape(double x, string n) { width = height = x; name = n; } // Создаем объект, у которого ширина
равна высоте.
public TWODShape(TWODShape ob) { // Создаем объект из объекта.
width = ob.width; height = ob.height; name = ob.name;
} // Свойства width, height и name.
public double Width { get { return width; } set { width = value; } }
public double Height { get { return height; } set { height = value; } }
public string Name { get { return name; } set { name = value; } }
public string showDim() { return "Ширина и высота равны "+width + " и " + height; }
// Теперь методы area() и showStyle() абстрактные
public abstract double area();
public abstract string showStyle();
12. } // Класс треугольников, производный от класса TwoDShape.
class TriAngle : TWODShape {
protected string style; // Защищенный член
public TriAngle() { style = "null"; } // Конструктор по умолчанию.
. public TriAngle(string s, double w, double h) : base(w, h, "треугольник") { style = s; } //Конструктор с
параметрами
public TriAngle(double x) : base(x, "треугольник") { style = "равнобедренный"; } // Создаем равнобедренный
треугольник
public TriAngle(TriAngle ob) : base(ob) { style = ob.style; } // Создаем объект из объекта.
public override double area() { return width * height / 2; } Переопределяем метод area() для класса Triangle.
public override string showStyle() { return "Треугольник " + style; } // Отображаем тип треугольника.
}
// Класс прямоугольников, производный от класса TwoDShape.
class Rectangle : TWODShape {
public Rectangle(double w, double h) : base(w, h, "прямоугольник") { } // Конструктор с параметрами
public Rectangle(double x) : base(x, "прямоугольник") { } // Создаем квадрат.
public Rectangle(Rectangle ob) : base(ob) { } // Создаем объект из объекта.
public bool isSquare() { if (width == height) return true; return false; } // Метод возвращает значение true, если
прямоугольник является квадратом.
public override double area() { return width * height; } // Переопределяем метод area() для класса Rectangle
public override string showStyle() { return ""; }
}
14. public static bool
• Определяет, является ли объект оb1
Equals(object ob1, таким же, как объект оb2
object ob2)
protected object • Выполняет "поверхностное
копирование" объекта, т.е. копируются
MemberwiseClone( члены, но не объекты, на которые
) ссылаются эти члены
public Type • Получает тип объекта во время
GetType() выполнения программы