C#抽象类和抽象方法
admin
2023-08-03 16:00:06
0

如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract时就是抽象方法


  1. 抽象类概述及声明


抽象类与非抽象类的主要区别:


①.抽象类不能直接被实例化;


②.抽象类中可以只有抽象方法,也可以只有非抽象方法,也可以抽象方法、非抽象方法都有。(非抽象     类中不能有抽象方法);


③.抽象类不能被密封。


以上会在下面例子中一一验证:  

class Program
    {
        static void Main(string[] args)
        {
            M m = new M();//错误提示:无法创建抽象类或接口M的实例。验证了①,抽象类和接口不能被实例化

        }
    }

    public abstract class M
    {
        public void A()
        {
            Console.WriteLine("调用了A方法");
        }

        public abstract void B() //错误提示:M.B()无法声明主体,因为它标记为abstract。也就是说,抽象方

法不能有方法体。
        {
            Console.WriteLine("调用了B方法");
        }

        public abstract void G();
    }

    public class C
    {
        public abstract void H();//错误提示:C.D()是抽象的,但它包含在非抽象类C中。再对比 M 类中的方法A()、B()来看,就验证了②:非抽象类中不能有抽象方法;抽象类中可以只有抽象方法,也可以只有非抽象方法,也可以抽象方法、非抽象方法都有。

        public void D()
        {

        }
     
    }

    public sealed abstract class E //错误提示:E 是抽象类,它不能是密封(sealed)或静态(static)的。这就验证了③。
    {

    }

    public static abstract class F //错误提示:F 是抽象类,它不能是密封(sealed)或静态(static)的。这就验证了③。
    {

}


2.抽象方法概述及声明


声明抽象方法时需注意:


①.抽象方法必须声明在抽象类中(上面已经验证); 

②.声明抽象方法时,不能使用virtual、static、private、sealed修饰符;

③.在抽象类中抽象方法不提供实现。


下面例子中会一一验证: 

class Program
    {
        static void Main(string[] args)
        {
        }
    }

    public abstract class M
    {
        public abstract void A();

        public virtual abstract void B();//错误提示:抽象方法 B 不能标记为 virtual。因为虚方法和抽象方法属于同一个等级的,并列关系。

        public static abstract void C();//错误提示:静态成员 C不能标记为overrid、virtual或abstract。

        private abstract void D();  //错误提示:虚拟成员或抽象成员不能是私有的。因为虚拟成员是让继承类来override的,如果是private,继承类都不能看见;抽象方法要是私有的话,这个抽象方法所在的抽象类的子类就没法实现这个抽象方法,看不见。

        A();//抽象方法在自己的抽象类中不能有方法体,所以不能在本类中实现。要在继承类中实现。

    }


3.抽象类与抽象方法的使用


直接举例子:

using System;
using System.Collections.Generic;
using System.Text;
namespace _
{
    public abstract class myClass
    {
        private string id = "";
        private string name = "";
        /// 
        /// 编号属性及实现
        /// 
        public string ID
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        /// 
        /// 姓名属性及实现
        /// 
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        /// 
        /// 抽象方法,用来输出信息
        /// 
        public abstract void ShowInfo();
    }

    public class DriveClass:myClass                     //继承抽象类
    {
        /// 
        /// 重写抽象类中输出信息的方法
        /// 
        public override void ShowInfo()
        {
            Console.WriteLine(ID + " " + Name);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //实例化派生类
            DriveClass driveclass = new DriveClass();  
           
            //使用派生类对象实例化抽象类
            myClass myclass = driveclass;    
           
            //使用抽象类对象访问抽象类中的编号属性           
            myclass.ID = "BH0001";
          
            //使用抽象类对象访问抽象类中的姓名属性                 
            myclass.Name = "TM";                        
           
            //使用抽象类对象调用抽象类中的的抽象方法
            myclass.ShowInfo();                         
        }
    }
}


上例中通过派生类的对象driveclass来实例化抽象类,然后使用抽象类访问抽象类中的属性及方法。


相关内容

热门资讯

别用“完美受害者”逻辑,羞辱那... 撰文丨余本鲁真没想到,长沙女干部占车位事件,这么一个原本鸡毛蒜皮的小事,竟闹到这般程度。说是“鸡毛蒜...
中国一天连射三箭,回敬美国和它... 中国周日一天内连发三项声明,回敬借“南海仲裁”10周年挑衅中国的美国、日本等西方国家。说实话,要不是...
霸占车位的体育局干部彭某曦,她... 就在刚刚,后台很多读者给我留言,说我昨天的文章写得很好呀,怎么不见了?对此我想说的是,我也不知道为什...
全程锁定 看人工智能如何赋能台... 台风“巴威”持续逼近我国东南沿海。在台风生成之初,上海市气象局的人工智能气象模型就已全程锁定、动态追...
脉流科技获WIPO全球奖 本报讯 (记者 张苗 李洁薇 实习生 金玉鑫) 当地时间7月10日,在瑞士日内瓦举行的2026年联合...
山东济宁:让机器人“跑”进千行... 盛夏时节,孔孟之乡迎来一场科技与产业深度交融的大会。7月11日至13日,由山东省机器人行业协会、中国...
外交部亚洲司负责人就日方涉“南... 2026年7月12日,外交部亚洲司负责人就日本外相炒作“南海仲裁案裁决”出台十年发表谈话、日伙同他国...
全球首款可变形个人机器人,上纬... IT之家 7 月 12 日消息,上纬新材今日发布启元 T1 实机视频,号称“全球首款可变形个人机器人...
腾讯重仓一个IPO 图片来源:视觉中国 作者/杨继云 报道/投资界PEdaily 深圳超级IPO来了。 日前,深圳云豹智...
乌方称“俄军9成导弹和无人机有... 近日,乌克兰总统顾问弗拉修克在接受日本共同社的采访时声称,俄军在进攻乌克兰时使用的巡航和弹道导弹及无...