三、C#面向对象编程(继承与多态)

在C#中,面向对象编程(OOP)是编程的基本范式,它使用类和对象的概念来构建软件应用程序。面向对象编程的三个主要特性是封装、继承和多态。

  1. 封装:封装是将数据(属性)和操作数据的函数(方法)捆绑到一个独立的实体(对象)中。这样做可以隐藏对象的内部状态,并提供一种控制对象外部代码访问该状态的方式。

    public class Car
    {
        public string Model { get; set; }
        public int EngineCapacity { get; set; }
    
        public void StartEngine()
        {
            Console.WriteLine("Engine started.");
        }
    }
    
  2. 继承:继承是子类自动获得父类所有非私有属性和方法的能力。子类可以添加或覆盖父类的成员。通过继承,可以创建更具体的类,从更一般的类中继承属性和方法。

    public class Engine
    {
        public void Start()
        {
            Console.WriteLine("Engine started.");
        }
    }
    
    public class Car : Engine // Car类继承自Engine类
    {
        public string Model { get; set; }
        public int EngineCapacity { get; set; }
    }
    
  3. 多态:多态意味着一个接口可以有多种实现方式,或者父类引用可以指向子类对象。多态允许程序在运行时确定对象的具体类型,并据此调用相应的方法。多态性是通过方法重写、接口实现和委托实现的。

    interface IShape 
    {
        void Draw();
    }
    
    class Circle : IShape 
    {
        public void Draw() 
        {
            Console.WriteLine("Drawing Circle...");
        }
    }
    
    class Rectangle : IShape 
    {
        public void Draw() 
        {
            Console.WriteLine("Drawing Rectangle...");
        }
    }
            
    class Program
    {
        static void Main(string[] args) 
        {
            IShape shape1 = new Circle(); // 引用类型为Circle的IShape对象 
            IShape shape2 = new Rectangle(); // 引用类型为Rectangle的IShape对象 
            shape1.Draw(); // 输出 "Drawing Circle..." 
            shape2.Draw(); // 输出 "Drawing Rectangle..." 
        }
    }
    

    在上面的例子中,IShape接口定义了一个Draw方法,CircleRectangle类都实现了这个接口。在Main方法中,我们创建了CircleRectangle类的实例,并分别通过IShape接口的引用进行调用。由于多态性,程序在运行时根据实际对象的类型来调用相应的方法。
    除了接口,委托也是实现多态性的一种方式。委托是一种类型安全的函数指针,允许你指向具有相同签名的任何方法。

public delegate void MyDelegate(string message);

public class Program
{
    public static void Main(string[] args)
    {
        MyDelegate del = new MyDelegate(ShowMessage);
        del("Hello World"); // 输出 "Hello World"
        del = new MyDelegate(ShowMessage2);
        del("Hello C#"); // 输出 "Hello C#"
    }

    public static void ShowMessage(string message)
    {
        Console.WriteLine(message);
    }

    public static void ShowMessage2(string message)
    {
        Console.WriteLine($"{message.ToUpper()} C#");
    }
}

在这个例子中,我们定义了一个名为MyDelegate的委托,它接受一个字符串作为参数。Main方法中创建了两个委托实例,一个指向ShowMessage方法,另一个指向ShowMessage2方法。当我们通过委托调用方法时,会根据实际指向的方法来执行相应的逻辑。

多态性是面向对象编程中非常强大的特性,它允许我们编写更灵活、可扩展的代码,并能够以更自然的方式表达现实世界中的概念。通过使用继承和接口,我们可以构建具有共同特性的类层次结构,并通过多态性在不同的类实例上执行相同的操作,而具体实现可以在运行时确定。

你可能感兴趣的:(c#,开发语言)