如何从抽象类访问函数而不使它们静态?

时间:2010-01-08 07:28:32

标签: c# .net oop static abstract-class

我想创建一个只能继承的类,因为我知道它应该是抽象的。但现在问题是我想使用该类的函数而不使它们静态。我怎样才能做到这一点。

public abstract Class A
{
 A()
 {}
 public void display()
 {}
}

public Class B:A
{
 base.A() // this is accessible
 this.display() // this is not accessible if i dont make this function static above
}

3 个答案:

答案 0 :(得分:2)

那不是真的。您不必将Display()设为静态;你可以从子类中自由调用它。另一方面,你不能像这样调用构造函数。

也许这只是示例中的一个错误,但是你所拥有的代码的真正问题是你不能将方法调用放在类定义的中间。

试试这个:

public abstract class A
{
 public void Display(){}
}

public class B:A
{
 public void SomethingThatCallsDisplay()
 {
  Display();
 }
}

答案 1 :(得分:2)

你的例子不会编译,你可以考虑这样的事情:

using System;

public abstract class A
{
    protected A()
    {
        Console.WriteLine("Constructor A() called");
    }
    public void Display()
    {
        Console.WriteLine("A.Display() called");
    }
}

public class B:A
{
    public void UseDisplay()
    {
        Display();
    }
}

public class Program
{
    static void Main()
    {
        B b = new B();
        b.UseDisplay();
        Console.ReadLine();
    }
}

输出:

Constructor A() called
A.Display() called

注意:创建一个新的B()隐式调用A();我必须使A的构造函数受到保护,以防止出现此错误: “'A.A()'由于其保护级别”

而无法访问

答案 2 :(得分:0)

以下是你如何做到这一点..

public abstract class A
{
    public virtual void display() { }
}

public class B : A
{
    public override void display()
    {
        base.display();
    }

    public void someothermethod()
    {
        this.display();
    }
}