为什么抽象方法没有在下面的代码中执行?

Why the abstract method is not executing in the following code?

我正在粘贴以下代码:

 abstract public class test
    {
        abstract public void add(int a, int b);

    }

    class Program : test
    {
        public void add(decimal a, decimal b)
        {
            decimal c = a + b;
            Console.WriteLine("Decimal Addition : {0}", c);
        }

        public override void add(int a, int b)
        {
            int c = a + b;
            Console.WriteLine("Addition : {0} ", c);
        }
        static void Main(string[] args)
        {
            Program obj = new Program();
            obj.add(10, 111);
            Console.ReadLine();
        }
    } 

我无法理解为什么上面的摘要 class 没有执行? 上面的代码运行完美,也产生了输出。 我的问题是即使在重写程序中的抽象方法后 class 仍然在调用 add() 方法时为什么非抽象方法正在执行而抽象方法不是?

此外,如果我将程序更改为:

 abstract public class test
{
    abstract public void add(int a, int b);

}

class Program : test
{
    public void add(decimal a, decimal b)
    {
        decimal c = a + b;
        Console.WriteLine("Decimal Addition : {0}", c);
    }

    public override void add(int a, int b)
    {
        int c = a + b;
        Console.WriteLine("Addition : {0} ", c);
    }
    static void Main(string[] args)
    {

        test obj = new Program();
        obj.add(10, 111);
        Console.ReadLine();
    }
} 

然后我的抽象方法正在执行并给出了我想要的结果。请任何人解释。下面一行中实际发生了什么。我知道这是一个非常基本的问题,但我在这里有点困惑。请帮忙 !提前致谢。

test obj = new Program();

那是因为在 derive class 中声明的任何方法都比基继承方法具有更高的优先级。

如果你想调用add(int a, int b)你需要告诉编译器add(decimal a, decimal b)不存在。这是通过将其转换为 test

abstract public class test
{
    abstract public void add(int a, int b);

}

class Program : test
{
    public void add(decimal a, decimal b)
    {
        decimal c = a + b;
        Console.WriteLine("Decimal Addition : {0}", c);
    }

    public override void add(int a, int b)
    {
        int c = a + b;
        Console.WriteLine("Addition : {0} ", c);
    }
    static void Main(string[] args)
    {
        test obj = new Program();
        obj.add(10, 111);
        Console.ReadLine();
    }
} 

如果不想强制转换,可以声明add(decimal a, decimal b);到抽象class中。 像这样:

abstract public class test
{
    abstract public void add(int a, int b);

    abstract public void add(decimal a, decimal b);
}

public class Program : test
{

    public override void add(int a, int b)
    {
        int c = a + b;
        Console.WriteLine("Addition : {0} ", c);
    }
    public override void add(decimal a, decimal b)
    {
        decimal c = a + b;
        Console.WriteLine("Decimal Addition : {0}", c);
    }
    public static void Main(string[] args)
    {
        Program obj = new Program();
        obj.add(10, 111);
        Console.ReadLine();
    }
}