A class is a user-defined blueprint or prototype from which objects are created. Basically, a class combines the fields and methods (member function which defines actions) into a single unit. In C#, a user is allowed to define a class within another class. Such types of classes are known as nested class. This feature enables the user to logically group classes that are only used in one place, thus this increases the use of encapsulation, and create more readable and maintainable code.
Syntax:
class Outer_class { // Code.. class Inner_class { // Code.. } }
Example:
// C# program to illustrate the // concept of nested class using System; // Outer class public class Outer_class { // Method of outer class public void method1() { Console.WriteLine( "Outer class method" ); } // Inner class public class Inner_class { // Method of inner class public void method2() { Console.WriteLine( "Inner class Method" ); } } } // Driver Class public class GFG { // Main method static public void Main() { // Create the instance of outer class Outer_class obj1 = new Outer_class(); obj1.method1(); // This statement gives an error because // you are not allowed to access inner // class methods with outer class objects // obj1. method2(); // Creating an instance of inner class Outer_class.Inner_class obj2 = new Outer_class.Inner_class(); // Accessing the method of inner class obj2.method2(); } } |
Output:
Outer class method Inner class Method
Important points:
- A nested class can be declared as a private, public, protected, internal, protected internal, or private protected.
- Outer class is not allowed to access inner class members directly as shown in above example.
- You are allowed to create objects of inner class in outer class.
- Inner class can access static member declared in outer class as shown in the below example:
Example:
// C# program to illustrate the
// concept of nested class accessing
// static members of the outer class
using
System;
// Outer class
public
class
Outer_class {
// Static data member of the outer class
public
static
string
str =
"Geeksforgeeks"
;
// Inner class
public
class
Inner_class {
// Static method of Inner class
public
static
void
method1()
{
// Displaying the value of a
// static member of the outer class
Console.WriteLine(Outer_class.str);
}
}
}
// Driver Class
public
class
GFG {
// Main method
static
public
void
Main()
{
// Accessing static method1
// of the inner class
Outer_class.Inner_class.method1();
}
}
Output :
Geeksforgeeks
- Inner class can access non-static member declared in outer class as shown in the below example:
Example:
// C# program to illustrate the
// concept of nested class
// accessing non-static member
// of the outer class
using
System;
// Outer class
public
class
Outer_class {
// Non-static data
// member of outer class
public
int
number = 1000000;
// Inner class
public
class
Inner_class {
// Static method of Inner class
public
static
void
method1()
{
// Creating the object of the outer class
Outer_class obj =
new
Outer_class();
// Displaying the value of a
// static member of the outer class
// with the help of obj
Console.WriteLine(obj.number);
}
}
}
// Driver Class
public
class
GFG {
// Main method
static
public
void
Main()
{
// Accessing static method1
// of inner class
Outer_class.Inner_class.method1();
}
}
Output :
1000000
- The scope of a nested class is bounded by the scope of its enclosing class.
- By default, the nested class is private.
- In C#, a user is allowed to inherit a class (including nested class) into another class.
Example:
// C# program to illustrate the
// concept inheritance
using
System;
// Outer class
public
class
Outer_class {
// Method of outer class
public
void
method1()
{
Console.WriteLine(
"Outer class method"
);
}
// Inner class
public
class
Inner_class {
}
}
// Derived class
public
class
Exclass : Outer_class {
// Method of derived class
public
void
func()
{
Console.WriteLine(
"Method of derived class"
);
}
}
// Driver Class
public
class
GFG {
// Main method
static
public
void
Main()
{
// Creating object of
// the derived class
Exclass obj =
new
Exclass();
obj.func();
obj.method1();
}
}
Output :
Method of derived class Outer class method
- In C#, the user is allowed to inherit a nested class from the outer class.
leave a comment
0 Comments