In the object-oriented programming paradigm, inheritance plays a crucial role in code reusability and creating a hierarchy of classes. In C#, a derived class can inherit the characteristics (methods, properties, fields) of a base class, allowing the derived class to extend or modify its behavior.
To create an inheritance relationship between two classes, the derived class is defined with a colon followed by the base class. Here's the syntax:
class DerivedClass : BaseClass
{
// ...
}
By specifying the base class after the colon, the derived class now has access to all the members (public or protected) of the base class. These members can be accessed and utilized directly within the derived class.
One of the primary motivations for inheritance is to extend the functionality of the base class. Derived classes can add new methods, properties, or fields, and even modify the existing ones inherited from the base class.
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a shape...");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle...");
}
}
In the above example, the Shape
class serves as the base class, providing a basic implementation of the Draw
method. The Circle
class, which derives from Shape
, can then override the Draw
method to add a specific functionality of drawing a circle. By calling the Draw
method on an instance of Circle
, the overridden implementation will be invoked.
When it comes to inheritance, access modifiers play a significant role in determining the accessibility of inherited members.
public
, it remains accessible to the derived class and any external code using the derived class.protected
, it becomes accessible within the derived class, but not from external code that uses the derived class.private
, it is inaccessible to the derived class.C# supports single inheritance, which means a class can only inherit from one base class. However, a class can implement multiple interfaces, providing a way to achieve similar functionality as multiple inheritance.
Interfaces define a contract that must be implemented by a class, allowing it to inherit behaviors from multiple sources. This feature helps in achieving flexibility and code reuse without the limitations of multiple inheritance.
interface IShape
{
void Draw();
}
interface IResizable
{
void Resize(int width, int height);
}
class Rectangle : IShape, IResizable
{
public void Draw()
{
Console.WriteLine("Drawing a rectangle...");
}
public void Resize(int width, int height)
{
Console.WriteLine($"Resizing rectangle to {width}x{height}...");
}
}
In the above example, the Rectangle
class implements both the IShape
and IResizable
interfaces. As a result, the class must provide implementations for all the methods defined in the interfaces. This allows the Rectangle
class to inherit the behaviors of both interfaces.
Inheritance is a fundamental concept in C# programming that enables code reuse, extensibility, and the creation of class hierarchies. By inheriting from a base class, a derived class gains access to its members, which can be further extended or modified based on the specific requirements. Understanding inheritance in C# is crucial for developing robust and maintainable object-oriented programs.
noob to master © copyleft