替代base关键字在派生类的静态方法中调用基类的重写方法

时间:2013-07-30 05:11:44

标签: c# base

我有以下代码

    class A{
            public void display()
            {
                    Console.WriteLine("In class A");
            }
    }
    class B:A{
            public void display()
            {
                    Console.WriteLine("In class B");
            }
            public static void show()
            {
                    //base.display(); gives error
            }
    }

在上面的代码base.display();给出错误。我必须在方法show()中调用基类方法display()而不创建类A的对象。我可以这样做吗?或者我不能这样做?

3 个答案:

答案 0 :(得分:5)

static方法不属于某个实例,因此它没有base。如果A.display()也是A.display()方法,则只能说static。您也可以在调用new A().display()后说display()来放弃该实例。

答案 1 :(得分:3)

您不能在静态方法中使用实例数据。

静态方法应该是自包含的。这就是说它会 在不需要或保存任何有状态数据的情况下执行其功能。

 class A{
            public static void display()
            {
                    Console.WriteLine("In class A");
            }
    }
      class B : A
      {
          public void display()
          {
              Console.WriteLine("In class B");
          }
          public static void show()
          {
              A.display(); 
          }
      }

答案 2 :(得分:2)

您收到错误是因为您正在从静态方法调用实例方法,这是不允许的。

这里有3个选项。你可以选择适合你的任何东西。

选项1。

class A{
        public void display()
        {
                Console.WriteLine("In class A");
        }
}
class B:A{
        public void display()
        {
                Console.WriteLine("In class B");
        }
        public void show()
        {
                base.display();
        }
}

选项2:

class A{
            public static void display()
            {
                    Console.WriteLine("In class A");
            }
    }
    class B:A{
            public void display()
            {
                    Console.WriteLine("In class B");
            }
            public void show()
            {
                    A.display();
            }
    }

选项3:

class A{
            public void display()
            {
                    Console.WriteLine("In class A");
            }
    }
    class B:A{
            public void display()
            {
                    Console.WriteLine("In class B");
            }
            public void show()
            {
                    new A().display();
            }
    }