Лаба №3. Принцип подстановки. 


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



ЗНАЕТЕ ЛИ ВЫ?

Лаба №3. Принцип подстановки.



 

         
 
   


 


             
 


 


 


 


 
             
 
 

 

 


     
 


 


             


     


Текст программы:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace lab3

{

public class A

{

   public A()

   {

       //Console.WriteLine("Constructor A");

       this.varA = 5;

   }

   ~A() { }

 

   public virtual int F()

   {

       Console.WriteLine("Func class A");

       return this.varA + 30;

   }

 

   protected int varA { get; set; } //атрибут доступа

}

 

public class B: A

{

   public B()

   {

       //Console.WriteLine("Constructor B");

       this.varA = 10;

       this.varB = 100;

   }

   ~B() { }

   //расширяю функцию F, наследуемую классом B из класса А

   public override int F()

   {

       Console.WriteLine("Func of class B");

       return this.varA + 40;

   }

 

 

   public virtual int F1()

   {

       Console.WriteLine("Func of class B");

       return varB + 200;

   }

 

   protected int varB { get; set; }

 

}

 

public class C: A

{

   public C()

   {

       Console.WriteLine("Constructor C");

       this.varA = 15;

       this.varC = 2;

   }

   ~C() { }

   //расширяю функцию F, наследуемую классом C из класса А

   public override int F()

   {

       Console.WriteLine("Func of class C");

       return this.varA + 30;

   }

 

   public virtual int F2()

   {

       Console.WriteLine("Func of class C");

       return (this.varC * this.varA);

   }

 

   protected int varC { get; set; }

}

 

public class J: C

{

   public J()

   {

       Console.WriteLine("Constructor J");

       this.varC = 7;

       this.varJ = 17;

   }

   ~J() { }

   //расширяю функцию F2, наследуемую классом J из класса C

   public override int F2()

   {

       Console.WriteLine("Func of class J");

       return this.varC + 50;

   }

 

   public virtual int F3()

   {

       Console.WriteLine("Func of class J");

       return (this.varC * this.varJ * 2);

   }

 

   protected int varJ { get; set; }

}

 

class D: B

{

   public D()

   {

       Console.WriteLine("Constructor D");

   }

   ~D() { }

   public override int F1()

   {

       Console.WriteLine("Func of class D");

       return this.varB + 100;

   }

   public override int F() { return this.varA; }

}

 

class E: C

{

   public E()

   {

       //Console.WriteLine("Constructor B");

   }

   ~E() { }

   public override int F2()

   {

       Console.WriteLine("Func of class E");

       return (this.varC * this.varA * 2);

   }

}

 

public class K: J

{

   public K()

   {

       //Console.WriteLine("Constructor K");

   }

   ~K() { }

   public override int F3()

   {

       Console.WriteLine("Func of class K");

       return this.varA * this.varJ * this.varC * 6;

   }

}

class Program

{

   static void Main(string[] args)

   {

       Console.WriteLine("Подстановка и расширение функции F класса А:");

       A a1 = new A();

       Console.WriteLine("a1.F() = {0}", a1.F());

       //подстановка.я в класс B подставляю объект класса А. вызовется

       a1 = new B();

       Console.WriteLine("a1.F() = {0}", a1.F());

       //подстановка.

       a1 = new C();

       Console.WriteLine("a1.F() = {0}", a1.F());

       Console.WriteLine();

 

           

       Console.WriteLine("проверка, является ли a1 объектом класса С:");

       //проверка, явл-ся ли a1 объектом класса C

       //какой объект в этой ссылке

       if (a1 is C)

       {

           Console.WriteLine(" a1 объект класса C");

       }

       else Console.WriteLine("а1 не является объектом класса C");

       Console.WriteLine();

       //блок, который потом удалится

       {

           C c = new C(); //локальный объект

           int k = c.F();

           Console.WriteLine(k);

       }

 

       Console.WriteLine("Расширение функции F1 класса B:");

       B b1 = new B();

       Console.WriteLine("b1.F1() = {0}", b1.F1());

       //подстановка объекта b1 в класс D

       b1 = new D();

       Console.WriteLine("b1.F1() = {0}", b1.F1());

       Console.WriteLine();

       Console.WriteLine();

 

       //вызов функции F из класса A в классе D

       Console.WriteLine("b1.F() = {0}", b1.F());

       Console.WriteLine("Расширение функции F2 класса C:");

       C c1 = new C();

       Console.WriteLine("c1.F2() = {0}", c1.F2());

       c1 = new J();

       Console.WriteLine("проверка, является ли c1 объектом класса J:");

       //проверка, явл-ся ли c1 объектом класса J

       //какой объект в этой ссылке

       if (c1 is J)

       {

           Console.WriteLine(" c1 объект класса J");

       }

       else Console.WriteLine("c1 не является объектом класса J");

       Console.WriteLine();

       //блок, который потом удалится

       {

           J j = new J(); //локальный объект

           int p = j.F2();

           Console.WriteLine(p);

       }

 

       //подстановка объекта c1 в класс E

       c1 = new E();

       Console.WriteLine("c1.F2() = {0}", c1.F2());

 

       Console.WriteLine("Расширение функции F3 класса J:");

       J j1 = new J();

       Console.WriteLine("j1.F1() = {0}", j1.F3());

       //подстановка объекта j1 в класс K

       j1 = new K();

       Console.WriteLine("j1.F3() = {0}", j1.F3());

 

       Console.ReadKey();

   }

}

}

 

 

Результат работы программы:


Вывод:
в этой программе используется метод подстановки и метод замещения. принцип подстановки: вместо объекта суперкласса можно подставить объект подкласса. принцип замещения: функцию суперкласса можно заменить функцией подкласса. Ключевое слово virtual используется для изменения объявлений методов, свойств, индексаторов и событий и разрешения их переопределения в производном классе.Например, этот метод может быть переопределен любым наследующим его классом: модификатор override требуется для расширения или изменения абстрактной или виртуальной реализации унаследованного метода, свойства, индексатора или события.



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 126; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.148.107.255 (0.062 с.)