关于最佳实践的C#神话?

Pra*_*are 5 .net c# .net-2.0 c#-2.0

我的同事一直告诉我评论中列出的内容.

我很迷惑.有人可以为我揭开这些神秘面纱吗?

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
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ero 10

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

线程问题与它无关.混淆可能来自这样的事实:大多数静态成员都是实现的,因此它们是线程安全的,静态成员不能被调用(!),this.因为它们没有绑定到实例.

  • 静态字段和属性本质上不是线程安全的.方法通常只要它们不使用存储在静态字段/属性中的任何状态即可.如果正确使用监视器和锁,则属性和方法可以更加线程安全. (2认同)

Dan*_*plo 8

"不使用this.xxx会产生线程问题"

是一个完整的神话.只要让你的同事检查生成IL并让他解释为什么它们是相同的无论你是否添加this.

"在课堂内使用这个,例如if(this._a == 2)"

归结为你想要达到的目标.你的同事似乎在说什么总是参考私人领域,这在我看来并不合理.通常你想访问公共属性,甚至是在类中,因为getter可能会修改值(例如,当列表为null时,List类型的属性可能返回一个新的List实例,以避免在访问属性时出现空引用异常).

  • 另外,OP,假设用`public int A {get {return _a; } set {if(value <0)抛出新的ArgumentOutOfRangeException(); _a =价值; } (3认同)