这可能是一个愚蠢的问题。我知道编译器会删除未使用的本地变量。但如果我这样写代码:
class MyClass
{
public int SomeProperty
{
get
{
...
}
}
public void SomeFunction ()
{
//will this line be removed if i is never used?
int i = SomeProperty;
...
}
}
我想知道
i
是否会因为优化而被编译器删除。我希望执行 SomeProperty
的 getter 内部的逻辑。如果 i
将被删除,我必须将 SomeProperty
更改为函数。
顺便说一句,有没有办法知道哪一行将被编译器优化?
我建议编译器做什么并不重要。这是糟糕的设计。
如果调用 getter 有重要的副作用,那么它可能不应该是 getter。 getter 最应该做的就是延迟初始化某些东西,这应该不重要,因为如果它没有发生,它就会被下一个获取它的东西完成。
我不知道你在做什么,但它可能应该重构为自己的方法,可以在此时显式调用。
另一个主要问题与可读性有关。当
int i = SomeProperty;
不再使用时,任何看到 i
行的人很可能会认为该行毫无意义并且什么也不做,因此将其从代码中删除,从而导致出现任何意外错误。您最好调用像 LogicExtractedFromProperty()
这样的方法,这样很明显您正在做某事。
编译器可能(也可能不,我不知道或关心)做正确的事情,但人很可能不会。