C#基础知识
## C#的数据结构
值类型:
整形:int32 ,short, long ,byte,无符号整形
浮点型:float,double,deceimal
字符:char
bool
枚举
结构体(简化类)
引用类型
string
class
接口,抽象类
集合类
值类型和应用类型的区别:
值类型存储在内存栈中,存储的是具体的数据,读取速度快,内存自动释放。值类型继承自system.ValueType.
引用类型存储在内存堆中,存储的是指向内存堆中数据的指针和引用。读取速度慢,内存由.net GC释放,继承自system.Object
面向对象三大特征
封装:将属性和行为相结合,通过行为来约束属性,增加数据的安全性(属性是C#封装的最好体现)
继承:提高代码的重用性,增强软件的可维护性的重要手段,符合开闭原则。
多态:重载和重写了=,= 同名方法在不同环境下,自适应不同的表现。
List和ArrayList区别
ArrayList不带泛型,数据类型丢失
List带泛型,数据类型不丢失
ArrayList需要装箱拆箱 ,List不需要
4种访问修饰符的区别
public: 对任何类都公开
private: 只对本类公开
protected:对该类及派生类公开
internal:只能在程序集内部访问
ref和out的区别
ref表示传递引用,参数必须初始化,一把用于修改全局变量
out 出差,参数不用初始化,一般由函数初始化并赋值
Abstract (抽象)
抽象类 1.不允许实例化,2.可以定义抽象方法
抽象方法 1.必须重写 2.抽象类中没有方法体,不能实现。
Virtual 虚函数 1.子类可以重写 ,可不重写 2.需要有方法体
子类重写加Override
单继承
Interface(接口)
1…不是类,一般用于约束行为
2.不能实例化 方法不能实现,不需要修饰符
2.可以多继承
3.继承接口之后必须实现,而且不属于重写,只是约束,可以加Virtual
重载和重写
重写在父子类中,父类是Virtual或者Override 子类必须加Override
方法名和参数必须相同 运行时多态
重载在同一类中 方法名相同但是参数列表不同 编译时多态
结构体和类的区别
结构体是值类型,类是引用类型
结构体可以声明字段 但是不可以有初始值
结构体已经有一个隐式的无参构造,不能手动添加
接口和委托的区别
接口:是约束类具有的功能合集,约束了接口应该具有的功能,使类从千变万化的逻辑中抽离出来,便于类的管理和拓展。同时也结局了单继承的问题。常用于多人合作和无法继承 完全抽象的情况下
委托:是约束了方法合集的一个类,可以便捷的使用委托对这个方法合集操作,常用于事件的处理中
接口和抽象类区别
接口不是类,不可以实例化 可以多继承
抽象类可以间接实例化 单继承
接口定义的函数 不可以实现 是完全抽象 ,抽象是部分抽象