Xin*_*hao 6 c# compiler-construction optimization
这可能是一个愚蠢的问题.我知道编译器将删除未使用的本地.但是,如果我像这样写我的代码:
class MyClass
{
public int SomeProperty
{
get
{
...
}
}
public void SomeFunction ()
{
//will this line be removed if i is never used?
int i = SomeProperty;
...
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如果i由于优化将被编译器删除.SomeProperty我希望执行的getter中有逻辑.如果i将被删除,我必须更改SomeProperty为一个功能.
顺便问一下,有没有办法知道哪一行会被编译器优化?
我建议编译器所做的并不重要.这是糟糕的设计.
如果调用getter有重要的副作用,那么它应该不是一个吸气剂.最大的吸气剂可能应该做的是懒惰初始化的东西,这不应该是重要的,因为如果它没有发生它只会通过下一件事来完成它.
我不知道你在做什么,但它可能应该重构为自己的方法,可以在那时明确调用.
另一个主要问题涉及可读性.任何人看到线int i = SomeProperty;时,i决不会再次使用可能决定该行是没有意义的,什么也不做,因此从代码造成任何出现意外错误删除它.你最好调用一个类似的方法LogicExtractedFromProperty(),这显然是你正在做的事情.
编译器可能(或可能不是,我不知道或不关心)做正确的事情,但一个人可能不会.