Considering "private" is the default access modifier for class Members, why is the keyword even needed?
相关问题
- Sorting 3 numbers without branching [closed]
- Graphics.DrawImage() - Throws out of memory except
- Generic Generics in Managed C++
- Why am I getting UnauthorizedAccessException on th
- 求获取指定qq 资料的方法
Explicitness. I never use the default and always explicitly add the modifier.
This could be because of my Java background where the default was 'package' (roughly equivalent to 'internal' in C#) and so the difference always bothered me. I found explicitness to be preferable.
I also use ReSharper now which defaults to being explicit, so it only confirms and reinforces my bias :)
There's a certain amount of misinformation here:
Well, that depends on what you're talking about. For members of a type, it's private. For top-level types themselves, it's internal.
No, it's the default for all members of a type - properties, events, fields, operators, constructors, methods, nested types and anything else I've forgotten.
Only for top-level types. For nested types, it's private.
Other than for restricting property access for one part but not the other, the default is basically always "as restrictive as can be."
Personally, I dither on the issue of whether to be explicit. The "pro" for using the default is that it highlights anywhere that you're making something more visible than the most restrictive level. The "pro" for explicitly specifying it is that it's more obvious to those who don't know the above rule, and it shows that you've thought about it a bit.
Eric Lippert goes with the explicit form, and I'm starting to lean that way too.
See http://csharpindepth.com/ViewNote.aspx?NoteID=54 for a little bit more on this.
Actually, if the class or struct is not declared with an access modifier it defaults to internal.
So if you want to make it private, use private.
Private is only the default for methods on a type, but the private modifier is used elsewhere.
From C# Language Specification 3.0 (msdn) Section 3.5.1
For symmetry and to conform with coding styles that like everything to be explicit (personally I like it ...)
As Robert Paulson said in his answer, the
private
modifier is not just used on members, but also on types. This becomes important because the default for types isinternal
which can leak unintentionally if you use the InternalsVisibleToAttribute.