Scope can be defined as the accessibility of a variable.
Say for example, in every office, there is a restricted area where only a few people have access.
Similarly, in C#, the variables also have some access restrictions. The variables that are defined inside a Method, cannot be accessed outside of it.
public class MyApplication { public static void Main(string[] args) { myMethod(); System.Console.WriteLine(x); } static void myMethod() { int x = 5; } }
So, in the first line itself, the Method myMethod() is called.
myMethod();
And the function execution begins.
static void myMethod() { int x = 5; }
And initialised the variable x with 5 inside the function fun().
int x = 5;
Then we come to the print statement,
System.Console.WriteLine(x);
And end up with an error as output,
This is because the variable x is not accessible outside the Method. And that is called as Local Scope.
The variables that are declared inside a Method, can only be accessed inside the Method and is local to that Method. That is called the Local Scope of a variable.
Say for example, if there are two functions, firstMethod() and secondMethod().
public class MyApplication { public static void Main(string[] args) { firstMethod(); secondMethod(); } static void firstMethod() { int x = 5; System.Console.WriteLine("The variable x : "+x+" is not accesible outside the firstMethod()"); } static void secondMethod() { int y = 7; System.Console.WriteLine("The variable y : "+y+" is not accesible outside the secondMethod()"); } }
So, we have declared two functions, firstMethod(),
static void firstMethod() { int x = 5; System.Console.WriteLine("The variable x : "+x+" is not accesible outside the firstMethod()"); }
And secondMethod().
static void secondMethod() { int y = 7; System.Console.WriteLine("The variable y : "+y+" is not accesible outside the secondMethod()"); }
And we have two variables, x and y.
While x is declared inside the Method firstMethod() and is local to the firstMethod() and cannot be accessed outside it.
Similarly, y is declared inside the Method secondMethod() and is local to the secondMethod() and cannot be accessed outside it.
Next, let us see the Local Scope in nested Method.
Nested Method is a Method inside an existing Method.
public class MyApplication { public static void Main(string[] args) { outerMethod(); } static void outerMethod() { int x = 5; System.Console.WriteLine("The variable x is accesible from the outerMethod() and the value is "+ x); void innerMethod() { System.Console.WriteLine("The variable x is accesible from the innerMethod() and the value is "+ x); } innerMethod(); } }
So, in the above example, there are two Methods, outerMethod() and innerMethod(). And the innerMethod() resides inside the outerMethod().
Now, we have declared a variable x inside the outerMethod().
static void outerMethod() { int x = 5; System.Console.WriteLine("The variable x is accesible from the outerMethod() and the value is "+ x); void innerMethod() { System.Console.WriteLine("The variable x is accesible from the innerMethod() and the value is "+ x); } innerMethod(); }
Now, since the innerMethod() resides inside the outerMethod(). The variable x is also accessible inside the innerMethod().
Now, what if, the variable x was defined inside the innerMethod(). Can the variable x be accessed from the outerMethod()?
Well! The answer is no.
Let us see the next example.
public class MyApplication { public static void Main(string[] args) { outerMethod(); } static void outerMethod() { System.Console.WriteLine("The variable x is accesible from the outerMethod() and the value is "+ x); void innerMethod() { int x = 5; System.Console.WriteLine("The variable x is accesible from the innerMethod() and the value is "+ x); } innerMethod(); } }
So, in the above code, we have declared the variable x inside the inner_func().
static void outerMethod() { System.Console.WriteLine("The variable x is accesible from the outerMethod() and the value is "+ x); void innerMethod() { int x = 5; System.Console.WriteLine("The variable x is accesible from the innerMethod() and the value is "+ x); } innerMethod(); }
So, the variable x is not accesible from the outerMethod().
So, the moral of the story is, the variable that is declared at a higher scope could be accessed at a lower scope.
Say for example, your Boss will have access to your details. But you will not have access to any of your Boss's details.