C# 抽象类理解与使用

简介: 一、一码当先---代码清单 抽象基类People /// /// 抽象基类 /// public abstract class People { public string Name...
一、一码当先---代码清单

抽象基类People


   ///
    ///    抽象基类  
    /// 
    public abstract class People
    {
        public string Name;
        public string Gender;

        public People(string outName, string outGender)
        {
            Name = outName;
            Gender = outGender;
        }

        /*      一个抽象方法,现在的人都上网,不同的人上网的目的是什么
                基类的中抽象方法不用实现 */
        public abstract void SearchInternet();
    }
派生类学生



    public class Student : People
    {
        string StudentNum;

        /// 
        /// base(outName,outGender)同时去初始化抽象类中的两个数据成员
        /// 
        /// 
        /// 
        /// 
        public Student(string outName, string outGender, string outStuNum)
            : base(outName, outGender)
        {
            Name = outName;
            Gender = outGender;
            StudentNum = outStuNum;
        }

        public override void SearchInternet()
        {
            Console.WriteLine("这个人名叫" + Name + ",性别:" + Gender + ",工号:" + StudentNum + ",他上网的目的是查找习题答案\\n");
        }
    }
派生类老师



    public class Teacher : People
    {
        string TeachNum;

        public Teacher(string outName, string outGender, string outTNum)
            : base(outName, outGender)
        {
            Name = outName;
            Gender = outGender;
            TeachNum = outTNum;
        }

        public override void SearchInternet()
        {
            Console.WriteLine("这个人名叫" + Name + ",性别:" + Gender + ",工号:" + TeachNum + ",他上网的目的是发布习题答案\\n");
        }
    }
测试程序段



namespace AbstractClass
{
    class Program
    {
        enum PEOPLE
        { 
            STUDENT = 1,
            TEACHER,
            EXIT
        }

        static void Main(string[] args)
        {
            int peopleObj = -1;
            string tmpName = "";
            string tmpGender = "";
            string teacherNum = "";
            string studentNum = "";
            bool isExit = false;

            Student studentA; 
            Teacher teacherA; 

            while (true)
            {
                Console.WriteLine("------------测试人上网的原因,超级准 ^ V ^ -------------------\\n");
                Console.WriteLine("请选择你要创建的角色: \\n");
                Console.WriteLine("       1 学生\\n    ");
                Console.WriteLine("       2 教师\\n    ");
                Console.WriteLine("       3 退出\\n    ");
                Console.WriteLine("------------------------------------------------------------------\\n");
                
                /*  C#的强大之处,判断输入是否为数字,直接有一个API!不知是好还是坏事  */
                if (int.TryParse(Console.ReadLine(), out peopleObj) == false)
                {
                    Console.WriteLine("输入的数字不合法!请输入整数(1~3)\\n");
                    Console.ReadLine();
                }
                else
                { }

                switch (peopleObj)
                {
                    case (int)PEOPLE.STUDENT:
                        Console.WriteLine("请输入学生名字:\\n");
                        tmpName = Console.ReadLine().Trim();
                        Console.WriteLine("请输入学生性别:\\n");
                        tmpGender = Console.ReadLine().Trim();
                        Console.WriteLine("请输入学生学号:\\n");
                        studentNum = Console.ReadLine().Trim();
                        studentA = new Student(tmpName, tmpGender, studentNum);
                        studentA.SearchInternet();
                        Console.ReadLine();
                        break;

                    case (int)PEOPLE.TEACHER:
                        Console.WriteLine("请输入教师名字:\\n");
                        tmpName = Console.ReadLine().Trim();
                        Console.WriteLine("请输入教师性别:\\n");
                        tmpGender = Console.ReadLine().Trim();
                        Console.WriteLine("请输入教师工号:\\n");
                        teacherNum = Console.ReadLine().Trim();
                        teacherA = new Teacher(tmpName, tmpGender, teacherNum);
                        teacherA.SearchInternet();
                        Console.ReadLine();
                        break;

                    case (int)PEOPLE.EXIT:
                        isExit = true; 
                        break;
                    default:
                        break;
                }

                /* 控制台清屏 */
                Console.Clear();

                if (isExit)
                    break;
            }
        }
    }
}



二、码到成功---现场展示


img_d2e8b0558572b5699c8c45058617e3f1.jpg

img_e7264ef8bd34efe387017c9e6b29fa48.jpg

img_db79ffa2f64b0710dc9298bbdc3c094e.jpg
img_928bdadd5899fd6cb345a301e94e687d.jpg


三、码后炮---原理讲解

1、什么是抽象类?

用来作为派生类的基类,定义时使用abstract修饰,如public abstract class xxx。

2、抽象类与非抽象类的区别

(1)不能被实例化,只有通过继承它才具有生命力;

(2)可以包含抽象成员,非抽象类不能;抽象方法只能出现在抽象类中,但抽象类中的方法并不全是抽象方法,如构造函数及其它方法。

 

3、抽象方法

(1) 声明时使用abstract修饰;

(2)不能使用后面修饰词,virtual,private,static等;

(3)在抽象类中不提供实现

 

四、源码附件


相关文章
|
3月前
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
130 5
|
7月前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
77 0
|
设计模式 自然语言处理 C#
C#OOP之八 继承 接口和抽象类
C#OOP之八 继承 接口和抽象类
55 0
|
7月前
|
C# 开发者 索引
C# 11.0中的所需成员:强化接口与抽象类的约束
【1月更文挑战第24天】C# 11.0引入了所需成员(Required members)的概念,这一新特性允许在接口和抽象类中定义必须被实现的成员,包括方法、属性、索引器和事件。通过所需成员,C# 强化了对接口实现和抽象类继承的约束,提高了代码的一致性和可维护性。本文将详细探讨C# 11.0中所需成员的工作原理、使用场景及其对现有编程模式的影响。
|
C#
C# 基础一 抽象方法 抽象类声明及使用(源码案例)
C# 基础一 抽象方法 抽象类声明及使用(源码案例)
126 10
|
C# 索引
走进C# abstract,了解抽象类与接口的异同
走进C# abstract,了解抽象类与接口的异同
116 0
|
设计模式 C#
C#(十九)之抽象类abstract
本篇内容记录了C#中的抽象类的一些特点。
259 0
C#(十九)之抽象类abstract
|
C#
艾伟:C#中抽象类和接口的区别
对于抽象类以及接口的概念,大家都容易把这两者搞混,其实我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口,弄的我就更糊涂了,所以找了些网上的资料。      一、抽象类:      抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。
867 0