动态多态性:怀疑

RG-*_*G-3 3 c# oop visual-studio-2010

我有这个代码:

namespace ClassLibrary1
{
    public class Testing_Class
    {
        public string A()
        {
            int i = 3;
            Console.Write("Value if i" + i);
            string a = "John";
            return a;
        }


    }

    public class Testing : Testing_Class
    {
        public string A()
        {
            string a = "John";
            Console.Write(a);
            return a;
        }

    }



    public class Test
    {
        public void foo()
        {
            Testing MyTesting = new Testing();
            MyTesting.A(); //Dynamic Polymorphism ??

        }
    }

    }
Run Code Online (Sandbox Code Playgroud)

当我调用MyTesting.A()时,这是一个动态多态吗?我没有包含任何Virtual关键字或任何关键字Override

你的输入?

Jon*_*eet 5

不,这里没有多态性.您有一个非虚拟方法的非虚拟调用.与其他一些语言不同,默认情况下,C#中的方法和属性是非虚拟的.

为了证明多态性确实有效,你需要:

  • 在基类中声明方法virtual
  • 在派生类中使用override修饰符
  • 使用具有编译时类型的基类的变量进行调用,但是使用派生类型的对象初始化它.

这是一个简短而完整的程序,展示了所有这些:

using System;

class Base
{
    public virtual void Foo()
    {
        Console.WriteLine("Base.Foo");
    }
}

class Derived : Base
{
    public override void Foo()
    {
        Console.WriteLine("Derived.Foo");
    }
}

class Test
{
    static void Main()
    {
        Base x = new Derived();
        x.Foo(); // Prints Derived.Foo
    }
}
Run Code Online (Sandbox Code Playgroud)