gpt4 book ai didi

c# - 为什么不能在编译时检查向下转换?

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

为什么编译器无法在编译时检测到 obj 引用类型为 B 的对象,因此当我们尝试将其转换为类型 时会报告错误一个

public class A { }
public class B { }

static void Main(string[] args)
{
B b = new B();
object obj = (object)b;
A a = (A)obj; // exception

谢谢

最佳答案

因为 Halting problem .这实质上意味着您无法决定程序将遵循哪条执行路径(对此有数学证明)。例如,以下代码可能正确也可能不正确:

object o = SomeTest() ? (new A()) : (new B());
A a = (A)o;

如果 SomeTest 方法总是返回 true 那么它是正确的。不幸的是,无法做出决定。但是,该领域正在进行大量研究。尽管它不能总是检查,但有些工具有时可以验证某些事情总是会成功,或者为您提供假设失败的执行路径示例。

这种技术的一个很好的例子是 Code Contracts ,这将成为 Visual Studio 2010 的一部分。我相信您可以使用它们来证明您的向下转换是正确的。但是,没有对此的明确支持 - 尽管它很有用!

关于c# - 为什么不能在编译时检查向下转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2307113/

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