zoukankan      html  css  js  c++  java
  • 【基础知识】.Net基础加强 第二天

    第02天 .Net基础加强

    1、 封装

    1> 属性的封装:

    属性封装字段:把变化封装一下,保留用户的使用方式

    2> 把方法的多个参数封装成一个对象

    3> 将一堆代码封装到一个方法中

    4> 将一些功能封装到几个类中

    5> 将一些具有相同功能的代码封装到了一个程序集中(dll、exe),并且对外提供统一的访问接口。(属性名、方法名等。)

    2、 继承(:表示继承)

    1> Base Class à 基类 Parent Class à 父类

    2> Derived Classà 派生类 Child Class à 子类

    3> 好处:提高代码的重用性;多态

    4> 继承的特性

    a> 继承的单根性:只能继承一个父类

    b> 继承的传递性:子类继承父类是同时继承了父类从他的父类中继承的属性、字段和方法

    6> C#任何一个类都默认继承自Object类,如果一个类没有继承任何类,则默认继承Object类。如果继承了一个类,则将覆盖默认继承的Object类。

    3、 继承中的构造函数▲

    1> 继承的时候,构造函数不能被继承。

    2> 子类的构造函数会默认去调用父类中的无参数的构造函数。

    3> 如果父类中没有无参数的构造函数,子类继承父类时会报错的,解决方案:

    方案一: 在父类中增加一个无参数的构造函数。这时子类的构造函数就可以找到父类中的无参构造函数了。

    方案二: 不修改父类,而是在子类中的构造函数后面通过:base(),显示去调用父类的某个构造函数,而不去调用无参的构造函数。

    4、 通过this调用构造函数

    作用:

    1> 在当前类的构造函数后面通过:this()来调用当前类自己的其他构造函数。

    public Person(string name) : this(string name,0,0,null){}

    5、 对象初始化器(语法糖)

    Person p = new Person(){Name=”yzk”,Age=18,Email=”yzk365@qq.com”}

    6、 集合初始化器

    List<int> list = new List<int>(){10,20,30,40}

    7、 通过this和base调用类的成员

    在一般情况下,如果子类继承了父类的成员。那么在子类中,通过this.成员或base.成员都是访问的是一样的。

    除非父类中的成员子类继承后又重写了。

    8、 五种常用的访问修饰符

    1> private:私有的,只能在当前类内部来使用

    2> protected:受保护的,只能在当前类内部,以及所有当前类子类的内部。

    3> internal:只能在当前程序集内部访问,跨程序集是不能访问的

    4> protected internal:相当于同时具有protected和internal的权限。可以在当前程序集或子类中(不同程序集也可以访问)访问。

    5> public:任何地方都能访问

    6> protected和internal没有可比性。protected是当前类内部与所有子类内吧可访问,而internal是在同一个程序集中可访问。 假如不在一个程序集中,但是依然存在继承关系,那么protected访问修饰符修饰类型依然可以访问。

    9、 关于父类中私有成员的继承问题

    (私有字段到底是有没有继承,这是一个有很大分歧的问题!!)

    我认为子类并不能继承父类的私有属性和字段

    10、 访问级别的约束(类的访问修饰符只有两种,一种是public 另一种是internal。如果什么都不写,默认是internal)

    1> 子类的访问级别不能比父类的高(如果比父类的访问级别高的话,会暴露父类的成员)

    2> 方法的参数和返回值类型必须与方法本身的访问修饰符一致

    3> 属性的访问级别和属性的类型的访问级别(类的访问修饰符和类属性或字段的访问修饰符都高于【参数】的访问修饰符)

    以上三种用于解决访问级别不一致的错误

    11、 通过虚方法(virtual修饰)实现多态

    1> 虚方法,virtual:是虚方法的时候,那么这个方法的子类中就可以被重写(override)了.当子类继承父类后,可以直接使用该方法,也可以将该方法重写。

    2> 子类如果要重写父类中的方法,则需要在子类的Show方法前加一个override关键字。 子类重写父类的方法必须并且只能用override关键字。 此时,如果在子类中用this来调用则调用的是子类重用后的Show方法,如果在子类中用base来调用,则调用的依旧是父类中的Show方法。

    3> 虚方法可以给父类中的方法一个实现,比如ToString()方法

    虚方法必须有实现部分,哪怕是空实现。

    12、 多态(为了保护程序的可扩展性):多态就是多种表现形态。

    1> 开放封闭原则(对修改封闭,对扩展开放)

    2> 多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征。

    3> 多态的作用:把不同的子类对象都当做父类来看,可以屏蔽不同子类对象之间存在的差异,写出通用代码,做出通用的编程,以适应需求的不断变化。

    13、 静态成员-静态类 static

    1> 调用静态方法的时候必须通过类名来直接调用,不能通过对象来调用。 也就是说,使用静态成员不需要实例化对象。

    2> 静态成员会在整个应用程序退出时,才会释放资源,所以可以在整个应用程序中共享数据。

    3> 静态类不能被实例化。不能被继承。

    4> 由于静态成员会在整个程序退出时,才释放资源,所以尽量避免写静态字段和静态属性,最好只写静态方法。

    5> 当给一个普通类添加静态字段后,系统会默认为该类生成静态构造函数【静态构造函数不能有访问修饰符、并且不能带参数】

    6> 静态类的构造函数,只会在第一次使用静态类之前,执行,并且只会执行一次。 静态构造函数不能有访问修饰符,不能有参数。

    7> 静态类不能多态。

    8> 什么时候使用静态类和静态成员

    a>什么情况下要将一个类标记为静态类

    一般情况下是,当这个类是一个工具类,里面都是方法。为了让用户调用的时候方便,不需要实例化对象,这是可以给该类标记为static类(静态类),此时该类中只能包含静态成员不能包含实例成员。比如:Convert、Math、File、Console….

    b>什么情况下需要在一个普通类中编写一个静态成员,而这个类不能标记为static

    当这个类需要别实例化的时候,如果这个类中有一个成员是所有对象都共享的数据,这是可以 将该类中的成员标记为静态的,但是这个类还是一个实例类。

    14、 静态类的补充—密封类 (sealed关键字)

    1> 作用:

    a> 不能被继承

    b> 不能被重写

    2> 是一个密封类,不能被继承

    3> Sealed关键字,表示类不能被继承

    4> 密封类表示不能别继承。String类。.Net系统中本身对字符串有很多特殊处理(为String开了很多“绿灯”,String有很多特权,比如:不可变性,字符串池等等…),防止别的类继承后照成混乱。商业问题。

    5> 禁止子类重写父类的方法。

  • 相关阅读:
    gitlab的数据库磁盘坏了已经没有办法恢复情况下如何恢复git上的代码
    psql: FATAL: the database system is in recovery mode
    k8s 下 jenkins 分布式部署:利用pipeline动态增加slave节点
    pipeline 流水线:持续部署(docker)-企业微信群通知消息
    查看私有仓库镜像的版本列表
    MyBatis与Hibernate比较
    MyBatis与JDBC的对比
    Java_Ant详解(转载)
    IntelliJ Idea 常用快捷键列表
    隔行换色
  • 原文地址:https://www.cnblogs.com/haoxilu/p/3551121.html
Copyright © 2011-2022 走看看