代码之家  ›  专栏  ›  技术社区  ›  Pratik Deoghare

关于最佳实践的神话?

  •  5
  • Pratik Deoghare  · 技术社区  · 14 年前

    我的同事总是告诉我评论中列出的事情。

    我很困惑。 有人能帮我解开这些东西的神秘面纱吗?

    class Bar
    {
        private int _a;
    
        public int A
        {
            get { return _a; }
            set { _a = value; }
        }
    
        private Foo _objfoo;
    
        public Foo OFoo
        {
            get { return _objfoo; }
            set { _objfoo = value; }
        }
    
        public Bar(int a, Foo foo)
        {
            // this is a bad idea
            A = a;
            OFoo = foo;
        }
    
        // MYTHS
        private void Method()
        {
            this.A    //1 -
            this._a   //2 - use this when inside the class e.g. if(this._a == 2)
            A         //3 - use this outside the class e.g. barObj.A
            _a        //4 - 
                      // Not using this.xxx creates threading issues.
        }
    }
    class Foo
    {
        // implementation
    }
    
    5 回复  |  直到 14 年前
        1
  •  10
  •   Lucero    14 年前

    这个 this. 如果没有名称冲突,则是多余的。只有在需要对当前对象的引用或具有与字段同名的参数时才需要它。

    线程问题与此无关。这种混乱可能是因为大多数静态成员都是通过线程安全实现的,而静态成员不能(!)被召唤 这个。 因为它们没有绑定到实例。

        2
  •  8
  •   Dan Diplo    14 年前

    “不使用这个.xxx创建线程 问题“

    完全是个神话。只要让你的同事检查生成的il,让他解释为什么它们是相同的,无论你添加 this 或者没有。

    “在课堂上使用这个。 如果(这个.\u a==2)“

    是你想要达到的目标。你的同事好像在说 总是 参考私人领域,这在我看来是不明智的。通常您希望访问 公众的 属性,即使在类内,因为getter可以修改该值(例如,当列表为空时,list类型的属性可能返回新的列表实例,以避免在访问该属性时出现空引用异常)。

        3
  •  4
  •   Andrey Taptunov    14 年前

    我个人的“最佳实践”是永远使用这个。是的,这是多余的,但是当你考虑多线程应用程序时,从第一眼看到实例的状态被更改或检索到的地方,这是一个很好的方法。

        4
  •  3
  •   Kramii    14 年前

    问问你的同事为什么他认为这些建议是最佳实践可能会有帮助?人们常常引用最佳实践“规则”,这些规则是他们在没有真正理解实践背后的原因的情况下从某个地方学到的。

    正如lucero所说,除非()存在名称冲突,否则不需要“this”。然而,有些人喜欢在不严格要求的情况下包含“this”,因为他们认为它增强了可读性/更清楚地显示了程序员的意图。在我看来,这是个人喜好的问题,而不是别的。

    至于你“bar”方法中的“坏主意”:你的同事可能会认为这种坏做法是因为以下原因:如果“a”的setter方法被更改为有一些副作用,那么 A=A; 也会产生这种副作用, a a= a; 只设置私有变量。在我看来,最佳实践是意识到两者之间的差异,而不是偏爱彼此。

    最后,“线程问题”是无稽之谈-afaik“this”与线程无关。

        5
  •  2
  •   João Angelo    14 年前

    数字2是一个神话,很容易被揭穿提到自动属性。 Automatic properties 允许您定义不带由编译器自动生成的后台字段的属性。所以问问你的同事他对自动属性有什么看法。