【发布时间】:2023-04-01 22:00:01
【问题描述】:
考虑以下代码:
using System;
public class Program
{
public static void Main()
{
A m1 = new B();
B m2 = new B();
Console.Write("m1: ");
m1.fun();
Console.Write("m2: ");
m2.fun();
}
}
abstract class A
{
public abstract void fun ();
}
class B : A
{
public override void fun()
{
if (this.GetType() == typeof(A)) // ????
Console.WriteLine("A");
else Console.WriteLine("B");
}
}
我希望您修改if 语句,以便程序将A 写入m1,将B 写入m2。
我一直在尝试与 GetType()、typeof、is 和 as 的各种组合,但无法成功。
【问题讨论】:
-
如果您确实需要在生产代码中执行此操作,那么您做的非常错误。这只是一个有趣的挑战吗?
-
@Sweeper 不,实际上,我的教授在上次测试时给了我这样的评估,我无法解决这个问题,但我仍然想知道下次如何做这样的事情。
-
你上面的例子没有办法做到这一点。您必须修改类定义或继承模型才能使类似的工作正常工作,例如在 Jerry 的回答中。此外,这实际上不是编译时类型检查。这是运行时类型检查 :)。
标签: c# types compile-time compile-time-type-checking