访问抽象类方法C#,ASP.net

时间:2013-06-10 21:30:42

标签: c# asp.net override abstract-class abstract

我的程序中有以下类,现在我想访问Y类中的方法M2()。我尝试通过创建类Z的对象然后使用类X的变量进行转换来访问它。调用x.M2(10,5)但不是Y类,它仍在调用类X中的方法M2()。谢谢。

public partial class Abstract_Class : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Z z = new Z();
        int r1 = z.M2(10, 20); //gives output -20
        X x = z;
        int r2 = x.M2(10,5); //gives output 10 while I want it to print 15
    }
}
public class W
{
    public virtual int M2(int x, int y)
    {
        return x - y;
    }
}
public abstract class X : W
{
    public abstract void M1();
    public override int M2(int x, int y)
    {
        return 2*(x-y);
    }
}
public abstract class Y : X
{
    public sealed override int M2(int x, int y)
    {
        return 3 * (x - y);
    }
}
public class Z : X
{
    public override void M1()
    {
    }
}

1 个答案:

答案 0 :(得分:2)

您需要创建Y的实例。由于它是abstract,你必须创建它的一些子类。

public class SubY : Y
{

}

然后在你的代码中写下类似的东西:

var suby = new SubY();
int r2 = suby.M2(10, 5); //15