Visual C++ .NET/Class/virtual method

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Explicit override

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class MyClass{

  public:
     void Initialize(bool fromFile)
     {
        if (fromFile)
        {
            Read();
        }
     }
     virtual void Read()
     {
        Console::WriteLine("MyClass::Read");
     }

}; ref class MySubClass : MyClass { }; ref class MySubSubClass : MySubClass{

  public:
     virtual void MyClassRead() = MyClass::Read
     {
         Console::WriteLine("MySubSubClass::MyClassRead");
     }
     virtual void Read() new
     {
         Console::WriteLine("MySubSubClass::Read");
     }

}; int main() {

  MySubSubClass^ scroll = gcnew MySubSubClass();
  MySubClass^ item = scroll;
  item->Initialize(true);
  scroll->Read();

}

 </source>


Native managed virtual

<source lang="csharp">

  1. include "stdafx.h"

class MyBaseClass {

  public:
  MyBaseClass()
  {
     myvirtual();
  }
  virtual void myvirtual()
  {
     System::Console::WriteLine("MyBaseClass::myvirtual");
  }

}; class NativeDerived : public MyBaseClass {

  public:
  NativeDerived()
  {
     myvirtual();
  }
  virtual void myvirtual()
  {
     System::Console::WriteLine("NativeDerived::myvirtual");
  }

}; ref class ManagedBase {

  public:
  ManagedBase()
  {
     myvirtual();
  }
  virtual void myvirtual()
  {
     System::Console::WriteLine("ManagedBase::myvirtual");
  }

}; ref class ManagedDerived : ManagedBase {

  public:
  ManagedDerived()
  {
     myvirtual();
  }
  virtual void myvirtual() override
  {
     System::Console::WriteLine("ManagedDerived::myvirtual");
  }

}; int main() {

  NativeDerived nd;
  ManagedDerived rd;

}

 </source>


new method

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class MyClass {

  public:
     void Initialize(bool fromFile)
     {
        if (fromFile)
        {
            Read();
        }
     }
     virtual void Read()
     {
        Console::WriteLine("MyClass::Read");
     }

}; ref class MySubClass : MyClass { }; ref class MySubSubClass : MySubClass {

  public:
     virtual void Read() new
     {
         Console::WriteLine("MySubSubClass::Read");
     }

}; int main() {

  MySubSubClass^ scroll = gcnew MySubSubClass();
  MySubClass^ item = scroll;
  item->Initialize(true);
  scroll->Read();

}

 </source>


override and virtual method

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class MyClass{

  public:
     void Initialize(bool fromFile)
     {
        if (fromFile)
        {
            Read();
        }
     }
     virtual void Read()
     {
        Console::WriteLine("MyClass::Read");
     }

}; ref class MySubClass : MyClass { }; ref class MySubSubClass : MySubClass {

  public:
     virtual void Read() override
     {
         Console::WriteLine("MySubSubClass::Read");
     }

}; int main() {

  MySubSubClass^ scroll = gcnew MySubSubClass();
  MySubClass^ item = scroll;
  item->Initialize(true);
  scroll->Read();

}

 </source>


Virtual methods

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class Animal{ public:

   virtual void Speak (){
       Console::WriteLine("Animal");
   }

}; ref class Dog : public Animal{ public:

   virtual void Speak() override{
       Console::WriteLine("Dog");
   }

}; ref class Puppy : public Dog{ public:

   virtual void Yip() = Dog::Speak
   {
       Console::WriteLine("Puppy");
   }

}; ref class Cat : public Animal{ public:

   virtual void Speak() new
   {
       Console::WriteLine("Cat");
   }

}; ref class Tiger : public Cat{ public:

 virtual void Growl() = Animal::Speak, Cat::Speak
   {
       Console::WriteLine("Tiger");
   }

}; void main() {

   array<Animal^>^ animals = gcnew array<Animal^> { 
       gcnew Animal(), 
       gcnew Dog(), 
       gcnew Puppy(),
       gcnew Cat(), 
       gcnew Tiger() 
  };
   for each ( Animal ^a in animals){
       a->Speak();
   }
   Console::WriteLine();
   Animal^ cat1 = gcnew Cat();
   Cat^  cat2   = gcnew Cat();
   Cat^  tiger  = gcnew Tiger();
   cat1->Speak();
   cat2->Speak();
   tiger->Speak();

}

 </source>