Множественное наследование в С# не поддерживается.



 

Производный класс наследует все элементы базового класса –  как переменные, так и методы.

Производный класс может определить член, имя которого совпадает с именем члена базового класса. В этом случае член базового класса становится скрытым в производном классе. Чтобы скрыть член базового класса перед членом производного класса необходимо поставить ключевое слово 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!