Naming convention for private fields

后端 未结 4 581
萌比男神i
萌比男神i 2020-12-16 10:16

First, I know this question has been asked several times before and that in the end, it is mostly a matter of personal preference, but reading all the threads about the subj

相关标签:
4条回答
  • 2020-12-16 10:54

    I strongly prefer the leading "_" convention for private fields, even though it does not follow MS conventions:

    1. It eliminates conflicts with camel cased parameter names - no need to use "this"

    2. It's a visual indicator that the internal persistent state of the object is being read, or - more importantly - being written. It's a flag saying "this has side effects outside of the particular method I happen to be looking at", which is very important to know when looking at unfamiliar code.

    0 讨论(0)
  • 2020-12-16 10:54

    Prefixing private fields with underscore is basically the same thing as using "this.". However underscore is faster to use, shorter and more elegant to me (this comes from Java I believe).

    Having the same names for function parameters and private fields seems a bit tricky to me. Not only once have I forgot to use "this" which resulted in nasty NullPointerException (yes, I did java someday... :) ).

    As far as I know it doesn't violate any FxCop rule, as it's not a hungarian notation.

    0 讨论(0)
  • 2020-12-16 10:59

    You are quite right. It doesn't.

    Using this is a way to ensure you are using the class member, in case of naming conflicts (say a parameter name that is identical to a field name).

    For me, pascal casing public members and camel casing private members has always been enough of a convention to work well.

    0 讨论(0)
  • 2020-12-16 11:07

    Using this.age could help distinguish between the backing store of your Age property and an age parameter for a method on your object:

    public bool CheckIfOlderThan(int age)
    {
       // in here, just using "age" isn't clear - is it the method parameter? 
       // The internal field?? Using this.age make that clear!
       return (this.age >= age); 
    }
    

    Of course, in this case, you could also give your parameter a less confusing name to avoid any clashes....

    But in the actual definition of the property - reading and storing its value in the backing store - adding the this. doesn't really add anything. Some people I know just prefer to use the this. prefix all the time - not just when it's needed - personal preference, really...

    0 讨论(0)
提交回复
热议问题