C#(十九)之抽象类abstract

简介: 本篇内容记录了C#中的抽象类的一些特点。

QQ图片20220426110546.jpg

C#中的抽象类(abstract)


1:抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法


2:抽象类不能被实例化


3:抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类


4:具体派生类必须覆盖基类的抽象方法


5:抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。


6:抽象类中的非抽象方法,如果该方法是静态,直接通过类调用就好,如果不是静态的,则需要通过继承这个抽象类的子类实例化的对象来调用。


7:抽象类中包含属性、虚方法、普通方法、抽象方法、构造方法、普通成员变量、静态成员变量


8:抽象类的成员可以使用公有或其他修饰符,接口中成员是隐式公有的,不需要修饰;


9:抽象类是概念的抽象,接口注重行为,抽象类不支持多重继承,而一个类可以实现多个接口。


下边是实例:


using System;
namespace @abstract
{
    class Program
    {
        static void Main(string[] args)
        {
            // 实例化对象
            son son = new son();
            // 调用重写后的抽象方法
            son.getClass();
            // 调用抽象类中非抽象方法
            son.GetResult();
            // 调用抽象类中的静态非抽象方法
            AbsClass.GetUser();
            Console.ReadLine();
        }
    }
    /// <summary>
    /// 子类,继承抽象类
    /// </summary>
    public class son : AbsClass
    {
        public override void getClass()
        {
            Console.WriteLine("我继承了AbsClass抽象类,并实现了其中的方法");
        }
    }
    /// <summary>
    /// 声明一个抽象类
    /// </summary>
    public abstract class AbsClass
    {
        /// <summary>
        /// 非抽象的字段
        /// </summary>
        public int number;
        /// <summary>
        /// 构造函数
        /// </summary>
        public AbsClass()
        {
            number = 10;
        }
        /// <summary>
        /// 非抽象方法
        /// </summary>
        public void GetResult()
        {
            Console.WriteLine("非抽象方法:非抽象变量值为"+ number);
        }
        /// <summary>
        /// 非抽象静态方法
        /// </summary>
        public static void GetUser()
        {
            Console.WriteLine("我是非抽象静态方法");
        }
        /// <summary>
        /// 抽象方法
        /// </summary>
        public abstract void getClass();
    }
}


上边的抽象类的例子可能不是很生动,具体的可以参考我在掘金的关于设计模式的一篇文章《设计模式(十六)之抽象工厂模式》这篇文章使用的语言就是C#,里边有很生动的例子



目录
相关文章
|
2月前
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
118 5
|
6月前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
63 0
|
设计模式 自然语言处理 C#
C#OOP之八 继承 接口和抽象类
C#OOP之八 继承 接口和抽象类
50 0
|
6月前
|
C# 索引
C#学习相关系列之abstract和virtual用法
C#学习相关系列之abstract和virtual用法
|
6月前
|
C# 开发者 索引
C# 11.0中的所需成员:强化接口与抽象类的约束
【1月更文挑战第24天】C# 11.0引入了所需成员(Required members)的概念,这一新特性允许在接口和抽象类中定义必须被实现的成员,包括方法、属性、索引器和事件。通过所需成员,C# 强化了对接口实现和抽象类继承的约束,提高了代码的一致性和可维护性。本文将详细探讨C# 11.0中所需成员的工作原理、使用场景及其对现有编程模式的影响。
C#学习virtual(虚拟的)和abstract(抽象的)的区别
C#学习virtual(虚拟的)和abstract(抽象的)的区别
118 0
|
C#
C# 基础一 抽象方法 抽象类声明及使用(源码案例)
C# 基础一 抽象方法 抽象类声明及使用(源码案例)
123 10
|
C# 索引
走进C# abstract,了解抽象类与接口的异同
走进C# abstract,了解抽象类与接口的异同
109 0
|
C#
使用C# (.NET Core) 实现抽象工厂设计模式 (Abstract Pattern)
本文的概念性内容来自深入浅出设计模式一书. 上一篇文章讲了简单工厂和工厂方法设计模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 文将继续使用这个例子, 这里要用到抽象工厂.
1366 0