亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

掌握 C# 抽象类与抽象方法:实战指南

掌握 C# 抽象类与抽象方法

通过清晰示例、继承模式、构造函数与真实用例,探索 C# 抽象类与抽象方法。

抽象类

C# 中抽象类作为模板不可直接实例化。abstract 关键字表明类旨在被子类化。例如:

// 定义抽象类
abstract class Language {
    // 字段和方法
}
// 尝试创建实例将报错
// Language obj = new Language();

抽象类可同时包含抽象方法(仅声明无实现)和具体方法(完整实现)。例如:

abstract class Language {
    // 抽象方法 – 无方法体
    public abstract void Display();
    // 具体方法 – 有实现
    public void DisplayInfo() {
        Console.WriteLine("Concrete method in abstract class");
    }
}

继续前请确保熟悉 C# 继承概念。


继承抽象类

因抽象类不可直接实例化,必须创建继承它的具体子类。子类继承抽象类成员,可通过派生对象使用。示例:

using System;
namespace AbstractClassDemo {
    abstract class Language {
        public void Display() {
            Console.WriteLine("Concrete method in abstract class");
        }
    }
    // 具体子类
    class Program : Language {
        static void Main(string[] args) {
            Program prog = new Program();
            prog.Display();
            Console.ReadLine();
        }
    }
}

输出

Concrete method in abstract class

Language 为抽象,Program 继承并可调用 Display()。注意抽象类不能为 sealed,必须作为基类型。

注意: 当多个派生类型需实现通用契约时使用此模式。


C# 抽象方法

抽象方法仅声明签名无方法体。强制非抽象派生类提供实现。例如:

public abstract void Display();

仅抽象类可包含抽象方法。具体子类继承时,必须重写所有抽象成员(除非自身也声明为 abstract)。

示例:实现抽象方法

using System;
namespace AbstractClassDemo {
    abstract class Animal {
        public abstract void MakeSound();
    }
    class Dog : Animal {
        public override void MakeSound() {
            Console.WriteLine("Bark Bark");
        }
    }
    class Program {
        static void Main(string[] args) {
            Dog dog = new Dog();
            dog.MakeSound();
            Console.ReadLine();
        }
    }
}

输出

Bark Bark

Animal 声明抽象方法 MakeSound()。具体子类 Dog 提供重写,履行契约。

注意: 抽象方法隐式为 virtual,故不允许也无需 virtual 关键字。


带 Get/Set 的抽象属性

抽象访问器允许派生类为属性 get/set 提供自定义逻辑。示例:

using System;
namespace AbstractClassDemo {
    abstract class Animal {
        protected string name;
        public abstract string Name { get; set; }
    }
    class Dog : Animal {
        public override string Name {
            get { return name; }
            set { name = value; }
        }
    }
    class Program {
        static void Main(string[] args) {
            Dog dog = new Dog();
            dog.Name = "Tom";
            Console.WriteLine("Name: " + dog.Name);
            Console.ReadLine();
        }
    }
}

输出

Name: Tom

派生类实现抽象属性,实现封装状态管理。


抽象类中的构造函数

抽象类可定义构造函数初始化所有子类共享的状态。创建子类实例时,抽象类构造函数先执行。示例:

using System;
namespace AbstractClassDemo {
    abstract class Animal {
        public Animal() {
            Console.WriteLine("Animal Constructor");
        }
    }
    class Dog : Animal {
        public Dog() {
            Console.WriteLine("Dog Constructor");
        }
    }
    class Program {
        static void Main(string[] args) {
            Dog d1 = new Dog();
            Console.ReadLine();
        }
    }
}

输出

Animal Constructor
Dog Constructor

子类也可定义析构函数用于清理逻辑。

注意: 构造函数适合设置所有派生类型所需的共享资源。


通过抽象类实现 C# 抽象

抽象类提供抽象机制:隐藏实现细节,暴露清晰接口。通过关注“做什么”而非“怎么做”简化复杂系统。

现实类比:摩托车刹车系统。刹车的外部行为——减速或停车——一致,但底层机制因车型而异。抽象类让每个车型实现独特刹车逻辑而不改变外部契约。

示例:摩托车刹车

using System;
namespace AbstractClassDemo {
    abstract class MotorBike {
        public abstract void Brake();
    }
    class SportsBike : MotorBike {
        public override void Brake() {
            Console.WriteLine("Sports Bike Brake");
        }
    }
    class MountainBike : MotorBike {
        public override void Brake() {
            Console.WriteLine("Mountain Bike Brake");
        }
    }
    class Program {
        static void Main(string[] args) {
            SportsBike s1 = new SportsBike();
            s1.Brake();
            MountainBike m1 = new MountainBike();
            m1.Brake();
            Console.ReadLine();
        }
    }
}

输出

Sports Bike Brake
Mountain Bike Brake

MotorBike 声明抽象方法 Brake()。各具体车类提供特定实现,展示多态性。

注意: 若需完全抽象(无任何基础实现),考虑使用接口。

C语言

  1. C# 类与对象:面向对象编程的基石
  2. 理解 C# 分部类与分部方法
  3. 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
  4. C++类与对象:面向对象编程实战指南
  5. C++ 友元函数与友元类:突破访问控制的利器
  6. C# 抽象类实战教程:从定义到派生的完整代码示例
  7. C++接口编程:抽象类与纯虚函数实现规范契约
  8. Java 类与对象:实用指南
  9. Java 抽象类与抽象方法完全指南
  10. 精通 Java 嵌套类与内部类:类型、示例与最佳实践
  11. 精通 Java:理解对象、类与核心 OOP 概念
  12. Java 抽象类与抽象方法:规范契约、强制实现与模板模式