Latest web development tutorials

Polimorfizm C #

Polimorfizm oznacza, że istnieje wiele postaci.W programowania obiektowego paradygmatu, polimorfizm jest często wyrażana jako "jeden interfejs, wiele funkcji."

Polimorfizm może być statyczne lub dynamiczne.Statyczny polimorfizm w funkcji reakcji zachodzi w czasie kompilacji.Wpolimorfizm dynamiczny, funkcja odpowiedzi występuje w czasie wykonywania.

polimorfizm statyczny

W czasie kompilacji, funkcje i przedmioty mechanizm połączenia nazywana początku wiązania, znany również jako statyczne wiązania. C # oferuje dwie techniki do realizacji polimorfizmu statycznej. Są to:

  • przeciążanie funkcji
  • operator Przeciążenie

Operator przeciążenie omówi w następnym rozdziale omówimy funkcji następujące przeciążeniu.

przeciążanie funkcji

Można być w tym samym zakresie dla tej samej nazwy funkcji ma wiele definicji. Zdefiniowane funkcje muszą być różne od siebie mogą być lista parametrów typów parametrów, może być również wiele różnych parametrów. Nie może być przeciążony tylko typ zwracany deklaracji funkcji.

Poniższy przykład ilustruje kilka tego samegodruku function (),do drukowania różnych typów danych:

using System;
nazw PolymorphismApplication
{
   Klasa Printdata
   {
      void print (int i)
      {
         Console.WriteLine ( "int Druk: {0}", i);
      }

      void print (podwójne f)
      {
         Console.WriteLine ( "pływać Druk: {0}", f);
      }

      void print (string s)
      {
         Console.WriteLine ( "string Druk: {0}", s);
      }
      static void Main (string [] args)
      {
         Printdata p = new Printdata ();
         // Wywołanie drukiem, aby wydrukować p.print Integer (5);
         // Wywołanie Drukuj, aby wydrukować pływaka p.print (500.263);
         // Wywołanie drukować na p.print print String ( "Hello C ++");
         Console.ReadKey ();
      }
   }
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Druk int: 5
Druk pływaka: 500,263
Druk ciąg: Witam C ++

polimorfizm dynamiczny

C # pozwala na użycieabstrakcyjne słowo kluczowe aby utworzyć klasą abstrakcyjną, implementacja interfejsu przewiduje część klasy.Gdy klasa pochodna dziedziczy z klasy abstrakcyjnej, aby osiągnąć pełne.Abstrakcyjna klasa zawiera metody abstrakcyjne, abstrakcyjne metody mogą być realizowane w klasie pochodnej.Klasy pochodne mają bardziej wyspecjalizowane funkcje.

Proszę pamiętać, że poniższe są pewne zasady klas abstrakcyjnych:

  • Nie można utworzyć instancję klasy abstrakcyjnej.
  • Nie można zadeklarować metody abstrakcyjne spoza klasy abstrakcyjnej.
  • Poprzez umieszczenie w przedniej części słów kluczowych definicji klasyszczelnych, klasy mogą być zadeklarowane jako zamkniętych klasach.Kiedy klasa jest zadeklarowanazaplombowane nie może być dziedziczona.Abstrakcyjna klasa nie może zostać uznane za zamknięte.

Poniższy program pokazuje klasę abstrakcyjną:

using System;
nazw PolymorphismApplication
{
   abstrakcyjna klasa Shape
   {
      public abstract int area ();
   }
   klasy Rectangle: Kształt
   {
      private int length;
      private int width;
      Prostokąt publicznych (int a = 0, int b = 0)
      {
         Długość = a;
         width = b;
      }
      public override int area ()
      { 
         Console.WriteLine ( "prostokąt Powierzchnia klasy:");
         Zwrot (szerokość * długość); 
      }
   }

   Klasa RectangleTester
   {
      static void Main (string [] args)
      {
         Prostokąt R = new Rectangle (10, 7);
         double a = r.area ();
         Console.WriteLine ( "Rozmiar: {0}", a);
         Console.ReadKey ();
      }
   }
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Prostokąt klasy wielkości:
Powierzchnia: 70

Kiedy funkcja jest zdefiniowana w klasie potrzeby do realizacji w klasie pochodnej, można użyćmetod wirtualnych.Metoda wirtualna jest zadeklarowana za pomocąwirtualnego słowo kluczowe.Metody wirtualne mogą być realizowane w różny sposób w różnych klas dziedziczonych. Wywołania metod wirtualnych występuje w czasie wykonywania.

polimorfizm dynamiczny osiąga się poprzezklasy abstrakcyjne i metod wirtualnych.

Poniższy program demonstruje tę kwestię:

using System;
nazw PolymorphismApplication
{
   Klasa Shape 
   {
      chronione int width, height;
      Kształt publicznych (int a = 0, int b = 0)
      {
         width = a;
         height = b;
      }
      public virtual int area ()
      {
         Console.WriteLine ( "obszar parent:");
         return 0;
      }
   }
   klasy Rectangle: Kształt
   {
      Prostokąt publicznych (int a = 0, int b = 0): base (a, b)
      {

      }
      public override int area ()
      {
         Console.WriteLine ( "prostokąt Powierzchnia klasy:");
         powrót (szerokość * wysokość); 
      }
   }
   klasy Triangle: Kształt
   {
      Trójkąt publicznych (int a = 0, b = 0 int) podstawy (a, b)
      {
      
      }
      public override int area ()
      {
         Console.WriteLine ( "Triangle Obszar klasy:");
         powrót (szerokość * wysokość / 2); 
      }
   }
   Klasa rozmówcy
   {
      public void CallArea (Kształt sh)
      {
         int a;
         a = sh.area ();
         Console.WriteLine ( "Rozmiar: {0}", a);
      }
   }  
   Klasa Tester
   {
      
      static void Main (string [] args)
      {
         C = new rozmówcy dzwoniącego ();
         Prostokąt R = new Rectangle (10, 7);
         Trójkąt t = new Triangle (10, 5);
         c.CallArea (R);
         c.CallArea (t);
         Console.ReadKey ();
      }
   }
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Prostokąt klasy wielkości:
Powierzchnia: 70
Obszar klasy Triangle:
Powierzchnia: 25