C#关键字
如果想使用关键字作为标识符,可以在关键字前加@,例:@abstract
- 保留关键字
abstract | as | base | bool | break | byte | case |
---|---|---|---|---|---|---|
catch | char | checked | class | const | continue | decimal |
default | delegate | do | double | else | enum | event |
explicit | extern | false | finally | fixed | float | for |
foreach | goto | if | implicit | in | in(genericmodifier) | int |
interface | internal | is | lock | long | namespace | new |
null | object | operator | out | out(genericmodifier) | override | params |
private | protected | public | readonly | ref | return | sbyte |
sealed | short | sizeof | stackalloc | static | string | struct |
switch | this | throw | true | try | typeof | uint |
ulong | unchecked | unsafe | ushort | using | virtual | void |
volatile | while |
- 上下文关键字
add | alias | ascending | descending | dynamic | from | get |
---|---|---|---|---|---|---|
global | group | into | join | let | orderby | partial(type) |
partial(method) | remove | select | set |
数据类型
值类型
类型 | 描述 | 范围 | 默认值 |
---|---|---|---|
bool | 布尔值 | True 或 False | False |
byte | 8 位无符号整数 | 0 到 255 | 0 |
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | ‘\0’ |
decimal | 128 位精确的十进制值,28-29 有效位数 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
double | 64 位双精度浮点型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
float | 32 位单精度浮点型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符号整数类型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
sbyte | 8 位有符号整数类型 | -128 到 127 | 0 |
short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 |
uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 |
ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 |
ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 |
引用类型
内置的引用类型:
- object
- dynamic
- string
object
装箱:值类型转换为对象类型
拆箱:对象类型转换为值类型
dynamic
动态类型与对象类型相似,但对象类型变量的类型检查在编译时发生。而动态类型变量的类型检查在运行时发生。
string
两种分配形式: “” 和 @“”
@“”(逐字字符串)将转义字符 “\” 当作普通字符对待且字符中可以任意换行,换行符及缩进空格都计算在字符串长度之内。
string是特殊的引用类型,从应用角度体现了值类型语义,从内存角度实现为引用类型存储,位于托管堆。
例:
string str1 = "abc";
string str2 = str1;
Console.WriteLine("str1:" + str1 + " str2:" + str2);
//输出为:str1:abc str2:abc
str2 = "cba";
Console.WriteLine("str1:" + str1 + " str2:" + str2);
//输出为:str1:abc str2:cba
这里首先在堆中开辟一个内存空间存储 str1 的值 “abc” (地址1),然后在栈中开辟一个内存空间存储 str1 的内存地址(地址1),当将 str1 的值赋给 str2 时,会在堆中开辟一个新的内存空间用于保存值 “abc”(地址2) ,然后再栈中开辟一个新空间保存 str2 的内存地址(地址2),修改 str2 的值时,再次再堆中开辟一个新的内存空间保存 str2 的新值 “cba” (地址3),然后将 str2 再栈中对应所保存地址修改为新值的地址(地址3),而堆中的 str2 旧值的内存空间(地址2)将在下一次垃圾回收中被回收。
用户自定义引用类型:
- class
- interface
- delegate
指针类型
类型转换
隐式类型转换
将较小范围数据类型转换为较大范围数据类型时,编译器自动完成类型转换,这些转换是C#默认以安全方式进行的转换,不会导致数据丢失。
显式类型转换(强制类型转换)
将较大范围数据类型转换为较小范围数据类型,或将一个对象类型转换为另一个对象数据类型,使用强制类型转换符号进行显式转换,强制转换可能导致数据丢失。
类型转换方法
ToBoolean | 把类型转换为布尔型 |
---|---|
ToByte | 把类型转换为字节类型 |
ToChar | 把类型转换为单个 Unicode 字符类型 |
ToDateTime | 把类型(整数或字符串类型)转换为 日期-时间 结构 |
ToDecimal | 把浮点型或整数类型转换为十进制类型 |
ToDouble | 把类型转换为双精度浮点型 |
ToInt16 | 把类型转换为 16 位整数类型 |
ToInt32 | 把类型转换为 32 位整数类型 |
ToInt64 | 把类型转换为 64 位整数类型 |
ToSbyte | 把类型转换为有符号字节类型 |
ToSingle | 把类型转换为小浮点数类型 |
ToString | 把类型转换为字符串类型 |
ToType | 把类型转换为指定类型 |
ToUInt16 | 把类型转换为 16 位无符号整数类型 |
ToUInt32 | 把类型转换为 32 位无符号整数类型 |
ToUInt64 | 把类型转换为 64 位无符号整数类型 |