我很抱歉,如果这之前已经问过,或者现在是否可以回复。C#编译智能编译
我正在使用一个庞大的代码库(大部分是在开始编写它之前由其他软件工程师编写的,标准的事务)。我为这个项目添加了很多代码,其中大部分都是将现有的方法封装到对象/库中以便重用。通过包装,我的意思是我将它们复制到一个新的对象/库中,对它们进行编辑以使它们作为独立对象或库(在适用的情况下)工作,并在原始代码库中适当调用/实例化它们。例如,而不是一个巨大的方法(foo),它提供了一些主要exe文件的一个.cs文件中包含的一次性函数,我将它包装在自己的类中并将其分开,所以它可以(理论上)用于其他项目或解决方案的不同部分。
IE从这个打算:
/* somewhere in Main */
void Main()
{
...
foo (arg1, arg2, arg3)
...
}
foo (arg1, arg2, arg3)
{
//some massive functionality
}
这样的:今天
/* somewhere in Main or any other part of the code base */
Foo myFoo = new Foo (arg1, arg2, arg3);
myFoo.DoSomething();
,我已经开始期待通过基础代码和注释掉所有的老方法(一个就是我已经被包装进了对象/库),努力弄清楚我们可以从原始代码库中删除哪些。我使用的是版本控制软件,我一次只做几个,然后重新编译并执行一些测试,以检查我没有损坏任何东西。我的问题是这样的: 当我编译时,C#编译器(使用3.5版本)足够聪明,它不会包含永远不会调用,实例化或使用的方法/函数/对象/库吗?
我还是要补充/清除现在不推荐使用的方法/函数,但我只是想知道编译器是否可以生成不包含这些方法/函数的输出。
TL; DR:如果我有以下Main.cs
/*using statements here*/
public void Main()
{
foo();
}
foo()
{
/*Some commands*/
}
bar()
{
/*Never called*/
}
难道我的编译输出包含任何引用吧?
谢谢你。我以为是这样,但我觉得最好检查一下。 – 2012-03-22 11:58:02
@JamieTaylor如果你很好奇,你可以使用像[ILSpy](http://wiki.sharpdevelop.net/ILSpy.ashx)这样的工具来查看你的二进制文件,看看它里面的内容。 – 2012-03-22 12:04:31