C#学习笔记

1.值类型,引用类型区别,装箱和拆箱
值类型是直接存储一个数值,而引用类型是存储对值的引用,这两种类型分别存储在不用的内存区域。而从内存上看,值类型是在栈中的操作,而引用类型是在堆中的操作。值类型是具体的那个数值所占用的空间大小,而引用类型是存放那个数值的空间地址。(在C#中,结构体是值类型,类是引用类型)
值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。
引用类型(reference type):string 和 class统称为引用类型。当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。

引用类型与值类型相同的是,结构体也可以实现接口;
引用类型可以派生出新的类型,而值类型不能;
引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型);
引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
装箱 就是把“值类型”转换成“引用类型”(Object);
拆箱 就是把“引用类型”转换成“值类型”;
2.接口和继承
接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。
C#中接口可以多继承,接口之间可以相互继承和多继承。一个类可以同时继承一个类和多个接口,但是接口不能继承类。
3.String和StringBuilder的异同
相同点在于String和StringBuilder表示的都是连续序列的字符串,只是他们的内部实现方式有所不同。
不同点在于String是不可变类型,String值的每一次改变都是在创建新的对象。

4.sealed,const 和onlyread的区别; ""与null的区别
Static:是静态的,修饰的类,叫静态类,修饰的成员,叫静态成员
Const:常量,不可变,资源共享;该字段不可以被修改,可以通过类名访问
基本数据类型,string,引用类型的变量的值只能是null。
Readonly:只读,表示该字段初始化后不能被修改;主要是用于修饰字段,表示该字段是只读,该字段只能在创建的时候初始化或者构造函数中初始化;
区别:const常量在编译时赋值,所以一旦赋值将不能改变,也不能用变量给const常量赋值。
readonly是只读类型,而不是常量,其在运行时赋值,所以可以使用用类型给其赋值,还可以在构造函数内赋值,从而达到运行不的构造函数,readonly数据的值也不同。
sealed:密封的,修饰类:该类不能被继承
修饰方法,属性:防止被再次重写
这个sealed只能修饰重写的成员,即修饰方法时,要配合override一起使用,单独使用不能修饰方法。
null 没有创建内存空间,str中存放的是空引用指针;
" " 创建了内存空间,str中存放的是指向堆中的指针。

5.委托,delate :三种泛型委托
在这里插入图片描述
Action:Action是无返回值的泛型委托。
Action 表示无参,无返回值的委托
Action<int,string> 表示有传入参数int,string无返回值的委托
Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托
Action至少0个参数,至多16个参数,无返回值。
Func:Func是有返回值的泛型委托
Func<object,string,int> 表示传入参数为object, string 返回值为int的委托
Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void
Predicate:predicate 是返回bool型的泛型委托
predicate 表示传入参数为int 返回bool的委托
   Predicate有且只有一个参数,返回值固定为bool
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
6.数组、List和ArrayList的区别
链接: 参考博文.

7.面向对象三大特征,五大原则
参考博文.

三大特征:封装,继承,多态。
五大原则:(1)单一职责原则 SRP ,一个类应该有且只有一个去改变它的理由,一个类应该只有一个工作。
(2)开放封闭原则 OCP,对象或实体应该对扩展开放,对修改封闭。
(3)里氏替换原则 LSP,在对象X为类型q(X)成立,那么当S是T的子类时,对象Y为类型S时q(y)也成立。(对父类的调用子类也适用)
(4)依赖倒转原则 DIP,高层次模块不应该依赖低层次模块,他们都应该依赖抽象。具体实现也依赖抽象,而不是抽象依赖现实。
(5)接口隔离原则 ISP,不应该强迫客户端实现一个用不上的的接口,或是说客户端不应该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好得多。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值