一系统数据类型和C#简化符号
和各任何编程语言一样C#定义了一组内建数据类型每种类型都有对应的C#关键字取值范围和作用如系统类型中表示真实的或者虚假的类型为 SystemBooleanC#简化符号为bool范围true或false又如uint对应的系统类型是SystemUInt范围 ~代表一个无符号的位数其中bool是遵循CLS(公共语言规范)而uint则不遵循CLS(符合CLS的NET代码可以被任何托管编程语言使用不止是C#还有VBNET和托管C++等)
C#内建的系统型有个请查看NET Framework 文档来熟悉它们
二变量声明和初始化
如果要声明一个数据类型作为变量可以通过在变量名之前指定类型来实现还可以使用全名分配数据类型如
bool mybool = false;
string myString;
myString = This is a string;
SystemInt i = i i = ;
在使用变量前必须先对变量赋值否则会收到一个编译错误(如上文加上 i = i + 是不能通过编译的)内建数据类型还支持构造函数(对于构造函数后面章节会有介绍)这不允许我们使用new关键字来创建变量它将变量自动设置为其默认值:
int i = new int(); // i设置为
i = i + ; // i现在的值为
三数据转换
不同类型的数据是可以转换的
按转换前后的数据的位数变化可分为窄化转换和宽化转换当一种类型的值转换为大小相等或更大的另一类型时则发生宽化转换(也叫扩大转换)当一种类型的值转换为较小的另一种类型时则发生窄化转换(也叫收缩转换)宽化转向不会导致数据丢失因此允许隐式进行但窄化转换因为有数据丢失的风险(称为溢出)将导致编译错误如果希望通知编译器我们想要处理窄化运算引起的可能的数据丢失就必须使用C#强制转换运算符()来进行显式强制转换
byte myByte = ;
int myInt = ;
myByte = (byte)myInt;
如果我们在构建一个不能接受数据丢失的应用程序C#提供的checked关键字将确保数据丢失肯定会被检测到
myByte = checked(byte)myInt;
如果发生数据丢失将发生一个运行时异常(对于异常后面将深入讨论)另外C#编译器还提供/checked标志可以设定项目级别的溢出检测与checked相对的还有unchecked关键字请查阅相关文档进行了解
四运算符
C# 提供大量运算符这些运算符是指定在表达式中执行哪些操作的符号通常允许对枚举进行整型运算例如 ==!=<>& lt;=>=^&|~++ 和 sizeof()此外很多运算符可被用户重载由此在应用到用户定义的类型时更改这些运算符的含义各运算符的用法及优先级请查阅相关文档
新增的运算符??如果 ?? 运算符的左操作数非 null该运算符将返回左操作数否则返回右操作数
另一个新增的Lambda运算符(=>)会在后面章节中讲述
五流程控制
C#迭代结循环构
除了基本的for循环while循环及do/while循环C#还允许通过使用foreach关键字遍历数组中的所有项
string[] carTypes = {FordBMWYugoHonda};
foreach(string c in carTypes)
ConsoleWriteLine(c);
C#条件结构
if/else语句C和C++的程序员要注意C#中的if/else语句只能作用于布尔表达式不能用于诸如这样的值
switch语句C#switch语句一个不错的特性是除了数值数据之处我们还可以运算字符串数据
static void ExecuteSwitchOnString()
{
ConsoleWriteLine(C# or VB);
ConsoleWrite(Please pick your language preference: );
string langChoice = ConsoleReadLine();
switch (langChoice)
{
case C#:
ConsoleWriteLine(Good choice C# is a fine language);
break;
case VB:
ConsoleWriteLine(VB NET: OOP multithreading and more!);
break;
default:
ConsoleWriteLine(Wellgood luck with that!);
break;
}
}