Множественное наследование в С# не поддерживается.
Производный класс наследует все элементы базового класса – как переменные, так и методы.
Производный класс может определить член, имя которого совпадает с именем члена базового класса. В этом случае член базового класса становится скрытым в производном классе. Чтобы скрыть член базового класса перед членом производного класса необходимо поставить ключевое слово new.
Пример. Из Г.Шилд, Полный справочник по C#, стр. 291.
// Пример сокрытия имени в связи с наследованием.
using System;
class A
{
public int i = 0;
}
// Создаем производный класс,
class В : А
{
new int i; // Этот член i скрывает член i класса А.
public В(int b)
{
i = b; // Член i в классе В.
}
public В(int a, int b)
{
base.i = а; // Так можно обратиться к i класса А.
i = b; // Переменная i в классе В.
}
public void show()
{
base.show(); // Вызов метода show() класса А.
Console.WriteLine("Член i в производном классе: " + i);
}
}
class NameHiding
{
public static void Main()
{
В ob = new В(1,2);
ob.show();
}
}
Пример. Из FunctionX.
Файл Circle.cs
using System;
namespace ExampleOne
{
public class Circle
{
private double _radius;
public double Radius
{
get
{
if( _radius < 0 )
return 0.00;
else
return _radius;
}
set
{
_radius = value;
}
}
public double Diameter
{
get
{
return Radius * 2;
}
}
public double Circumference
{
get
|
|
{
return Diameter * 3.14159;
}
}
public double Area
{
Get
{
return Radius * Radius * 3.14159;
}
}
public void ShowCharacteristics()
{
Console.WriteLine("Характеристики Circle");
Console.WriteLine("Радиус: {0}", Radius);
Console.WriteLine("Диаметр: {0}", Diameter);
Console.WriteLine("Длина окружности: {0}", Circumference);
Console.WriteLine("Площадь: {0}", Area);
}
}
}
Файл Sphere.cs
using System;
namespace ExampleOne
{
public class Sphere : Circle
{
new public double Area
{
get { return 4 * Radius * Radius * 3.14159; }
}
public double Volume
{
get {
return 4 * 3.14159 * Radius * Radius * Radius / 3; }
}
public void ShowCharacteristics()
{
// Поскольку Sphere происходит от Circle, доступны
// все public данные Circle
Console.WriteLine("\n Характеристики Sphere");
Console.WriteLine("Радиус: {0}", Radius);
Console.WriteLine("Диаметр: {0}", Diameter);
Console.WriteLine("Длина окружности: {0}", Circumference);
Console.WriteLine("Площадь: {0}\n", Area);
Console.WriteLine("Объем: {0}\n", Volume);
}
}
}
Файл Class1.cs (с точкой входа)
using System;
namespace ExampleOne
|
|
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Circle c = new Circle();
c.Radius = 25.55;
c.ShowCharacteristics();
Sphere s = new Sphere();
s.Radius = 25.55;
s.ShowCharacteristics();
}
}
}
Сокрытие имени свойства в производном классе (в классе Sphere)
new public double Area
{
get { return 4 * Radius * Radius * 3.14159; }
}
Если у базового класса есть открытый конструктор, используемый по умолчанию, производный конструктор не обязан явно вызывать конструктор своего базового класса – по умолчанию конструктор будет вызван неявно. Однако если базовый класс не имеет конструктора, используемого по умолчанию, каждый производный конструктор обязан явно вызывать один из конструкторов базового класса с помощью ключевого слова base:
public class Circle
{
private double _radius;
public Circle(){}
public Circle(double r){_radius=r;}
. . .
}
public class Sphere : Circle
{
public Sphere():base(){}
public Sphere(double r):base(r){}
…
}
static void Main(string[] args)
{
Circle c = new Circle();
c.Radius = 25.55;
c.ShowCharacteristics();
Sphere s = new Sphere(25.5);
//s.Radius = 25.55;
s.ShowCharacteristics();
}
|
|
Для вызова метода базового класса используется синтаксис:
Base .Имя_Метода().
Еще пример.
Public class Employee
{ protected string fullName;
protected int empID;
protected float currPay;
protected string ssn;
public Employee(){}
Public Employee(string FullName, int empID,
Float currPay, string ssn)
{ код }
Дата добавления: 2020-04-08; просмотров: 102; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!