如果为C#编译器分配了属性,它是否会删除未使用的本地?

前端之家收集整理的这篇文章主要介绍了如果为C#编译器分配了属性,它是否会删除未使用的本地?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这可能是一个愚蠢的问题.我知道编译器将删除未使用的本地.但是,如果我像这样写我的代码
class MyClass
{
    public int SomeProperty
    {
        get
        {
          ...
        }
    }

    public void SomeFunction ()
    {
       //will this line be removed if i is never used?
       int i = SomeProperty;
       ...
    }
}

我想知道如果由于优化我将被编译器删除.我希望执行SomeProperty的getter中的逻辑.如果我将被删除,我必须将SomeProperty更改为一个函数.

顺便问一下,有没有办法知道哪一行会被编译器优化?

解决方法

我建议编译器所做的并不重要.这是糟糕的设计.

如果调用getter有重要的副作用,那么它应该不是一个吸气剂.最大的吸气剂可能应该做的是懒惰初始化的东西,这不应该是重要的,因为如果它没有发生它只会通过下一件事来完成它.

我不知道你在做什么,但它可能应该重构为自己的方法,可以在那时明确调用.

另一个主要问题涉及可读性.任何人看到行int i = SomeProperty;当我从未再次使用时,可能会很好地判断该行是没有意义的,并且什么都不做,从而将其从代码删除,从而导致出现任何意外错误.你最好调用一个类似LogicExtractedFromProperty()的方法,这样很明显你在做什么.

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

猜你在找的C#相关文章