加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:32:25 所属栏目:百科 来源:网络整理
导读:这可能是一个愚蠢的问题.我知道编译器将删除未使用的本地.但是,如果我像这样写我的代码: class MyClass{ public int SomeProperty { get { ... } } public void SomeFunction () { //will this line be removed if i is never used? int i = SomeProperty;
这可能是一个愚蠢的问题.我知道编译器将删除未使用的本地.但是,如果我像这样写我的代码:
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()的方法,这样很明显你在做什么.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读