为什么c#编译器仍然从未使用的方法中读取编译代码?

时间:2012-07-25 14:31:39

标签: c# compiler-construction

说我有两个方法,一个叫另一个。第二种方法的代码会产生编译时错误。由于它没有被调用,为什么编译器仍然费心去处理它?<​​/ p>

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

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

2 个答案:

答案 0 :(得分:10)

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

要扩展此:

基本上在编译时你是强类型的 - .NET会键入检查所有内容以确保你想要做的是合法的,但是,你仍然可以在运行时由于空引用,坏的转换等等而抛出异常。

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

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

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

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

答案 1 :(得分:1)

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

即使使用私有方法,反思也会使问题复杂化。

如果您不使用它,请将其丢失。 (或至少评论出来)