gpt4 book ai didi

c# - 如果为 C# 编译器分配了属性,C# 编译器是否会删除未使用的局部变量?

转载 作者:太空狗 更新时间:2023-10-29 21:18:08 26 4
gpt4 key购买 nike

这可能是个愚蠢的问题。我知道编译器会删除未使用的局部变量。但是如果我这样写我的代码:

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; when i 不再被使用时,任何人都可能会认为该行毫无意义,什么都不做,因此将其从代码中删除,从而导致任何意外出现的错误。您最好调用 LogicExtractedFromProperty() 之类的方法,这样很明显您正在做某事。

编译器可能(也可能不会,我不知道也不关心)做正确的事情,但一个人可能不会。

关于c# - 如果为 C# 编译器分配了属性,C# 编译器是否会删除未使用的局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16355880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com