类的继承与方法的重写,virtual与abstract 的区别

abstract 类,即抽象类不能实例化,只能由子类继承

abstract 方法、属性 必须被子类实现

virtual 方法 可以在子类重写,也可以不重写

virtual方法可以被子类重写,子类继承父类后,如果子类方法没有重写父类方法则调用父类,子类有重写则调用重写方法,不管调用发生在子类还是父类

        
    
        public void text() {
    //DataAnalyze a= new DataAnalyze(); 抽象方法不能被实例化
            ETJX etj = new ETJX();
            etj.Analyze();//调用父类方法,再调用子类重写的方法SaveToDB
            DataAnalyze baseAnalyze = etj;
            baseAnalyze.Analyze();
            baseAnalyze = new ECMECC();
            baseAnalyze.Analyze();
        }

        public abstract class DataAnalyze
        {
            public DataAnalyze()
            {
                Name = "DataAnalyze";
            }
            public abstract string Name { get; set; }

            public virtual void Analyze()
            {
                Console.WriteLine(Name);

                SaveToDB();
            }

            public virtual void SaveToDB()
            {
                Console.WriteLine("DataAnalyze保存到数据库");
            }
        }
        public class ETJX : DataAnalyze
        {
            public ETJX()
            {
                Name = "ETJX";
            }
            public override string Name { get; set; }

            public override void SaveToDB()
            {
                Console.WriteLine("ETJX保存到数据库");
            }
        }
        public class ECMECC : DataAnalyze
        {
            public ECMECC()
            {
        
            }
            public override string Name { get; set; }
            //public override void Analyze()
            //{
            //    Console.WriteLine(Name);
            //}
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中的各种名词: 常数:声明时用const修饰,是隐式静态型 域:一个代表和某对象或相关的变量的成员 字段:和属性相同,是用来存储对象的值,可以直接访问数据且不能对数据添加任何限制,但是属性不能且可以对数据添加访问限制。一个在或结构的定义中声明的变量。可以被这个或者结构的所有成员函数(方法、构造函数)使用,可以是值型或引用型,主要有实例字段和静态字段。区别于局部变量在于局部变量只能被给定的函数或代码块使用 属性:一种用于访问对象或的特性的成员。属性的访问器是一种使属性可以像公共数据成员一样被使用的特殊方法(get/set方法)。属性结合了字段和方法的多个方面,对于对象的用户,它显示为字段;对于实现者,它是一个或两个代码块(用于表示get/set访问器)。写的时候使用System.Serializable属性以便使的成员可以序列化 方法:是一种用于实现可以由对象或执行的计算或操作的成员。方法主要是和相关联的动作,它是的外部界面,对于那些私有的字段来说,外部界面实现对它们的操作一般只能通过方法实现方法或结构中声明,声明时需要制定访问级别、返回值、方法名称及方法参数。一个方法的签名由它的名称以及它的形参的个数、修饰符和型组成。方法的签名是方法的唯一标识(同一个中的区别标识)。 方法的重载:是指方法名相同,但参数型、个数或顺序不同的方法,与返回值无关(同一或子之间) 方法重写:子对父方法的重新实现(方法头相同,方法体即代码块不同) 事件:是使得对像和提供通知的成员。一个通过提供事件声明来定义一个事件,这看起来与域和事件声明相当似,但是有一个event关键字。这个声明的必须是delegate型。如下例子: public delegate void EventHandler(object sender, Event e); public class Button { public event EventHandler Click; public void Reset() { Click = null; } } 索引:是使得对象可以像数组一样被索引的成员 结构:一种值型,几个数据组成的数据结构。向方法传递结构时,是通过传值方式传递的,结构实例化可以不用new,结构可以声明构造函数,但必须带参数,且声明的构造函数是用来对成员初始化的,必须包含每个字段。结构不能从另一个结构或继承而来,但可以实现接口,结构中不能初始化实例。结构存储在栈中且只用来表示小的数据结构,存储在托管堆中 :是一种数据结构,是具有相同或相似结构、操作和约束规则的对象组成的集合。算法和数据结构的集合(对象),具有封装、继承、多态等特点。父—基、子—派生的多态是指不同的进行同一操作可以有不同的行为。是相同对象的集合,并为这些对象定义了编程语言上的属性和方法修饰符:new在声明时使用,public公共的,访问不受限,protected只能从其所在和所在的子中进行访问,internal只有其所在才能进行访问,private私有的,abstract抽象,不能实例化,sealed密封,不能被继承 虚拟成员:声明为virtual成员 析构函数:以名+~来命名的,不能有参数,不能有任何修饰符而且不能被调用。当某个的实例被认为不再有效并符合析构条件时,.NET Framework库的垃圾回收功能就会调用该的析构函数实现垃圾回收,一个只能有一个析构函数。一般准则是,除非有迫不得已的原因,不要使用析构函数,而应把清楚操作交给运行时完成 接口:声明的所有成员隐式的为public和abstract。在命名空间中声明的接口可以被授予public或internal访问型。嵌套的接口可以被授予public、protected、internal、protected internal或private访问型。默认为internal.接口的成员隐式的被声明为public和abstract访问型且没有实现没有修饰符 密封:密封不能作为基继承,但可以继承别的或接口,密封中不能声明受保护的成员或虚成员,密封不能声明为抽象的,声明密封用sealed.密封方法只能用于对基的虚方法进行实现,声明密封方法时同时使用sealed和override且必须通过重写中的虚方法实现 名称空间:似java中的包 集合: 代表: 访问修饰符:private、public、protected、internal:局部的 readonly:只读修饰符 new(新的)、static(静态的)、virtual(虚拟的)、override()、sealed(密封的)、abstranct(抽象的)、extern(外面的) 派生调用基方法可以使用base关键字,如base.Method();

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值