if I will create new object like this:
Object objectA = new Object();
Which access modifier it will have by default?
if I will create new object like this:
Object objectA = new Object();
Which access modifier it will have by default?
As a class member: private
.
If it's a local variable declared within the body of a method, it has no accessibility outside that method. But I'm guessing you already knew that.
void Foo()
{
// private in method scope
Object objectA = new Object();
}
class Bar()
{
// private in class scrope
Object objectA = new Object();
}
Any member will always have the most restrictive one available - so in this case the accessibility of objectA
is private
. (Assuming it's an instance variable. It makes no sense as a local variable, as they don't have any access rules as such.)
So this:
class Foo
{
Object objectA = new Object();
}
is equivalent to this:
internal class Foo
{
private Object objectA = new Object();
}
The "default to most private" means that for types, the accessibility depends on the context. This:
class Outer
{
class Nested
{
}
}
is equivalent to this:
internal class Outer
{
private class Nested
{
}
}
... because you can't have a private non-nested class.
There's only one place where adding an explicit access modifier can make something more private than it is without, and that's in property declarations:
public string Name { get; set; } // Both public
public string Name { get; private set; } // public get, private set
The class/type itself will default to "internal". The object you create will default to "private".
Classes and structs are declared as internal by default!
Read more here
For class members and struct members, including nested classes and structs, private is the default.
For classes and structs - internal is the default
You can check out MSDN for further reading..