我有这个代码:
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 ??
}
}
}
当我调用 MyTesting.A() 时,这是动态多态性吗?我没有在此处包含任何 Virtual
关键字或任何 Override
吗?
您的意见?
最佳答案
不,这里没有发生多态性。您已经对非虚拟方法进行了非虚拟调用。与其他一些语言不同,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
}
}
关于c# - 动态多态性 : Doubt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819614/