小编Pet*_*erR的帖子

C#允许在虚拟方法上使用new的用例是什么?

作为一名Java开发人员,当我有一天意外地使用new关键字而不是覆盖时,我对结果感到有些惊讶.

似乎new关键字在继承树中删除了该级别的方法的"虚拟性",因此在子类的实例上调用一个方法,该方法被下载到父类,将不会解析为该方法的实现.儿童班.

这种行为有哪些实际用例?

澄清:我理解父母不是虚拟的时候使用new.我更好奇为什么编译器允许组合新的和虚拟的.

以下示例说明了不同之处:

using System;

public class FooBar
{
    public virtual void AAA()
    {
        Console.WriteLine("FooBar:AAA");
    }

    public virtual void CCC()
    {
        Console.WriteLine("FooBar:CCC");
    }
}

public class Bar : FooBar
{
    public new void AAA()
    {
        Console.WriteLine("Bar:AAA");
    }

    public override void CCC()
    {
        Console.WriteLine("Bar:CCC");
    }
}

public class TestClass
{
    public static void Main()
    {
        FooBar a = new Bar();
        Bar b = new Bar();
        Console.WriteLine("Calling FooBar:AAA");
        a.AAA();
        Console.WriteLine("Calling FooBar:CCC");
        a.CCC();
        Console.WriteLine("Calling Bar:AAA"); …
Run Code Online (Sandbox Code Playgroud)

c#

5
推荐指数
1
解决办法
395
查看次数

标签 统计

c# ×1