gpt4 book ai didi

C# - 基类中的调用方法

转载 作者:行者123 更新时间:2023-11-30 14:38:55 24 4
gpt4 key购买 nike

我有 2 个类:

public class A
{
public void WriteLine(string toWrite) { Console.WriteLine(toWrite); }
}

public class B : A
{
public new void WriteLine(string toWrite) { Console.WriteLine(toWrite + " from B"); }
}

在我的代码中,我执行以下操作:

B writeClass = new B();
writeClass.WriteLine("Output"); // I expect to see 'Output from B'
A otherClass = (A)writeClass;
otherClass.WriteLine("Output"); // I expect to see just 'Output'

我认为这是可行的,因为 polymorphism.

但是,它每次总是写'Output from B'。有没有办法让它按照我想要的方式工作?

编辑修复代码示例。

最佳答案

当您使用 NEW 从基类中“隐藏”一个方法时,您只是在隐藏它,仅此而已。当您显式调用基类实现时,它仍然会被调用。

A 不包含 WriteLine,因此您需要修复它。当我修复它时,我得到了

Output from B
Output


namespace ConsoleApplication11
{
class Program
{
static void Main(string[] args)
{
B writeClass = new B();
writeClass.WriteLine("Output"); // I expect to see 'Output from B'
A otherClass = (A)writeClass;
otherClass.WriteLine("Output"); // I expect to see just 'Output'
Console.ReadKey();
}
}

public class A
{
public void WriteLine(string toWrite) { Console.WriteLine(toWrite); }
}
public class B : A
{
public new void WriteLine(string toWrite) { Console.WriteLine(toWrite + " from B"); }
}
}

关于C# - 基类中的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7114983/

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