2016-02-15 2 views
-4

Мне интересно, возможно ли в C# создать указатель класса, указывающий на базовый класс. Затем вы сможете установить его в любой из нижеперечисленных классов. Как и в C++: Например:Указатель класса C#

class Base 
{ 
    virtual void get() = 0; 
} 
class A : public Base 
{ 
    void get(); 
} 

class B : public Base 
{ 
    void get(); 
} 

main 
{ 
    int i = 0; 
    Base *base; 

    if(i==0) 
     base = new A(); 
    else 
     base = new B(); 
} 
+0

указатель существует в C#, как 'unsafe', а«точки»в базовом классе, не уверен, если это необходимо – Ian

+0

' get' является зарезервированным ключевым словом в C#, не использовать его в качестве имя метода Ваша проблема не ясна (мне): просто обратите внимание, что простое удаление '*' во второй строке вашего основного файла приведет к правильному коду C# ('Base base'); –

+1

Конечно, вы можете, но со ссылкой. – harold

ответ

0

В C# все классы являются ссылочными типами, поэтому вам просто нужно использовать нормальное объявление. Другими словами, все переменные типа класса объявляются как classname& (в терминах C++).

namespace Demo 
{ 
    abstract class Base // Abstract means derived classes must implement. 
    { 
     public abstract void SomeVirtualMethod(); 
    } 

    class Derived1 : Base 
    { 
     public override void SomeVirtualMethod() 
     { 
      // Do something. 
     } 
    } 

    class Derived2 : Base 
    { 
     public override void SomeVirtualMethod() 
     { 
      // Do something. 
     } 
    } 

    class Program 
    { 
     static void Main() 
     { 
      int i = 0; 
      Base b; 

      if (i == 0) 
       b = new Derived1(); 
      else 
       b = new Derived2(); 

      b.SomeVirtualMethod(); 
     } 
    } 
} 
+0

Thx для легкого ответа! – starfable

Смежные вопросы