目录
一、C# 介绍
1.1 托管代码(Manage Code ) :
1.2 基础类型库 (Base Class Library):
1.3 程序集(Assembly):
1.4 .NET 框架:
1.5 公共中间语言(Common Intermediate Language),简称 IL。
1.6 C#编译器将源代码编译成CIL,从而生成程序集。
1.7 公共语言运行时 (Common Language Runtime ),简称 CLR。
1.8 所有依赖.NET框架的应用程序都需要CLR,CLR 实现如下功能:
1.9 .NET框架:
1.10 .NET FRAMEWORK 4.8:
二、Hello World
三、基本类型
3.1 整数类型
3.1.1 整数数据
3.1.2 在指定数据类型时使用C#关键字而不是BCL名称。
3.2 浮点类型
3.2.1 浮点类型
3.2.2 与浮点数不同,decimal类型保证范围内的所有十进制数都是精确的。例如,0.1M 就是精确值,而不是一个近似值。
3.3 字面量
3.3.1 字面量(Literal value) :源代码中的常量值
3.3.2 默认情况下,输入带小数点的字面量,编译器会自动把它解释为double 类型,整数值通常默认为int,如果值太大,编译器将把它解释为long,例如:
3.3.3 整数字面量解析
3.4 布尔及字符类型
3.4.1 布尔类型
3.4.2 字符类型
3.4.3 字符类型的字面两是用单引号括起来的,如:’A’
3.4.4 可以使用4位十六进制的Unicode值 、带有强制类型转换的整数值、或十六进制表示他们
3.4.5 字符类型:转义字符
3.4.6 字符串类型
3.5 字符串字面量
3.5.1 字符串字面量必须放在双引号(“)中, 可以包含Unicode 和转义字符。
3.5.2 在C#中,可以在字符串前使用@符号,指明转义序列不被处理,结果是一个逐字字符串字面量,它不仅能将反斜杠当作普通字符处理, 也能逐字解释所有空白字符。 例如:
3.6 字符串插值
3.6.1 字符串插值使得字符串可以支持嵌入表达式。字符串插值语法在一个字符串字面量前面加上一个$符号前缀,然后将表达式嵌入大括号中, 例如:
3.6.2 字符串字面量也可以在”@”符号前面加上”$”符号的字符串插值而成,例如:
3.6.3 string 类常用静态方法
3.6.4 字符串的不可变性
四、其它介绍
4.1 using 和 using static 指令
4.1.1 using 指令有以下种用途
4.1.2 using static 指令访问类型的静态成员以及嵌套类型而不需要指定类型名。
4.2 隐式类型的局部变量
4.3 值类型和引用类型
4.3.1 C# 中数据类型分为两类
4.3.2 值类型
4.3.3 引用类型
4.4 null
4.5 显式数据类型转换
4.6 不使用转型操作符的转换
一、C# 介绍
1.1 托管代码(Manage Code ) :
依赖于.NET 框架,在CLR(Common Language Runtime ) 管理下运行的代码
1.2 基础类型库 (Base Class Library):
BCL 是公共语言基础标准库Common Language Infrastructure (CLI)之一,它提供了内建的数据类型表示、基本文件访问,自定义属性,格式化、安全属性、 I/O 流、字符串操纵等功能, 例如:System.Int32 , System.String
1.3 程序集(Assembly):
NET库和可执行文件称为程序集,程序集是编译好的,面向.NETFRAME的代码的逻辑单元。
程序集中包含的元数据描述了对应代码中定义的类型和方法。程序集也包含描述自身的程序集元数据,这种元数据包含在一个称为“清单”(manifest) 的区域中。
1.4 .NET 框架:
.NET 所有程序集的集合。
1.5 公共中间语言(Common Intermediate Language),简称 IL。
1.6 C#编译器将源代码编译成CIL,从而生成程序集。
1.7 公共语言运行时 (Common Language Runtime ),简称 CLR。
1.8 所有依赖.NET框架的应用程序都需要CLR,CLR 实现如下功能:
- CLR 在程序运行时将IL 编译成本地代码。 这个过程称为即时编译( JIT)
- 带有类型加载器的类型系统,类型加载器负责从程序集中加载类型,类型系统负责验证是否允许使用某些类型
- 垃圾回收器
- 线程处理
1.9 .NET框架:
1.10 .NET FRAMEWORK 4.8:
- 在目录 %windows%\Microsoft.NET\Framework\v4.0.30319下可以找到框架的库及CLR。
- 可用于.NET Framework的类组织在System名字空间中。
二、Hello World
using System;
class Program
{static void Main(){Console.WriteLine("Hello World!");}
}
ILDASM
对程序集执行反汇编,显示C# 编译器生成的CIL代码。
三、基本类型
3.1 整数类型
3.1.1 整数数据
3.1.2 在指定数据类型时使用C#关键字而不是BCL名称。
3.2 浮点类型
3.2.1 浮点类型
3.2.2 与浮点数不同,decimal类型保证范围内的所有十进制数都是精确的。例如,0.1M 就是精确值,而不是一个近似值。
3.3 字面量
3.3.1 字面量(Literal value) :源代码中的常量值
3.3.2 默认情况下,输入带小数点的字面量,编译器会自动把它解释为double 类型,整数值通常默认为int,如果值太大,编译器将把它解释为long,例如:
- Console.WriteLine(1.618033988749895); // 1.61803398874989
- Console.WriteLine(1.618033988749895M); // 1.618033988749895M
3.3.3 整数字面量解析
- 没有后缀的字面量按照 int, uint, long, ulong 的顺序,解析成能够存储该值的类型
- 具有后缀U的数值按照 uint, ulong 的顺序,解析成能够存储该值的类型
- 具有后缀L的数值按照 long, ulong 的顺序,解析成能够存储该值的类型
- 如果字面量的后缀是UL 或者LU,则解析成ulong 类型
3.4 布尔及字符类型
3.4.1 布尔类型
3.4.2 字符类型
3.4.3 字符类型的字面两是用单引号括起来的,如:’A’
3.4.4 可以使用4位十六进制的Unicode值 、带有强制类型转换的整数值、或十六进制表示他们
如: ‘\u0041’ (char)65 ‘\x0041’
3.4.5 字符类型:转义字符
转义字符也能表示一个字符类型的字面量
3.4.6 字符串类型
using System;
Class Program
{static void Main(){string s1 = "A string";Console.WriteLine("s1 is" + s1); }
}
3.5 字符串字面量
3.5.1 字符串字面量必须放在双引号(“)中, 可以包含Unicode 和转义字符。
例如:string filename = “C:\\Prosharp\\Helloworld.cs”;
3.5.2 在C#中,可以在字符串前使用@符号,指明转义序列不被处理,结果是一个逐字字符串字面量,它不仅能将反斜杠当作普通字符处理, 也能逐字解释所有空白字符。 例如:
3.6 字符串插值
3.6.1 字符串插值使得字符串可以支持嵌入表达式。字符串插值语法在一个字符串字面量前面加上一个$符号前缀,然后将表达式嵌入大括号中, 例如:
Console.WriteLine($"Your full name is {firstName} {lastName}");
3.6.2 字符串字面量也可以在”@”符号前面加上”$”符号的字符串插值而成,例如:
using System;
Class Program
{static void Main(){string s1 = "Hello World!";Console.WriteLine($@"The string is: {s1}"); }
}
3.6.3 string 类常用静态方法
3.6.4 字符串的不可变性
string 类型的关键特性在于它的不可变性(immutable).可以为string 变量赋一个全新的值,但出于性能考虑,没有提供修改字符串内容的机制,例如:
四、其它介绍
4.1 using 和 using static 指令
4.1.1 using 指令有以下种用途
- 允许使用命名空间的类型而不需要指定命名空间的名字,例如:using System.text;
- 允许创建一个类型或命名空间的别名,例如:using Project = PC.MyCompany.Project;
4.1.2 using static 指令访问类型的静态成员以及嵌套类型而不需要指定类型名。
例如:using static System.Math;
4.2 隐式类型的局部变量
var 用来声明隐式类型的局部变量。编译器根据声明时初始化语句推断数据类型
4.3 值类型和引用类型
4.3.1 C# 中数据类型分为两类
- 值类型
- 引用类型
4.3.2 值类型
- 值类型存储在栈(即堆栈stack)中
- 除string 外,基本数据类型都是值类型
4.3.3 引用类型
- 引用类型存储在托管堆中
- 引用只复制对数据的引用,所以两个不同变量可引用相同的结构,
- 例如string s1= “hello world”;
- string s2 = s1;
- 大多数复杂的c#类,包括用户自定义类型,都是引用类型
- 如果希望用户自定义类型为值类型,需要声明成结构
- 一般引用类型需要使用new 操作符从堆上分配对象
4.4 null
- null值由关键字null标识,表明变量不引用任何有效对象,null值只能赋给引用类型,指针类型,可空值类型。 例如:string faxNumber = null;
- 一般不能把 null赋给 值类型,因为值类型不能包含引用。但是从C# 2.0开始,允许使用可空修饰符?声明可存储null 的变量, 例如:
- int ?count = null;
- // ………….
- if (count == null)
- // …………….
4.5 显式数据类型转换
- C# 中,可以使用转型操作符执行转型,通过在圆括号中指定希望变量转换成的类型。转换可能丢失精度和数据,例如:
- long longNumber = 50918309109;
- int intNumber = (int)longNumber;
- C# 提供了特殊关键字checked/unchecked 标识代码块, 如果代码块中发生数据溢出,checked 将使得程序抛出异常,如:
- 不存在从数值类型到bool的有效转换
4.6 不使用转型操作符的转换
每个数据类型都包含一个Parse() 方法,它允许将字符串转换成对应的数值类型,例如:
string text = "9.11E-31";float kgElectronmass = float.Parse(text);
System.Convert 也能将一种类型转换为另一种类型,但是它只支持小的数据类型,而且是不可扩展的。它允许从 char, sbyte, short, int, long, ushort, uint, ulong, float, double, decimal, DateTime 和string 类型中的一种转换到另一种类型
string middleText = "261.626";
double middle = System.Convert.ToDouble(middleText);
bool isMiddle = System.Convert.ToBoolean(middle);
所有类型都支持ToString 方法 输出一个类型的字符串表示,例如:
bool isMiddle = true;
string text = isMiddle.ToString(); // text = True;