.NET知识点总结二(笔记整合)

19.什么是类型?

  用来定义某一种数据在内存里开辟空间的大小,还可以预置操作此种类型数据的相关方法

20.this关键字在方法中使用时所代表的含义

  this指的是当前类的对象,或者父类的类的对象(base只能指向父类的对象)

21.里氏替换原则

  子类替换父类所在的位置

22.C#中的数据类型

  • 值类型 

    • 简单类型(数字类型(int,short,long,float,double),字符(char),逻辑值(bool)),结构体(struct),枚举(enum)
  • 引用类型
    • 字符串(string),数组[ ],object(所有类的基类),类 class,委托 delegate

23. 值类型变量的初始化(内存分配)

  1.类的成员变量

   该变量是跟随类的对象存在于堆内存。当对象引用断开时,等着垃圾回收器进行清理时便被销毁 

  2.方法的局部变量

   该变量是在方法被调用时,存在于栈内存,方法执行完毕后被销毁

24. 继承

  1)、为什么要有继承?

    A、提高代码的重用性

    B、实现多态

  

  2)、继承的局限性

    A、一个类只能继承一个父类

    B、子类只能继承父类的非私有的成员

  

  3)、当存在继承关系时,子类如何访问父类的非私有成员

    A、base关键字:存在于子类对象里,用来指向父类对象的指针

    B、this关键字:获取父类的非私有的成员和本类的成员

25、子类可以强制转换为父类,但父类不能转换为子类

26、is和as的相同和区别?

  is是判断,返回类型为bool

  as是转换的意思。as只能对引用类型的做转换。as是先判断在转换,先测试转换是否合法,如果合法就转换,否则就返回NULL

  相同:都不会抛出异常

27、override与重载的区别

    A、重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

    B、override是进行基类中函数的重写。为了适应需要

28、override重写的方法的“类型”

  虚方法(vritual):必须有方法体

  抽象方法(abstract):没有方法体

29、什么是多态?

  就是用子类来实例化父类,调用的是父类的抽象方法/虚方法,但实际执行的是子类实例重写的方法

30、抽象方法只能定义在抽象类中

31、当存在继承关系的时候,创建子类对象的时候不会创建父类对象,只会有一个对象。

  例如:Animal a = new Cat();

  当new一个子类的时候,有且只有一个子类对象

  ——————————————————————————————————————————————————————————————————————

  而我们经常看到这种说法:new子类时,先创建子类对象,调用子类的构造方法时,创建父类的对象,调用父类构造函数最后返回来执行子类构造方法。子类默认调用父类的无参构造方法,如果父类没有无参的构造方法,则必须显式的调用————》这是一个很大的误区!

  在内存中根本就无所谓对象的概念!new的时候是根据子类和父类所有静态成员的大小以及类型指针开辟一个总的空间(该空间不包含方法),子类和父类的类型指针指向两个类的方法表,所以,子类对象可以访问到父类和子类的方法。

32、如果子类和父类存在同名但没有重写关系的方法的时候,那么调用时,如果调用的是父类变量调用,则调用父类方法,如果是子类变量调用,则调用子类方法。如果子类和父类存在同名且有重写关系的方法,那么不管变量是什么类型,调用的都是子类的方法。

33、虚方法和抽象方法的相同点和不同点:

  相同点:

    都能被子类重写且都不能为私有的

  不同点:

    1.abstract和virtual的关键字不同

    2.vritual方法必须有实现,哪怕是空实现,而abstract方法必须没有实现

    3.virtual方法的子类可以重写父类方法也可以不重写,而抽象方法所在的类的子类必须重写该父类的方法

    4.抽象方法必须在抽象类中声明,而虚方法可以存在于任何一个类中

34、抽象类存在的意义:

  抽象类存在的目的就是指定规则,而不是具体实现,是为了约束子类的行为,具体实现交给子类来完成。

35、多态的优势:

  1.代码的内部各个层之间的关联比较小,相互之间约束少。(低耦合)

   2.方法的功能和职责单一,即一个方法只做一件事情。(高内聚)

   3.实现代码的可维护性和可扩展性,便于二次开发

   4.把不同的子类对象都当着父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的程序,以便灵活的适应不断变化的需求。

36、子类中的base关键字指向的是父类对象。它是子类对象本身,但他的类型是父类。

37、以下情况类不能被实例化:

  抽象类、静态类、类的构造函数已被私有化

38、接口——特殊的抽象类(约束和统一类的行为)

  接口中只有方法、属性、索引器和事件的声明

   接口只能用public和internal两个修饰符

   接口可以实现多继承

   如果一个抽象类继承了一个接口,那么将继承的方法既可以设置为抽象方法,也可以去实现方法(既可以在抽象类的子类中去实现,也可以再抽象类中直接实现)

.NET知识点总结二(笔记整合),布布扣,bubuko.com

