【问题标题】:Class pointer c#类指针 c#
【发布时间】:2016-02-15 09:46:13
【问题描述】:

我想知道是否可以在 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();
}

【问题讨论】:

  • 指针在C#中以unsafe的形式存在,但要“指向”基类,不确定是否有必要
  • get 是 c# 中的保留关键字,不要将其用作方法名称您的问题不清楚(对我来说):只需注意只需删除第二行中的 * 您的 main 将生成正确的 c# 代码 (Base base);
  • 当然可以,但需要参考。
  • get 仅用于此示例。不在实际代码中。
  • 你可以在 C# 中说Base base = new A();,然后base 指的是A 的一个实例。你要指针做什么?

标签: c# pointers


【解决方案1】:

在 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();
        }
    }
}

【讨论】:

  • 感谢您的简单回答!
猜你喜欢
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多