c# - 动态多态性 : Doubt

标签 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 ??

        }
    }

    }

当我调用 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/

相关文章:

web-services - VS2010 无法添加服务引用

c# - 围绕一组不断变化的依赖可观察量创建可观察量

c# - 来自 P/Invoke 函数的奇怪行为 - 魔术循环

java - 从 Java 调用 Kotlin — 错误 : package demo does not exist

java - 修改抽象方法

c# - 在 DSL 中的 DragOver 上更新隔间形状轮廓颜色

c# - 如果结果返回 null,则为 TextBlock 提供默认值

c# - 允许多个分隔符的 C++ 中的字符串分词器

c++ - 具有未知参数 vector 类型的虚函数

c# - 子项目引用的某些 DLL 未复制到解决方案的输出文件夹