gpt4 book ai didi

c# - 动态多态性 : Doubt

转载 作者:行者123 更新时间:2023-11-30 13:41:39 25 4
gpt4 key购买 nike

我有这个代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com