DotNet知识点二

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两个修饰符

   接口可以实现多继承

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

原文地址:https://www.cnblogs.com/Mr-Prince/p/12101389.html

时间: 2024-08-02 03:43:40

DotNet知识点二的相关文章

MySQL:表的操作 知识点难点总结:表完整性约束及其他常用知识点二次总结🙄

表操作 一 : 修改表表表表表表表表表: ALTER TABLE 语法 1. 改表名rename alter table 表名 rename 新表名 2. 增加字段add alter table 表名 add 字段名 数据类型 (完整性约束条件) add 字段名 数据类型(完整性约束条件) 3. 删除字段 drop alter table 表名 drop 字段名; 4. 修改字段 modify 字段名 数据类型 (完整约束条件); change 旧字段名 新字段名 旧数据类型 (完整性约束条件)

知识点--------二维数组

1.二维数组 模型:表格 定义:数据类型 [,] 数组名= new 数据类型[行数,列数]; int [,] a=new int[行数,列数]; 赋值: a[行下标,列下标]=10;   下标从0开始 取值: a[行下标,列下标] 2.数组的数组(锯齿数组) 定义: int [][] a=new int [行数][]; 赋值: 大数组里头放小数组 定义大数组 int [][]a=new int [行数][]; 定义小数组 int []a1=new int [列数]; int []a2=new i

Python数据分析--Pandas知识点(二)

本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表df 1 import pandas as pd 2 3 df = pd.DataFrame({"地区": ["A区","B区", "C区"], 4 "前半年销量": [3500, 4500,3800], 5

集合知识点(二)

HashMap 格式: Map<key,values> map = new HashMap<>(); //对于HashMap集合需要传入两个参数叫做键.值 增加: map.put(key,values); //根据键的Hash码存储,如果key的Hash值相同,则根据书写顺序后面的values覆盖前的values 获得值: //获得所有的key值 set<key的类型> keys = map.keySet(); //获得所有的values值 Collection<

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

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

UI知识点二

九宫格计算思路 利用控件的索引index计算出控件所在的行号和列号 利用列号计算控件的x值 利用行号计算控件的y值 HUD 其他说法:指示器.遮盖.蒙板 半透明HUD的做法 背景色设置为半透明颜色 定时任务 方法1:performSelector // 1.5s后自动调用self的hideHUD方法 [self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5]; 方法2:GCD  dispatch_after(di

AngulerJS小知识点二

AngularJS与其他JavaScript框架最主要的区别在于,控制器并不合适用来执行DOM操作.格式化或数据操作,以及除存储数据模型以外的状态维护操作.他只是视图和$scope之间的桥梁. 过滤器:{{name | uppercase}} 1.currency---->将一个数值格式化为货币格式. 2.date---->将日期格式化为所需格式. 3.filter---->从给定数组中选择一个子集,并将其生成一个新的数组返回. 4.limitTo---->根据传入的参数生成一个新

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