1. 封装 :
隐藏对象的属性,并实现细节(方法),对外提供接口
2. 访问修饰符:
public全局公有、private该类本身访问、protected可被子类访问,用sealed声明类则该类不能继承,声明方法则不能被重写
3. 继承:
子类继承父类,重用父类代码
4. 多态:
父类引用,指向子类对象。
例:Animal cat = new Cat();
cat.method();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有则编译错误 如果有,执行的是子类重写后的方法。
5. virtual虚方法:
可以被子类重写的方法,如果子类重写了虚方法,那么运行时将使用重写后的逻辑,如果没有重写,则使用父类中虚方法的逻辑
6. abstract抽象类:
该抽象方法必须被子类重写。
7. interface接口:
接口只能是功能的定义,而不是实现。具体功能由子类实现。
抽象类和接口的异同可看UP主(_宣纸泛黄)的视频。
8. 值类型和引用类型的区别(可看视频):
值类型:数据存储在栈上,会自动释放。包含int、float、结构体等。
引用类型:数据存储在堆上,需要GC(垃圾回收期)释放。包含string,calss等。
9. 装箱和拆箱(可看视频):
值类型转为引用类型称为装箱,反过程称为拆箱。尽量避免装箱拆箱,推荐使用重载和泛型。
10. foreach迭代器遍历和for循环遍历的区别:
foreach只读,foreach循环的时候会释放使用完的资源,所以会造成额外的GC开销,因此要尽量避免使用foreach。
11. string和stringbuilder和stringBuffer区别:
对string类型进行添加和删除会创建新字符串并删掉原来的。
stringbuilder和stringBuffer是字符串可变对象,对原实例对象做拼接,不会生成新的实例。
12. 请简述GC垃圾管理器,和GC产生的原因,并描述如何避免?(看26)
GC垃圾回收机制,避免堆内存溢出,定期回收那些没有有效引用的对象内存。GC优化,就是优化堆内存,减少堆内存,即时回收堆内存
如何避免?
1.减少new的次数
2.字符串拼接使用stringbuilder,字符串比较先定义一个变量存储,防止产生无效内存
3.list,new时候,规定内存大小
4.foreach迭代器容易导致GC,使用For循环
5.使用静态变量,GC不会回收存在的对象,但静态变量的引用对象可能被回收
13. C#中有哪些常用的容器类,各有什么特点,性能区别?
栈、队列、List(泛型存储)、LinkedList、字典(泛型存储)。插入、遍历、删除都是数据结构里的。泛型存储的优点是不用装箱拆箱。字典就是哈希表。
14. 当需要频繁创建使用某个对象时,有什么好的程序设计方案来节省内存?
对象池技术。
15. C#中ref和out关键字有什么区别?
ref和out可将值传递改为引用传递。值传递需要开辟内存空间,引用传递直接在原来的内存上做修改。区别在于ref修饰的参数需要初始化,out不需要。
16. 泛型是什么?
有共同行为/操作的对象,一切类型的父类
详解:https://www.cnblogs.com/dotnet261010/p/9034594.html
17. 结构体和类的区别?
结构体是值类型,不可被继承,不需要构造函数,声明时不能指定初始值。
类是引用类型,可被继承,需要构造函数,声明时可指定初始值。
18. C#是否能多继承?
可以,一个类可以继承多个接口。隐藏知识点:一个类不能继承多个类。
19. 委托Func和action的区别?
Func要有返回值, Action没有返回值
20. 接口和抽象类的区别(看视频讲解)?
抽象类 接口
被子类继承 被类实现
方法声明+实现 只能声明
21. 抽象类是什么?
用 abstract 修饰的类是抽象类
抽象类不能实例化。
抽象类可以包含抽象方法和抽象访问器。
虚方法,抽象类,接口是三种实现多态的手段
22. arraylist和Hashset的区别?
首先arraylist底层是动态数组,可以存储重复的值,并且如果不约定下标的话,是有序的。而hashset底层是hash表,由于会比较hash值和equals,所以他是不可重复并且是无序的。
简单的说一个是有序可重复,一个是无序不可重复。
23. 我们都知道一个类可以有多个构造函数,并且C#会在我们创建类的时候默认的提供一个无参的构造函数,当我实现了另外一个有参数的构造函数的时候,我还能调用无参数的构造函数吗?请说明原因。
答:不能,因为一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要自己手动写入一个无参数的构造函数。
24. override与重载的区别
重载是方法的名称相同,参数或参数类型不同,进行多次重载以适应不同的需要。
Override是进行基类中函数的重写。子类方法会覆盖父类、。
25. 请问能设置类A可被继承,但类A中的某个方法不能被重写吗?
能,将类A的修饰符标记为public、标记类A中的不允许重写的方法为sealed
sealed关键字不仅可以限制类,也可以限制方法。
26. 什么是垃圾回收器(GC)
垃圾回收器管理应用程序的内存分配和释放。 每当有对象创建时,垃圾回收期都会从托管堆为对象分配内存。 只要托管堆中有地址空间,运行时就会继续为新对象分配空间。但是内存并不是无限的,垃圾回收器最终必须执行垃圾回收来释放一些内存。不过开发人员不必手动释放内存,垃圾回收器会自动选择合适的时间释放内存。同时开发人员也可以调用 GC.Collect 方法回收垃圾。
「艾尔登法环」梅琳娜手办开订 立体手办▪
万代「艾尔登法环」白狼战鬼手办开订 立体手办▪
「夏目友人帐」猫咪老师粘土人开订 立体手办▪
「五等分的新娘∬」中野三玖·白无垢版手办开订 立体手办▪
「海贼王」乌索普Q版手办开订 立体手办▪
良笑社「初音未来」新手办开订 立体手办▪
「黑岩射手DAWN FALL」死亡主宰手办开订 立体手办▪
「盾之勇者成名录」菲洛手办登场 立体手办▪
「魔法少女小圆」美树沙耶香手办开订 立体手办▪
「咒术回战」七海建人粘土人登场 立体手办▪
「五等分的新娘」中野二乃白无垢手办开订 立体手办▪
「为美好的世界献上祝福!」芸芸粘土人开订 立体手办▪
「公主连结 与你重逢」六星可可萝手办开订 立体手办▪
「女神异闻录5」Joker雨宫莲手办开订 立体手办▪
「间谍过家家」约尔・福杰粘土人登场 立体手办▪
「街角魔族 2丁目」吉田优子手办开订 立体手办▪
「火影忍者 疾风传」旗木卡卡西·暗部版粘土人登场 立体手办▪
「佐佐木与宫野」宫野由美粘土人开订 立体手办▪
「盾之勇者成名录」第2季拉芙塔莉雅手办开订 立体手办▪
「咒术回战」两面宿傩Q版坐姿手办开订 立体手办▪
「DATE·A·BULLET」时崎狂三手办开订 立体手办▪
「狂赌之渊××」早乙女芽亚里粘土人开订 立体手办▪
「魔道祖师」魏无羨粘土人开订 立体手办▪
「新·奥特曼」奥特曼手办现已开订 立体手办▪