时间: 2024-12-29 05:35:46

.NET知识点总结二(笔记整合)的相关文章

.NET知识点总结一(笔记整合)

1.   .net framework原理简介,C#程序的两次编译 .NET源代码——>语言编译器(第一次编译)——>MSIL+元数据(exe文件)——>CLR(公共语言运行时——类似于jre)——>机器代码(第二次编译)——>代码被执行 2.Main函数是什么?在程序中使用Main函数有什么需要注意的地方? 程序的入口函数!函数名字不能改变:一个程序中有且只有一个Main函数. 3.CLR是什么?程序集是什么?当运行一个程序集的时候,CLR做了什么事情? Common La

Spring boot 学习笔记 (二)- 整合MyBatis

Spring boot 学习笔记 (二)- 整合MyBatis Spring Boot中整合MyBatis,并通过注解方式实现映射. 整合MyBatis 以Spring boot 学习笔记 (一)- Hello world 为基础项目,在pom.xml中添加如下依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter&l

琐碎的知识点(二)

1.绑定设置时间格式 <%#Eval("time", "{0:yyyy-MM-dd}")%> <%#DateTime.Parse(Eval("time").ToString()).ToString("yyyy-MM-dd")%> 2.Repeater1.Items.Count 是指Repeter1的数据绑定条数 <%#this.rptnewstraining.Items.Count == 0 ?

Docker学习教程笔记整合(完整)

Docker学习教程笔记整合(完整) 本文主要是整理了DockerOne组织翻译的Flux7的Docker入门教程,通过markdown记录,方便离线学习.原文地址,http://dockone.io/article/101. 文中一些链接可能会跳转国外的网站,如果没有插件或开VPN的朋友,可以尝试修改一下Hosts文件,如何修改Hosts文件.或者使用XXNet插件,如何使用XXnet 介绍 Docker是一个新的容器化的技术,它轻巧,且易移植,号称"build once, configure

ztree使用系列二(整合ztree的一些功能和demo演示)

ztree官网上有详细的API和演示demo,这里就不详细介绍了,只对用到的一些功能进行说明一下. 1.用到的几个js文件 jquery-1.4.4.min.js(jQuery的核心js) jquery.ztree.core-3.5.js(ztree的核心js) jquery.ztree.excheck-3.5.js(ztree的复选框功能js) jquery.ztree.exedit-3.5.js(ztree的编辑功能js) 2.用的css文件 zTreeStyle.css(只有这一个css文

java中的字节流的知识点---IO学习笔记(二)

IO流: 包括字节流和字符流. 在这里解释一下我对于流的理解,其实流就相当于一个用来运输字节或者字符的管道,一开始会把所有的数据存放到流中,然后我们再从流中取出数据(进行读取或者写出操作),每读或者写一次就会从管道中把读或者写的数据取出来,管道中就没有了你刚才读到或者写出的数据了.比如: FileInputStream fis = new FileInputStream(String filename); 就会把文件名为filename的文件内容全部存放到管道中去,然后我们进行fis.read(

DotNET知识点总结四(笔记整合)

1.枚举:本质是类 如果为第一个枚举赋了一个int值,那么后面的枚举项依次递增 可以将枚举强转成他所代表的int值 C#的枚举项都是常量(可以用Reflector查看literal的IL源码) 因为枚举项都有对应的int值,所以Switch把他当成int看 不能定义方法.属性.事件 多个枚举有相同数值时,数值强转时,会返回其中最后一个枚举项 2.IEnumerable接口 只要实现了该接口,就可以使用foreach进行遍历.foreach循环的本质就是调用这个接口返回一个迭代器,调用迭代器的Mo

DotNET知识点总结五(笔记整合)

1.委托:通常指的是 多播委托 通常的说,委托就是一个存放方法指针的容器,是一个安全的函数指针,供程序员安全调用.委托的本质就是一个类,继承于MulticastDelegate——>Delegate,在Delegate类中有一个IntPtr类型的变量来指向该方法的指针. 通常当方法传递的参数为一个方法时,就用委托. 委托能够将方法作为参数传递,(多播委托)调用一个委托,执行N个方法 2.集合排序 1.Reverse()方法直接反转排序 2.冒泡排序 int temp = 0; for(int i

DotNET知识点总结三(笔记整合)

使用接口的注意事项: 接口中的成员不能加访问修饰符 接口中的成员不能有任何实现 实现接口的子类必须实现接口的全部成员 一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么在语法上A必须写在IA的前面,因为类是单继承的,而而接口可以多实现 显式实现接口和隐式实现接口时需要注意的问题(我们通常是隐式实现的) 类实现接口,可以显式实现接口里的方法,但是注意:一旦使用显式实现接口里的方法,那么该方法只能被接口变量调用 IFlyable fly = new Bird