• C#继承


    继承特点:

    1、类只能继承一个类,不能多继承;

    2、可以继承基类中所有的方法、属性;

    3、所有类继承Object类;

    //C#中继承的语法为
    
    class ChildClass:ParentClass//冒号很重要
    
    {
    
    }
    
    //C#中只可以单继承,继承一个类,不能继承多个类

    隐藏方式:

    1、屏蔽数据成员:在派生类中声明名称和类型相同的成员;

    2、屏蔽函数(方法)成员:在派生类中声明新的带有相同函数签名的成员;

    3、让编译器知道:可以添加New关键字,否则会有警告。

     

    • 虚方法和多态

    编程原则:依赖倒置原则。即程序设计要依赖抽象类,而不依赖具体类。

    虚方法 :声明为vitual的方法就是虚方法。基类的虚方法可以在派生类中使用 override进行重写。

    多态:通过指向派生类的基类引用,调用虚函数,会根据引用所指向的派生类的实际类型,调用派生类中的同名重写函数,便是多态。

    方法、属性、索引器、事件、都可以声明为virtual或override   (重写虚方法方法属性必不能是private,static或者非虚方法不能被重写)

    构造函数;

    作用:派生类对象中,包含基类的信息,在执行派生类的构造函数的时候,会先去隐式或显式的,调用基类构造函数。因为是有了基类才有派生类

    调用顺序:引用类的 实例成员初始化>基类>引用类


    protected 关键字是一个成员访问修饰符。 受保护成员在其所在的类中可由派生类实例访问

    • 抽象类:

    抽象类里面是不能有函数体的,只有声明 ,只有在子类中重写才可以使用

    1、抽象类的存在只有一个目的,就是继承;

    2、抽象类不能实例化,用abstract修饰;

    3、抽象类可以包含抽象成员和普通成员,以及他们的任何组合;

    4、抽象类的抽象成员在派生类中需要用override关键字实现;

    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Text;
    
    using System.Threading.Tasks;
    
    
    
    namespace ConsoleApp2
    
    {
    
        abstract class Pet
    
        {
    
            protected string _Name;
    
            public Pet(string name)
    
            {
    
                _Name = name;
    
            }
    
            public void a()
    
            {
    
                Console.WriteLine("size:");
    
            }
    
    
    
            virtual public void b()
    
            {
    
                Console.WriteLine("fb:");
    
            }
    
    
    
             public void c()
    
            {
    
                Console.WriteLine(_Name);
    
            }
    
    
    
            abstract public void d();
    
        }
    
        class Cat:Pet
    
        {
    
            public Cat(string name) :base( name)
    
            {
    
            }
    
            new public void a()
    
            {
    
                Console.WriteLine("13:");
    
            }
    
    
    
            override public void b()
    
            {
    
                base.b();
    
            }
    
    
    
            override public  void d()
    
            {
    
    
    
            }
    
        }
    
        class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                //Console.Write("input:");
    
                //string a = Console.ReadLine();
    
                //Console.WriteLine(":" + a);
    
                ////得到字节长度
    
                //Console.WriteLine("size:" + sizeof(int));
    
                int[,] bb = new int[0,1];
    
                Cat b = new Cat("66");
    
                b.a();
    
                b.b();
    
                b.c();
    
                Console.ReadKey();
    
            }
    
        }
    
    }
    • 密封类、密封方法:

    1、有些类不希望通过其他人继承;

    2、不希望被重写;

    1、如果是基类方法不希望子类对其重写,就不声明为virtual

    2、如果是派生类不希望其子类(即派生类的派生类)对其进行重写,同时是override重写,就可以使用sealed机制(即同时使用override和sealed)

    //加sealed 子类不能再继承
    
            sealed override public  void d()
    
            {
    
    
    
            }
  • 相关阅读:
    六. 异常处理5.多重catch语句的使用
    六. 异常处理4.try和catch的使用
    六. 异常处理3.未被捕获的异常
    六. 异常处理2.异常类型
    对mysql数据库中字段为空的处理
    mysql 中实现多条数据同时更新
    java 用PDFBox 删除 PDF文件中的某一页
    java7 java MethodHandle解析
    【十四】jvm 性能调优实例
    【十三】jvm 性能调优工具之 jstack
  • 原文地址:https://www.cnblogs.com/sunmarvell/p/11995419.html
Copyright © 2020-2023  润新知