没有合适的资源?快使用搜索试试~ 我知道了~
2.封装: 封装是将数据和行为相结合,通过行为约束代码修改数据的程度,增强数据的安全性,属性是C#封装实现的最好体现 3.多态性: 多态性是指同名的方法在不同环
资源详情
资源评论
资源推荐
一、 C#语言
1. 重载和重写的区别
1) 所处位置不同 重载在同类中 重写在父子类中
2) 定义方式不同 重载方法名相同 参数列表不同 重写方法名和参数列表都相同
3) 调用方式不同 重载使用相同对象以不同参数调用 重写用不同对象以相同参数调用
4) 多态时机不同 重载时编译时多态 重写是运行时多态
2. 面向对象的三大特点
封装、继承、多态
1.继承: 提高代码重用度,增强软件可维护性的重要手段,符合开闭原则。
2.封装: 封装是将数据和行为相结合,通过行为约束代码修改数据的程度,增强数据的安全性,属性
是 C#封装实现的最好体现。
3.多态性: 多态性是指同名的方法在不同环境下,自适应的反应出不同得表现,是方法动态展示的重
要手段。
3. 简述值类型和引用类型有什么区别
1.值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的
是堆中存放的地址。
2.值类型存取快,引用类型存取慢。
3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针和引用。
4.栈的内存是自动释放的,堆内存是.NET 中会由 GC 来自动释放。
5.值类型继承自 System.ValueType,引用类型继承自 System.Object。
4. 请简述 private,public,protected,internal 的区别
public:对任何类和成员都公开,无限制访问
private:仅对该类公开
protected:对该类和其派生类公开
internal:只能在包含该类的程序集中访问该类
protected internal:protected + internal
5. C#中所有引用类型的基类是什么
引用类型的基类是 System.Object 值类型的基类是 System.ValueType
同时,值类型也隐式继承自 System.Object
6. 请简述 ArrayList 和 List<Int>的主要区别
ArrayList 不带泛型 数据类型丢失
List<T> 带泛型 数据类型不丢失
ArrayList 需要装箱拆箱 List<T>不需要
7. 请简述 GC(垃圾回收)产生的原因,并描述如何避免?
GC 为了避免内存溢出而产生的回收机制
避免:1)减少 new 产生对象的次数
2)使用公用的对象(静态成员)
3)将 String 换为 StringBuilder
8. 请描述 Interface 与抽象类之间的不同
1.接口不是类 不能实例化 抽象类可以间接实例化
2.接口是完全抽象 抽象类为部分抽象
3.接口可以多继承 抽象类是单继承
9. 下列代码在运行中会产生几个临时对象?
其实在 C#中第一行是会出错的(Java 中倒是可行)。应该这样初始化:
string b = new string(new char[]{'a','b','c'});
忽略错误的话:
1."abc"
2.a.ToUpper()
3."123"
4.a.ToUpper()+"123"
10.下列代码在运行中会发生什么问题?如何避免?
会产生运行时错误,因为 foreach 是只读的。不能一边遍历一边修改。
11.请简述关键字 Sealed 用在类声明和函数声明时的作用
类声明时可防止其他类继承此类,在方法中声明则可防止派生类重写此方法。
12.反射的实现原理?
可以在加载程序运行时,动态获取和加载程序集,并且可以获取到程序集的信息
反射即在运行期动态获取类、对象、方法、对象数据等的一种重要手段
主要使用的类库:System.Reflection
核心类:
1.Assembly 描述了程序集
2.Type 描述了类这种类型
3.ConstructorInfo 描述了构造函数
4.MethodInfo 描述了所有的方法
5.FieldInfo 描述了类的字段
6.PropertyInfo 描述类的属性
通过以上核心类可在运行时动态获取程序集中的类,并执行类构造产生类对象,动态获取对象的字段或
属性值,更可以动态执行类方法和实例方法等。
13. .Net 与 Mono 的关系?
.Net 是一个语言平台,Mono 为.Net 提供集成开发环境,集成并实现了.NET 的编译器、CLR 和基础类库,
使得.Net 既可以运行在 windows 也可以运行于 linux,Unix,Mac OS 等。
14.在类的构造函数前加上 static 会报什么错?为什么?
构造函数格式为 public+类名如果加上 static 会报错(静态构造函数不能有访问修饰符)
原因:静态构造函数不允许访问修饰符,也不接受任何参数;无论创建多少类型的对象,静态构造函数
只执行一次;运行库创建类实例或者首次访问静态成员之前,运行库调用静态构造函数;静态构造函数
执行先于任何实例级别的构造函数;显然也就无法使用 this 和 base 来调用构造函数。
15.C# String 类型比 stringBuilder 类型的优势是什么?
如果是处理字符串的话,用 string 中的方法每次都需要创建一个新的字符串对象并且分配新的内存地
址,而 stringBuilder 是在原来的内存里对字符串进行修改,所以在字符串处理
方 面 还 是 建 议 用 stringBuilder 这 样 比 较 节 约 内 存 。 但 是 string 类 的 方 法 和 功 能 仍 然 还 是 比
stringBuilder 类要强。
string 类由于具有不可变性(即对一个 string 对象进行任何更改时,其实都是创建另外一个 string 类
的对象),所以当需要频繁的对一个 string 类对象进行更改的时候,建议使用 StringBuilder 类,
StringBuilder 类的原理是首先在内存中开辟一定大小的内存空间,当对此 StringBuilder 类对象进行更
改时, 如果内存空间大小不够, 会对此内存空间进行扩充,而不是重新创建一个对象,这样如果对一
个字符串对象进行频繁操作的时候,不会造成过多的内存浪费,其实本质上并没有很大区别,都是用来
存储和操作字符串的,唯一的区别就在于性能上。
String 主要用于公共 API,通用性好、用途广泛、读取性能高、占用内存小。
StringBuilder 主要用于拼接 String,修改性能好。
不过现在的编译器已经把 String 的 + 操作优化成 StringBuilder 了, 所以一般用 String 就可以了
String 是不可变的,所以天然线程同步。
StringBuilder 可变,非线程同步。
16.C# 函数 Func(string a, string b)用 Lambda 表达式怎么写?
(a,b) => {};
17.数列 1,1,2,3,5,8,13...第 n 位数是多少?用 C#递归算法实现
public int CountNumber(int num) {
if (num == 1 || num == 2) {
return 1;
} else {
return CountNumber(num -1) + CountNumber(num-2);
}
}
18.冒泡排序(手写代码)
public static void BubblingSort(int[]array) {
for (int i = 0; i < array.Length; i++){
for (int j = array.Length - 1; j > 0; j--){
if (array[j] < array[i]) {
int temp = array[j];
array[j] = array[j-1];
array[j - 1] = temp;
}
}
}
}
19.C#中有哪些常用的容器类,各有什么特点。
List,HashTable,Dictionary,Stack,Queue
List:索引泛型容器 访问速度快 修改速度慢
HashTable/Dictionary:散列表格式 查询效率高 空间占用较大
Stack:后进先出
Queue: 先进先出
20.C#中常规容器和泛型容器有什么区别,哪种效率高?
不带泛型的容器需要装箱和拆箱操作 速度慢 所以泛型容器效率更高 数据类型更安全
21.有哪些常见的数值类?
简单值类型--包括 整数类型、实数类型、字符类型、布尔类型
复合值类型--包括 结构类型、枚举类型
22.C#中委托和接口有什么区别?各用在什么场合?
接口(interface)是约束类应该具备的功能集合,约束了类应该具备的功能,使类从千变万化的具体逻
辑中解脱出来,便于类的管理和扩展,同时又合理解决了类的单继承问题。
C#中的委托是约束方法集合的一个类,可以便捷的使用委托对这个方法集合进行操作。
在以下情况中使用接口:
1.无法使用继承的场合
2.完全抽象的场合
3.多人协作的场合
以上等等
在以下情况中使用委托:多用于事件处理中
23.C#中 unsafe 关键字是用来做什么的?什么场合下使用?
非托管代码才需要这个关键字 一般用在带指针操作的场合
24.C#中 ref 和 out 关键字有什么区别?
ref 修饰参数,表示进行引用传递,out 修饰参数也表示进行引用传递,但传递的引用只为带回返回值 ref
又进又出 out 不进只出
25.For,foreach,Enumerator.MoveNext 的使用,与内存消耗情况
for 循环可以通过索引依次进行遍历,foreach 和 Enumerator.MoveNext 通过迭代的方式进行遍历。内存
消耗上本质上并没有太大的区别。但是在 Unity 中的 Update 中,一般不推荐使用 foreach 因为会遗留
内存垃圾。
26.函数中多次使用 string 的+=处理,会产生大量内存垃圾(垃圾碎片),有什
么好的方法可以解决。
通过 StringBuilder 那进行 append,这样可以减少内存垃圾
27.当需要频繁创建使用某个对象时,有什么好的程序设计方案来节省内存?
设计单例模式进行创建对象或者使用对象池
28.JIT 和 AOT 区别
Just-In-Time - 实时编译
执行慢 安装快 占空间小一点
剩余54页未读,继续阅读
袁大岛
- 粉丝: 33
- 资源: 305
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Java的本科探索学习项目设计源码 - 本科探索
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
- 基于Java的网上订餐系统设计源码 - online ordering system
- 基于Javascript的超级美眉网络资源管理应用模块设计源码
- 基于Typescript和PHP的编程知识储备库设计源码 - study-php
- Screenshot_2024-05-28-11-40-58-177_com.tencent.mm.jpg
- 基于Dart的Flutter小提琴调音器APP设计源码 - violinhelper
- 基于JavaScript和CSS的随寻订购网页设计源码 - web-order
- 基于MATLAB的声纹识别系统设计源码 - VoiceprintRecognition
- 基于Java的微服务插件集合设计源码 - wsy-plugins
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0