zoukankan      html  css  js  c++  java
  • 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()
    
            {
    
    
    
            }
  • 相关阅读:
    219. Contains Duplicate II
    189. Rotate Array
    169. Majority Element
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    119. Pascal's Triangle II
    118. Pascal's Triangle
    88. Merge Sorted Array
    53. Maximum Subarray
    CodeForces 359D Pair of Numbers (暴力)
  • 原文地址:https://www.cnblogs.com/sunmarvell/p/11995419.html
Copyright © 2011-2022 走看看