C# 抽象类

本文介绍了抽象类的概念及其特点,解释了纯虚函数的作用,并通过示例代码展示了如何使用抽象类及其实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象类的意思,就是这个类是抽象的,里面带有纯虚函数。不能创建实例。

纯虚函数,是在函数前加abstract ,只声明,不实现。实现在相应的子类中。类似虚函数的重写。

但是虚函数必须有定义,且可以不重写。而抽象类,子类必须实现父类中用abstract声明的函数

例子:

  abstract class A
    {
          abstract public void Fun();
    }

A的子类B,必须实现A的纯虚函数。子类C也是。

   class B:A
    {
        override public void Fun()
        {
            Console.WriteLine("B--shixian");
        }
    }

    class C:A
    {
        override public void Fun()
        {
            Console.WriteLine("C--shixian");
        }
    }


        static void Main(string[] args)
        {
            B b1 = new B();
            b1.Fun();
            C c1 = new C();
            c1.Fun();
        }

C# 编程中,抽象类是一种不能被实例化的特殊类,它主要作为其他类的基类[^4]。抽象类通过 `abstract` 关键字来定义,可以包含抽象成员、虚成员以及普通的具体实现成员[^4]。抽象类的设计目的是为了提供一个通用的基类,供其他类继承并实现其定义的抽象方法。 ### 抽象类的特点 - **不能直接实例化**:抽象类不能直接创建对象,只能通过派生类来实例化。 - **支持多种成员定义**:抽象类可以包含抽象方法(无实现,必须被子类重写)、虚方法(有默认实现,可选择性重写)以及普通方法(具体实现)[^4]。 - **构造函数与访问修饰符**:抽象类可以拥有构造函数,尽管它不能直接被实例化;同时支持 `public`、`protected`、`internal` 等访问修饰符。 - **单继承限制**:C# 中一个类只能继承一个抽象类,这与接口的多继承特性不同。 ### 如何定义与使用抽象类 抽象类的定义使用 `abstract` 关键字,例如: ```csharp abstract class Animal { public double Weight { get; set; } public void Run() { Console.WriteLine("I'm Running"); } public abstract void Talk(); } ``` 在上述代码中,`Animal` 是一个抽象类,其中 `Talk` 方法是一个抽象方法,没有具体的实现,需要在派生类中重写[^3]。 ### 抽象类的应用场景 抽象类通常用于定义一组类的公共接口或共享行为,特别是在这些类之间有明显的共性和需要共享代码的情况下。例如,在开发图形应用程序时,可以定义一个 `Shape` 抽象类,其中包含 `Area` 和 `Draw` 等方法,不同的形状类(如 `Circle`、`Rectangle`)可以继承 `Shape` 并提供各自的方法实现[^4]。 ### 示例:使用抽象类实现多态 ```csharp public abstract class Shape { public abstract double Area(); public virtual void Draw() { Console.WriteLine("绘制形状"); } public void PrintDescription() { Console.WriteLine($"这是一个图形,面积={Area()}"); } public abstract string Name { get; } } public class Circle : Shape { public double Radius { get; set; } public override double Area() => Math.PI * Radius * Radius; public override void Draw() { Console.WriteLine("绘制圆形 ○"); } public override string Name => "圆形"; } ``` 在这个例子中,`Circle` 类继承了 `Shape` 抽象类,并实现了 `Area`、`Draw` 和 `Name` 方法,展示了如何利用抽象类实现多态性和代码重用[^4]。 ### 总结 抽象类C# 中实现面向对象编程的重要工具之一,它不仅有助于提高代码的可读性和扩展性,还能促进代码的重用和维护。通过合理地使用抽象类,开发者可以构建出更加灵活和强大的应用程序架构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值