• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
༺҉戰҉༻
博客园    首页    新随笔    联系   管理    订阅  订阅

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

多态:

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

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

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,不会抛出异常

posted @ 2016-11-27 15:29  孤丷狼  阅读(292)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3