Object-Oriented Programming in C# 3.0: An In-Depth Exploration

Object-Oriented Programming in C# 3.0: An In-Depth Exploration

Inheritance, Encapsulation, and Polymorphism: The Cornerstones of OOP

Object-oriented programming (OOP) is a fundamental concept in software development, and C# 3.0 is a popular programming language that embodies the principles of OOP. In this article, we will delve into the three essential features of OOP: inheritance, encapsulation, and polymorphism.

Inheritance: Deriving New Classes from Existing Ones

Inheritance is a mechanism that allows a new class to inherit the properties and behavior of an existing class. This is achieved by creating a subclass that extends the parent class, inheriting its members and behavior. In C# 3.0, inheritance is implemented using the class keyword, which is used to define a new class.

Encapsulation: Hiding Implementation Details

Encapsulation is the concept of hiding the implementation details of an object from the outside world, exposing only the necessary information through public interfaces. In C# 3.0, encapsulation is achieved through the use of access modifiers, such as public, private, protected, and internal.

Polymorphism: Providing Multiple Implementations

Polymorphism is the ability of an object to take on multiple forms, depending on the context in which it is used. In C# 3.0, polymorphism is achieved through the use of method overriding and method overloading.

Class Definition and Access Modifiers

A class definition in C# 3.0 is defined using the class keyword, followed by the class name and a set of curly brackets {} that contain the class members. Access modifiers are used to control access to class members, and are classified into four categories:

  • Public: accessible from anywhere
  • Private: accessible only within the class
  • Protected: accessible within the class and its subclasses
  • Internal: accessible only within the same assembly

Class Members

Class members are the properties and methods of a class, and can be divided into two categories:

  • Constant members: constant values associated with the class
  • Instance members: variables and methods that are associated with an instance of the class

Accessing Class Members

Class members can be accessed using the this keyword, which refers to the current instance of the class. The this keyword can be used to access class members, and is used in the following ways:

  • Constructor: used to initialize the object
  • Method: used to perform complex calculations and operations
  • Property: used to get or set the value of a property

Constant Members

Constant members are declared using the const keyword, followed by the data type and the constant value. Constant members are immutable, and cannot be changed once they are declared.

Example Code

The following example demonstrates the use of inheritance, encapsulation, and polymorphism in C# 3.0:

using System;

// Define an abstract class Animal
public abstract class Animal
{
    // Define a public property color
    public string Color { get; set; }

    // Define a private property name
    private string name;

    // Define a protected property height
    protected int Height { get; set; }

    // Define an abstract method printName
    public abstract void PrintName();
}

// Define a subclass Dog that extends Animal
public class Dog : Animal
{
    // Define a public property name
    public string Name { get; set; }

    // Define a public method printName
    public override void PrintName()
    {
        Console.WriteLine("My name is " + Name);
    }

    // Define a private method printColor
    private void PrintColor()
    {
        Console.WriteLine("My color is " + Color);
    }

    // Define a public method printDog
    public void PrintDog()
    {
        PrintName();
        PrintColor();
    }
}

// Define a subclass SBC that extends Dog
public class SBC : Dog
{
    // Define a public property name
    public string Name { get; set; }

    // Define a public method disp
    public void Disp()
    {
        Console.WriteLine("SBC d = " + Name);
        Console.WriteLine("Dog d = " + Dog.Name);
    }

    // Define a constructor for SBC
    public SBC(string name, string color) : base(name, color)
    {
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of Dog
        Dog dog = new Dog("dog", "black");

        // Call the PrintName method
        dog.PrintName();

        // Call the PrintDog method
        dog.PrintDog();

        // Create an instance of SBC
        SBC sbc = new SBC("sbc", "yellow");

        // Call the PrintDog method
        sbc.PrintDog();

        // Call the Disp method
        sbc.Disp();

        Console.ReadLine();
    }
}

This example demonstrates the use of inheritance, encapsulation, and polymorphism in C# 3.0, and shows how these concepts can be used to create a robust and maintainable software system.