为了账号安全,请及时绑定邮箱和手机立即绑定

C#面向对象编程

kong66 全栈工程师
难度入门
时长 3小时17分
学习人数
综合评分9.47
105人评价 查看评价
9.7 内容实用
9.2 简洁易懂
9.5 逻辑清晰
  • 泛型方法就是方法的模型,给定具体的类型,就可以实例化出一个操作该类型的具体方法。

    泛型类中往往有泛型方法,泛型类中的泛型参数和泛型方法的泛型参数可以相互独立,普通类中也可以有泛型方法。

    查看全部
    0 采集 收起 来源:泛型方法

    2019-02-07

  • 泛型类:模子

    class Cage<T>   // T,占位符,类类型参数

    {

    }  //声明

    Cage<Dog> dogCage;  //引用

    dogCage = new Cage<Dog>();  //实例

    var dogCage = new Cage<Dog>();

    为什么需要泛型:

    用积累或者公共的接口,甚至是所有类的基类object,也可以实现一个Cage,但是类型太宽泛,需要显式转换类型,并且判断真实类型是什么。

    只有需要的类型才会被实例化。


    var:

    C# 中的var关键字

    var 是3.5新出的一个定义变量的类型 其实也就是弱化类型的定义 VAR可代替任何类型 编译器会根据上下文来判断你到底是想用什么类型的 至于什么情况下用到VAR 我想就是你无法确定自己将用的是什么类型 就可以使用VAR 类似 OBJECT 但是效率比OBJECT高点。

    或者通俗的讲:

      var可以理解为匿名类型,我们可以认为它是一个声明变量的占位符。它主要用于在声明变量时,无法确定数据类型时使用。

    使用var定义变量时有以下四个特点:

    1. 必须在定义时初始化。也就是必须是var s = “abcd”形式,而不能是如下形式: var s; s = “abcd”;

    2. 一但初始化完成,就不能再给变量赋与初始化值类型不同的值了。

    3. var要求是局部变量。

    4. 使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。

    查看全部
    0 采集 收起 来源:泛型类

    2019-02-06

  • 重载运算符:利用现有的某种运算符,针对自定义类或者结构,定义某种运算,以简化自定义类型的操作。

    public static Dog operator+(Dog male,Dog female)

    {

    ...

    return new Dog();

    }

    可以重载的运算符:

    1、一元:+,-,!,~,++,--,true,false;

    操作数必须是类或结构;

    2、二元:+,-,*,/,%。&,|!,^,<<,>>,==,!=,>,<,>=,<=;

    两个操作数至少有一个是类或结构;

    3、不能重载:=,&&,||,[],()等。

    重载运算符不能:

    1、创建新运算符;

    2、改变运算符语法;

    3、重定义运算符如何处理预定义类型;( int a + int b = a - b)

    4、改变运算符的优先级和结核性。

    查看全部
    0 采集 收起 来源:重载运算符

    2019-02-06

  • 自定义转换:

    为自己的结构或者类定义显式或隐式转换,为了让结构或者类可以变成一个预期相关的类型,并且使这种转换更加简单。

    public static explicit(显式)/ implicit(隐式) operator 没有函数名称

    显式需要用到括号强制转换。

    查看全部
    0 采集 收起 来源:自定义转换

    2019-02-06

  • 装箱:根据值类型的值,在堆上创建一个完整的引用类型对象,并返回对象的引用,即将值类型转换为引用类型(用于进行统一的操作和统一的存储),是一种隐式转换,语言可以自动完成。

    装箱在堆中创建了一个新的对象,会有性能的损耗,能不装箱则不装箱。

    装箱的本质就是在堆上创建了引用类型的副本,新创建的引用类型和原来的值类型相互独立。

    拆箱:将装箱后的对象转换回值类型的过程,是一种显示转换,需要手动完成,int j=(int)i,强制转换。

    查看全部
    0 采集 收起 来源:装箱和拆箱

    2019-02-06

  • 静态类:

    1、只包含了静态的方法和属性,并且表示为static;

    2、静态类不能创建实例,不能被继承;

    3、可以为静态类定义一个静态构造函数。

    静态类主要用于基础类库和拓展方法。

    如何扩展方法:

    1、如果有源代码,直接添加一个新方法;

    2、如果不能修改但也不是密闭类,可以派生子类拓展;

    3、如果以上条件都不满足,可以使用静态类扩展方法。

    扩展要求:

    1、扩展方法所属的类,必须是static类;

    2、扩展方法本身必须是static方法;

    3、扩展方法的第一个参数类型,必须是this+类名。

    查看全部
    0 采集 收起 来源:静态类

    2019-02-06

  • 1、静态字段意味着静态成员将被类的所有实例共享,所有实例都访问同一内存位置,静态字段所有实例共享。

    2、静态成员和实例成员分开保存。

    3、静态成员将直接通过类名访问。

    4、静态成员独立于任何实例,没有实例也可以访问,其初始化语句在任何静态成员使用之前调用。

    5、静态函数也独立于任何实例,没有实例也可以调用,静态函数不能访问实力成员,仅能访问其他静态成员,但是实例成员可以访问静态成员。

    6、静态构造函数用于初始化静态字段,为静态成员而生,在引用任何静态成员之前和创建任何实例之前调用,与类同名,使用static,无参数,无访问修饰符


    查看全部
    1 采集 收起 来源:静态成员

    2019-02-06

  • 结构和类

    不同点:

    1、结构是值类型(在栈中),类是引用类型(在堆中);

    2、结构不支持继承,类支持继承;

    3、结构不能定义默认构造函数,编译器回定义。

    适用场合:

    结构:内存分配快,作用域结束即被删除,不需要垃圾回收,用于小型数据结构,传递会赋值,用ref提高效率;

    类:用于其他的需要继承体系的场合

    查看全部
    0 采集 收起 来源:结构和类

    2019-02-06

  • 接口 关键字 interface,一般用I开头,接口就是制定一组函数成员,而不实现他们的引用类型(默认public,但不能加任何访问修饰符),只能用来被实现,实现时要加访问修饰符

    通过对象调用,可以调用自身有的函数;通过接口调用,只能调用接口所对应的函数

    一个类可以实现多个接口

    接口标示着当前这个类有接口所声明的行为、方法、能力

    查看全部
    0 采集 收起 来源:接口

    2019-02-06

  • sealed

    密闭类:有些不希望其他人通过继承来修改,不能再派生子类,如修改string类;

    密闭方法:不希望其他人重写该方法

    如果一个基类方法不希望子类对其重写,就可以不声明为virtual,同时是override重写,就可以使用sealed机制

    查看全部
    0 采集 收起 来源:密闭类

    2019-02-06

  • 派生类对象中,有一部分是基类部分,在执行派生类的构造函数体之前,将会隐式或显式调用基类构造函数。

    调用顺序:实例成员初始化->基类构造函数->派生类构造函数

    this,调用当前类的其他构造函数,可以有参数也可以没有参数,可以用来调用进行公共初始化的函数

    查看全部
    0 采集 收起 来源:构造函数

    2019-01-20

  • 依赖倒置原则:程序设计要依赖于抽象类,而不依赖于具体类,尽量降低程序的耦合。

    基类的引用:派生类的对象包含基类部分和派生类部分,可以通过一个基类类型的引用指向派生类,通过指向派生类的基态引用,仅能访问派生类中的基态部分。

    统一提高效率:需要一个容器保存所有的基类,基类描述了共同的属性和行为(前提:基类的引用可以指向派生类)

    子类具有差异:基类不能涵盖所有情况和变化,统一的行为方法往往在基类和派生类中有所区别。

    虚方法:声明为virtual的方法。基类的虚方法可以在派生类中使用override进行重写。(overload,重载)

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

    关于虚方法的其他知识点:

    1、重写虚方法必须具有相同的可访问性,且基类方法不能使private;

    2、不能重写static方法或者非虚方法;

    3、方法、属性、索引器、事件、都可以声明为virtual或override。

    查看全部
    0 采集 收起 来源:虚方法和多态

    2019-01-20

  • 隐藏方法:

    不能删除基类中的任何成员,但是可以用与基类成员名称相同的成员来屏蔽基类成员。

    语法细节:

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

    屏蔽函数成员:在派生类中声明新的带有相同函数签名的成员。(关键)

    PS:相同函数签名是指参数列表相同,函数名相同,不意味着返回类型也相同

    让编译器知道:可以添加new关键字,否则会报警。

    查看全部
    0 采集 收起 来源:隐藏方法

    2019-01-20

  • 继承是提高开发效率的手段

    实现继承:一个类型生于另一个基类型,它拥有该基础类型的所有组员字段和函数,被派生的类称为派生类,派生出类的类成为基类,派生类继承于基类

    语法:派生类:父类

    写的是子类的内容,省去父类的内容

    特殊的基类:Object类,是所有类的共同基态,唯一的非派生类,继承层次结构的基础。

    对于其他类,父类和子类的概念都是相对的。

    规则:继承只有单继承。父类还可以继承自一个祖父类,直到Object类。

    查看全部
    0 采集 收起 来源:继承

    2019-01-20

  • 面向对象编程特点:封装、继承、多态

    面向对象编程优点:易维护、易扩展、易开发


    查看全部
    0 采集 收起 来源:课程介绍

    2019-01-20

举报

0/150
提交
取消
课程须知
1、需要掌握c#基础语法和基本概念 2、建议听课和写代码实践相结合,更好的掌握知识点
老师告诉你能学到什么?
1、通过学习继承和多态,构建对象的森林,减少重复代码 2、学习静态成员静态类,实现对象间的共享资源和扩展非派生类 3、学习接口,可以跨类型地实现对象的统一管理 4、学习操作符重载,大大简化我们自定义对象的相关操作 5、学习泛型,极大地降低了开发的工作量

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!