Evernote Export
.................................. .Net框架 ...................................
.Net [ .Net框架 /.NetFramework ]
.NET多语言支持
源程序 -->通过CIL(公共中间语言)编译成程序集 [能被.Net框架认识] --> 通过CLR(公共语言进行时)进行二次编译 --> 机器码 [能被计算机识别]
C#源程序在被编译为程序集以后,就独立于C#,因此程序集可以由其他种类的语言所调用;
同时,因为程序集并没有包含本地机器的指令,所以它与具体的机器类型也分隔开了,可以被装有.NET框架的任何机器运行
1. CIL/IL(Common Intermediate Language,公共中间语言):
公共:类似精通各种语言的翻译,将各种语言翻译成.Net大老板能识别的东西
中间:翻译成.Net大老板能识别的东西但并不能直接被计算机识别,只能是.Net老板识别,需要通过CLR二次编译成机器码
语言:也是一种语言,不过是比C#更低级一点的语言;也可以直接编写 CIL语言的程序,只不过效率低
因为程序集都是由 CIL语言描述,所以CIL也叫程序集语言;又因为CIL代码需要在.Net平台下运行,所以CIL语言又叫 托管语言
2. CTS(Common Type System):公共类型系统
定义了一套CIL语言的规则;若要自己创建一个类似C#,运行在.Net的语言,即要符合CIL的规则 CTS,
例如:所有类型都隐式地继承自System.Object类型,所有类型都只能继承自一个基类
3. 程序集:C#源程序经过编译后生成的结果文件叫程序集,分为.dll(类库)或.exe(可执行程序)
包含多个命名空间,每个命名空间包含 元数据[IDE通过元数据感应,打出".",自动弹出菜单] 和 CIL[元数据的实现]
4. CLR(Common Language Runtime,公共语言进行时):
将程序集进行二次编译成计算机能识别的 机器码
5. BCL: 基类库;包含mscorlib.dll[ 定义数据类型,字符串等 ],会被自动引用,
6. FCL:.Net框架自带的类库;BCL是FCL的一个子集
string类和 String类的区别:
基元类型:属于BCL[即.Net框架]而非某个编程语言的数据类型
如: System.Byte,System.Int16,System.String
C#中的string是映射到 基元类型String,所以没有区别
基类[父类]、派生类[子类];继承某个类,实现某个方法 [ 一般是指abstract抽象类,没有实体的方法 ]
GC: 垃圾回收机制 [Garbage Collection]
Web服务:RPC以及其他 -> WCF (SOAP) -> Web API (REST) -> Web API 2 (REST)
Web应用: ASP -> ASP.Net -> ASP.NetMVC -> ASP.Net Code
数据库:ADO.Net -> ADO.NetEntityFrameWork(ORM)
异步编程:委托 -> 事件 -> 任务 -> 任务语法糖
程序集和命名空间:
一个程序集[DLL文件],被逻辑上划分为多个命名空间,一个命名空间用来存储多个类 [ 命名空间的概念是为了区分同一个程序集中同名的方法,变量 ]
--- 跟一块硬盘划分为多个盘符一样的原理
.................................. C#的数据类型 ...................................
C# 语言是一种强类型语言,要求每个变量都必须指定数据类型
C# 语言的数据类型分为 值类型 和 引用类型 两种
|
||
|
值类型
|
引用类型
|
父类
|
1.都继承于System.Object 的子类System.ValueType;
2.存储在栈中
3.声明的时候不管是否赋值,编译器在栈中就已经分配了内存,
4.栈直接存储数据
|
1.都继承于 System.Object;
2.存储在 栈和堆中
3.声明的时候,只是在栈中分配一小片内存,
创建实例时,在堆上分配空间并将堆上的空间地址存储到栈中的内容
4.栈中存储的是引用[地址],堆中存储数据
|
|
|
Student stu = newStudent();
1. 先在栈中开辟一块类型为Student的内存空间放置变量stu
2. 调用类的构造函数创建类的对象 newStudent(),存储在堆中
stu指向 这个对象
|
范围
|
整型[short,int,long], 浮点型[float,double]
字符[char], 布尔[bool], 结构体[struct], 枚举[enum]
|
类类型[class], 字符串[string],数组[array]
抽象类[abstract], 接口[interface], 委托[delegate]
|
默认值
|
0
|
NULL
|
能否被继承
|
值类型不能被继承[如:结构体]
|
引用类型可以被继承
|
复制
|
int a = 10;
int b = a;
a,b相互独立[深复制]
|
A a = new A();
A a2 = a;
[浅复制]:堆中只有一个A实例,a和a2都执行它,
改变a中某个成员的值,a2的成员也会改变;
|
int a = 12;
object o = a;[装箱]这个值类型被复制并分配到堆中,并把它转换为引用类型
int b = (int)o;[拆箱]引用类型被复制到栈中,并把它转换为值类型
拆箱:必须用装箱时的类型来拆箱 [装箱时是int,拆箱时只能用int]
|
整形: byte 类型[字节型]、short 类型[短整形]、int 类型[整形]、long 类型[长整形],并分别定义了有符号数和无符号数
有符号数可以表示负数,无符号数仅能表示正数 ==> 除了byte是无符号数,其他都是有符号数,1byte = 8bit,1个byte的范围 0~255
溢出: byte a = 255; a+=1; ==> a =0 a+=2; ==> a=1
浮点型:单精度浮点型 float ,双精度浮点型 double,高精度 decimal
C# 语言中默认的浮点型是 double 类型
使用单精度浮点型
字符:char,使用单引号括起来;
它占用两个字节;能存放一个字符,能存放一个汉字
字符串:string,使用引号括起来;
不定长;由于在声明字符串类型的数据时需要用双引号将其括起来,双引号就成了特殊字符,不能直接输出,转义字符的作用就是输出这个有特殊含义的字符
.................................. C#数据类型之间的转换 ...................................
1.数值类型之间和装拆箱 2.任何类型和字符串类型之间 3.任何类型和任何类型之间
|
|
|
隐式转换
|
整型 ---> 浮点型 / 任何类型 --> object[装箱]
|
|
显示转换 [强制转换]
变量名 =(数据类型)变量名/值
|
浮点型 ---> 整型
数据类型要兼容
|
int a = (int)3.99; //转换为int时,舍去小数位
int b =(int)enumE.a; // [枚举类型转换为 int ]
|
装箱 和 拆箱
|
装箱:值类型 -->引用类型 [ 隐式转换 ]
拆箱:引用类型 ---> 值类型/引用类型 [ 显示转换 / as ]
[ 一般都是 object类型,也没见过其他类型 ]
|
object a = "1";
string b = (string)a;
string c = a as string;
|
装箱:是隐式转换,任何类型都可以转换为object,不管什么东西都往箱子里面扔
拆箱:要有对应的钥匙,才能打开箱;要转换为对应的类型
|
|
|
XXX.ToString( )方法
ToString是Object中方法,任何类型都继承Object
|
任何类型 ---> 字符串类型
|
string a = 123.ToString();
|
static XXX.Parse(string s) [ 拆箱 ]
|
字符串类型 ---> 任何类型
转换成功返回结果,不成功抛出异常
|
i = int.Parse("2.3" );
//2.3超过int的取值范围
|
static bool TryParse(string s, out int/bool/. result)
|
字符串类型 ---> 任何类型
转换成功返回true,结果存储在 result 中
|
int i;
if(int.TryParse("2.3", i)==true)
|
Convert.ToXXX(object obj)
|
任何类型 ---> 任何类型
|
int a = Convert.ToInt16(‘2‘);
//ToInt16(short)/ ToInt32(int) /ToInt64(long)
|
.................................. C# 的访问修饰符 ...................................
public:公共类型; internal:内部类型,同一个程序集; protected:保护类型,类和子类中;
internal protected:内部保护类,同一程序集中的类,所有程序集中子类; private:私有类型,类中
|
||
|
默认访问修饰符
|
可选择访问修饰符
|
类/静态类成员
|
private
|
public,intarnal, protected, internal protected, private
|
结构成员
|
private
|
public, internal, protected, private
|
接口成员
|
public
|
none
[接口的用途是让其他类能够访问,所以接口成员都是 public类型]
|
枚举成员
|
public
|
none
[枚举成员始终都是 public类型]
|
.................................. C# 各部分的定义 ...................................
作者:大李子
邮箱:1185241994@qq.com
本文版权归作者所有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利