.NET一般指 .NET FrameWork框架,它是一种平台,一种技术
C#是一种编程语言,可以开发基于.NET平台的应用
ASP.NET的脚本是与HTML分离的,代码被编译成了DLL,DLL可以在server端执行
ASP的脚本是与HTML在一起的,每次都会进行解释执行
string.Empty相当于"",Empty是一个静态只读的字段
string str="" 初始化对象,并分配一个空字符串的内存空间,string str=null 初始化对象,不会分配内存空间
1byte =8bit,1个汉字=2个byte,1个英文=1个byte=8bit
所以bc是对的,deg是错的。'a'是char类型,a错误,java byte取值范围是-128~127, 而C#里一个byte是0~255
相同点:都是引用类型,分配在堆上
不同点:string 对象时恒定不变的,stringBuider 对象表示的字符串是可变的
stringBuilder 是.net 提供的动态创建 string 的高效方式,以克服 string 对象恒定性带来的性能影响
对于简单的字符串连接操作,在性能上 stringBuilder 并不一定总是优于 string。因为 stringBuider 对象创建代价较大,在字符串目标连接较少的情况下,过度滥用 stringBuilder 会导致性能的浪费,只有大量的或者无法预知次数的字符串操作,才考虑 stringBuilder 来实现
事实上,一般连接次数设置 100 次以内,根本看不出两者的性能差别
一句话解释,扩展方法使你能够向现有类型“添加”方法,无需修改类型
条件:1.必须要静态类中的静态方法,2.第一个参数的类型是要扩展的类型,并且需要添加this关键字
建议:通常,只在不得已的情况下才实现扩展方法,并谨慎的实现
使用:不能通过类名调用,直接使用类型来调用
byte的取值范围是-2的8次方至2的8次方-1,-256至255,a+=1时,a的值时0,a+=5时,a的值是4
装箱就是隐式地将一个值类型转换成引用类型,如:
int i=0; Syste.Object obj=i;
拆箱就是将引用类型转换成值类型,如:
int i=0; System.Object obj=i; int j=(int)obj;(将obj拆箱)
装箱和取消装箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个全新的对象。内存拷贝,从引用类型转换成值类型,需要从堆拷贝到栈!处理器处理的事情多了,自然引发性能问题
123+”” 由于涉及到不同的数据类型,数字需要通过装箱操作转化为引用类型才可以添加到字符串中
使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能
int? x = null;//定义可空类型变量
i=3?2:5 //还可为三元运算符
int? y = x ?? 1000;//使用合并运算符,当变量x为null时,预设赋值1000
值类型变量是直接包含值。将一个值类型变量赋给另一个值类型变量,是复制包含的值,默认值是0
引用类型变量的赋值只复制对对象的引用,而不复制对象本身,默认值是null
值类型存储在栈中,引用类型存储在堆中
比如:程序内存分区中的堆与栈,另外一种是数据结构中的
栈由操作系统自动分配释放,无需手动控制;堆的申请和释放工作手动控制,容易产生内存泄漏
堆:是无序的,是一片不连续的内存域,由用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收
栈内存无需我们管理,也不受GC管理。当栈顶元素使用完毕,立马释放。而堆则需要GC清理
运算符:创建对象实例,默认调用无参构造函数
修饰符:在派生类定义一个重名的方法,隐藏掉基类方法
约束:泛型约束定义,约束可使用的泛型类型,如
int?为可空类型,默认值可以是null
int默认值是0
int?是通过int装箱为引用类型实现
一句话解释就是:将方法当作参数传入另一个方法的参数,本质是一个类
作用:提高方法的扩展性
.net中有很多常见的委托如:Func 、Action
Func是有返回值的委托,Action是没有返回值的委托
位运算是最快,使用的是位运算(逻辑左位移<<)
方法是2<<3相当于0000 0000 0000 0010 (2的16位int二进制)左移三位就是 0000 0000 0001 0000(16的二进制)
都可以标识一个常量。主要有以下区别:
取模运算: 用number%2==0可以判断,但是这个有点低级
位运算:(使用位运算逻辑并,两个位上的都为1才是1,其余都是0,判断是否等于0)
CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库
CTS:Common Type System 通用类型系统。Int32、Int16→int、String→string、Boolean→bool。每种语言都定义了自己的类型,.Net通过CTS提供了公共的类型,然后翻译生成对应的.Net类型
CLS:Common Language Specification 通用语言规范。不同语言语法的不同。每种语言都有自己的语法,.Net通过CLS提供了公共的语法,然后不同语言翻译生成对应的.Net语法
CLR:Common Language Runtime 公共语言运行时,就是GC、JIT等这些。有不同的CLR,比如服务器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相当于一个发动机,负责执行IL
程序集(中间语言,源数据,资源,装配清单)
两个对象,一个是“xyz”,一个是指向“xyz”的引用对象 s
unsafe:非托管代码,不经过CLR运行
C#在unsafe 模式下可以使用指针对内存进行操作, 但在托管模式下不可以使用指针,C#NET默认不运行带指针的,需要设置下,选择项目右键->属性->选择生成->“允许不安全代码”打勾->保存
s1+1不能隐式转换成short类型,可以修改为s1 =(short)(s1 + 1)
强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型
二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高
引用命名空间,也可using 别名
释放资源,实现了IDisposiable的类在using中创建,using结束后会自定调用该对象的Dispose方法,释放资源
都是按引用类型进行传递,属性不是变量不能作为out、ref参数传递
不一样,a==b仅仅表示a和b值相等,a.Equals(b)表示a与b一致
Math.Round(11.5)=12,Math.Round(-11.5)=-12
i++是先赋值,然后再自增;++i是先自增,后赋值
as在转换的同时判断兼容性,如果无法进行转换,返回位null(没有产生新的对象)
is只是做类型兼容性判断,并不执行真正的类型转换,返回true或false,对象为null也会返回false
as比is效率更高,as只需要做一次类型兼容检查
服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置