• 面向对象 多态 、 类库、泛型集合


    多态:

    概念:当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,在调用该方法的时候表现出的不同就称为多态

    条件:必须要有继承  父类引用指向子类实例  子类必须对父类的方法进重写

    1、虚方法 virtual
        重写 override

    父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法使用的是override关键字

    class Program
        {
            static void Main(string[] args)
            {
             DongWu dw = new Dog();            
           Dog d = new Dog();
                Console.WriteLine(Ceshi(dw));
                Console.WriteLine(CeShi(d));
                Console.ReadLine();
            }
    
            public static string CeShi(DongWu d)
            {
                return "ok";
            }
        }
    
        class DongWu
        {
            public virtual string Eat() //虚方法
            {
                return "该动物在吃饭";
            }
        }
        class Dog:DongWu
        {
            public override string Eat() //重写
            {
                return "狗正在吃骨头";
            }
        }
        class Cat : DongWu
        {
            public override string Eat()
            {
                return "猫正在吃鱼";
            }
        }
    View Code

    2、抽象类
    是因为普通的多态虚方法没有人用本身的方法主体,那么...

    抽象类就是来当亲爹,abstract
    抽象类中可以有抽象方法:abstract

    抽象类,只为继承而出现,不定义具体的内容,只规定该有哪些东西

    一般抽象类中只放置抽象方法,只规定了返回类型和参数

    比如:

    人    - 有吃饭,睡觉方法

    男人 - 继承人抽象类,必须实现吃饭,睡觉的方法主体

    女人 - 继承人抽象类,必须实现吃饭,睡觉方法的主体

    抽象类中可以有普通属性,通过子类来使用

    1.关键字:abstract

    2.抽象类可以包含抽象方法普通方法

    3.abstract关键字可以定义方法为抽象方法,抽象方法可以没有函数体

    4.抽象类无法被实例化,抽象类主要做为一个基类,让别的类继承

    5.sealed和abstract关键字不能同时出现

    6.如果一个子类继承自抽象类,那么子类中必须实现所有的抽象方法

    7.如果子类中没有实现父类的抽象方法,那么该子类必须是抽象类

    8.如果一个类里面包含抽象方法,那么该类一定是抽象类

    注:有抽象方法的,一定是抽象类 ;抽象类中,不一定有抽象方法

    //定义抽象类
        public abstract class DongWu
        {
            public void Run()
            {
    
            }
            public abstract void Eat();
        }
    
        //做一个人类来继承抽象类
        public class Ren:DongWu
        {
            public override void Eat()
            {
                Console.WriteLine("吃熟食");
            }
        }
    View Code

    3、接口

    接口就是出来做 干爹的,接口不是类 interface
    编写方法格式: string 方法名();
    实现接口的方法 不要override,直接正常编写就可以了

    作用:可以将程序拆分成多个模块,定义子类必须实现的功能

    //定义接口
        interface IUSB
        {
            //开始读取USB
            void Start();
    
            //关闭USB
            void Stop();
        }
    
        //做一个鼠标类来实现USB接口
        class ShuBiao:IUSB
        {
            public void Start()
            {
                Console.WriteLine("鼠标启动了");
            }
            public void Stop()
            {
                Console.WriteLine("鼠标停止了");
            }
        }
    View Code

    注:接口和抽象类的区别:

    1. 写法区别   

    关键字:interface   

    没有class关键字  类名一般用I开头   

    不用写public因为本身就是public,不用写abstract接口里面所有的都是抽象的

    2. 接口里面不能包含普通成员

    3. 凡是继承接口的类,全部要实现接口里面的方法

    类库:
    其实就是一堆类文件,只不过你看不到这些类的源代码,保密性好。

    优点:保密性好
    缺点:如果这个方法不好用,使用者无法自己去更改它。

    引用别人写的类

    1、源代码方法

    可以将直接写好的.cs源代码文件,添加进我的解决方案文件夹下,在解决方案资源管理器中, 项目上右键→添加→现有项,来添加此.cs源代码文件的使用,需要引入相应的命名空间

    2、类库方法

          一个dll文件,就是一个类库 它人新建一个类库,在里面编写类和相应的方法,生成后出现一个dll文件,拿过来,放在自己的 程序文件夹里,在项目右键→添加引用→找到此dll类库文件添加,然后引用命名空间,就可以调用相应的类中的方法了

    意类一定要是public访问权限
          类库使用是多公司联合开发时使用的方式,因为每个公司都有自己的核心技术,我允许你使用,但不允许你 知道我是怎么编写的,所以需要dll类库文件,因为dll文件是将源代码文件编译后的文件,看不到源代码, 所以你只能调用不允许更改

    委托:
    委托可以理解为:函数的指针

    关键词:delegate

    声明:
    public delegate int FirstDel(int a, int b);

    创建委托变量:
    FirstDel 名字 = 与这个委托类型相同的方法;

    泛型集合 List<T>

    综合了集合和数组的优点,
    固定数据类型,不限制长度的一种集合

    var 万能变量
    dynamic 万能变量

    this关键字:

    虽然写在类里面,但不是属于类的,而是属于该对象的

    一般来说在类里面 this关键字是可以省略的,但是如果有一个方法形参名字和成员名字重复,这时候再调用该对象里面的成员的时候需要加this关键字

    is关键字:

    判断某一个对象是否是某一种类型
    对象 is 类型名 是这种类型返回 true 不是返回 false

    例:if (y2 is Ren)   

        {     

                     s = "是一个人";   

        }   

        else   

        {     

                    s = "不是一个人";   

        }

    as关键字: 转换类型(只能转换兼容类型,可以将子类对象转换为父类对象)

    将某一个对象转换成某一种类型,如果转换不成功,那么会给这个对象赋一个null,不会抛出异常

  • 相关阅读:
    windows live sync, mesh, skydrive
    忘记SQL SERVER密码的解决
    处理ObjectDataSource调用中DAL层中的异常
    C#中获取应用程序路径的方法(集合)
    datatable复制一行数据到本表
    [Yii Framework] yii中如何在查询的时候使用数据库函数
    [Yii Framework] yii的路由配置
    [Yii Framework] 已经定义的命名空间常量
    [Yii Framework] yii中关于filter
    [Yii Framework] yii中如何不加载layout
  • 原文地址:https://www.cnblogs.com/shadow-wolf/p/6106557.html
Copyright © 2020-2023  润新知