1

假设我有两种方法,一种调用另一种。第二种方法的代码会产生编译时错误。既然没有被调用,为什么编译器还要费心去处理呢?

void method1()
{
    var i = 1;
    //method2();
}

void method2()
{
    int i = "2";
}
4

2 回答 2

10

您不能确定其他人不会在运行时使用反射调用该方法。你的代码必须编译,否则它不是有效的代码——如果它从未使用过......把它注释掉!

要对此进行扩展:

基本上在编译时你是强类型的 - .NET 将检查所有内容以确保你尝试做的事情是合法的,但是,由于空引用、错误类型转换等,你仍然可以在运行时抛出异常。

反射是 .NET 框架的一个组件,它允许开发人员通过程序集元数据检查程序集类型的属性/字段/方法等

反射允许发现和检查这些类型的运行时类型,它还允许调用方法/属性和修改字段等(您甚至可以在运行时创建新的泛型类型或完全新的类型)。

换句话说,你不能保证你认为不会被调用的代码,不会在某个时候在其他地方被调用。为了使反射成为可能,每一位代码都需要有效且可编译

该代码是否会在运行时成功是另一回事——但这就是我们进行异常处理的原因。

于 2012-07-25T14:33:20.610 回答
1

然后,如果其他人稍后使用您的编译代码并决定使用它怎么办?

即使使用私有方法,反射也会使事情复杂化。

如果你不使用它,就失去它。(或至少将其注释掉)

于 2012-07-25T14:34:28.667 回答