C#介绍
C#是面向对象的语言,提供了对面向组件(component-oriented)变成的支持,通过属性,方法和事件来提供编程模型;C#具有同一类型系统(unified type system),所有类型都继承于单个跟类型:object,所有类型都共享一组通用操作,并且任何类型的值都能够以一致的方式进行存储,传递和操作,C#同事支持用户定义的引用类型和值类型,即允许对象的动态分配,也允许轻量结构的内联存储。
命名空间提供了一种分层的方式来组织C#程序和库,命名空间包含有类型和其他命名空间-例如System命名空间包含若干类型以及若干其他命名空间(如IO和Collections)。如果使用using 引用了某一给定命名空间,就可以通过非限定的方式来使用改命名空间成员的类型,C#本身没有单独的运行库,事实上.Net Framework就是C#运行库。
1.1 程序结构
C#钟的组织结构的关键概念是程序(program),命名空间(namespace),类型(type),成员(memeber)和程序集(assembly)。C#程序由一个或者多个源文件组成,程序中声明类型,类型包含成员,并且可按命名空间进行组织。类和接口就是类型的示例。字段(field),方法,属性和事件是成员的示例。再编译C#程序时,他们被物理的大包围程序集,程序集通常具有文件扩展名.exe或者.dll,具体取决于他们是实现应用程序(application)还是实现库(library)
1.2 类型和变量
C#得类型有两种:值类型(Value type)和引用类型(reference type).值类型得变量直接包含他们得数据,而引用类型得变量存储对他们数据得引用,后者成为对象,对于引用类型得变量两个变量可能引用同一个对象,因此对一个变量得操作可能会导致另一个变量得引用对象。对于值类型,每个变量都有他们得数据副本(除ref和out变量之外),因此一个变量得操作不可能改变另外一个变量。
类型表:

C#程序使用类型声明(type declaration)创建新类,类型声明指定类型名称和成员,C#有5类类型是可定义得 类类型(class type)/结构类型(struct type)/接口类型(interface type)/枚举类型(enum type)和委托类型(delegate type)
类类型定义了一个包含数据成员(字段),函数成员(方法,属性等)得数据结构。类类型支持单一继承和多态,这些是派生类可用来扩展和专化基类得机制
结构类型与类类型相似,表示一个带有数据成员和函数成员的结构。但是,与类不同,结构是一种值类型,并且不需要堆分配。结构类型不支持用户指定的继承,并且所有结构类型都隐式地从类型 object 继承。
接口类型定义了一个协定,作为一个公共函数成员的命名集。实现某个接口的类或结构必须提供该接口的函数成员的实现。一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口。
委托类型表示对具有特定参数列表和返回类型的方法的引用。通过委托,我们能够将方法作为实体赋值给变量和作为参数传递。委托类似于在其他某些语言中的函数指针的概念,但是与函数指针不同,委托是面向对象的,并且是类型安全的。
类类型、结构类型、接口类型和委托类型都支持泛型,因此可以通过其他类型将其参数化
C# 的类型系统是统一的,因此任何类型的值都可以按对象处理。C# 中的每个类型直接或间接地从 object 类类型派生,而 object 是所有类型的最终基类。引用类型的值都被视为 object 类型,被简单地当作对象来处理。值类型的值则通过对其执行装箱和拆箱操作按对象处理。下面的示例将 int 值转换为 object,然后又转换回 int。
using System;
class Test
{
static void Main() {
int i = 123;
object o = i; // Boxing
int j = (int)o; // Unboxing
}
}
当将值类型的值转换为类型 object 时,将分配一个对象实例(也称为“箱子”)以包含该值,并将值复制到该箱子中。反过来,当将一个 object 引用强制转换为值类型时,将检查所引用的对象是否含有正确的值类型,如果有,则将箱子中的值复制出来。
C# 的统一类型系统实际上意味着值类型可以“按需”转换为对象。因为统一,所以使用类型 object 的通用库可以与引用类型和值类型一同使用。
C# 中存在几种变量 (variable),包括字段、数组元素、局部变量和参数。变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值能够存入变量,如下表所示。
|
变量类型 |
可能的内容 |
|
不可以为 null 的值类型 |
类型完全相同的值 |
|
可以为 null 的值类型 |
null 值或类型完全相同的值 |
|
object |
null 引用、对任何引用类型的对象的引用,或者对任何值类型的装箱值的引用 |
|
类类型 |
null 引用、对该类类型的实例的引用,或者对从该类类型派生的类的实例的引用 |
|
接口类型 |
null 引用、对实现该接口类型的类类型的实例的引用,或者对实现该接口类型的值类型的装箱值的引用 |
|
数组类型 |
null 引用、对该数组类型的实例的引用,或者对兼容数组类型的实例的引用 |
|
委托类型 |
null 引用或对该委托类型的实例的引用 |
1.3表达式
表达式由操作数 (operand) 和运算符 (operator) 构成。表达式的运算符指示对操作数适用什么样的运算。运算符的示例包括+、-、*、/ 和 new。操作数的示例包括文本、字段、局部变量和表达式。
|
类别 |
表达式 |
说明 |
|
基本 |
x.m |
成员访问 |
|
x(...) |
方法和委托调用 |
|
|
x[...] |
数组和索引器访问 |
|
|
x++ |
后增量 |
|
|
x-- |
后减量 |
|
|
new T(...) |
对象和委托创建 |
|
|
new T(...){...} |
使用初始值设定项创建对象 |
|
|
new {...} |
匿名对象初始值设定项 |
|
|
new T[...] |
数组创建 |
|
|
typeof(T) |
获取 T 的 System.Type 对象 |
|
|
checked(x) |
在 checked 上下文中计算表达式 |
|
|
unchecked(x) |
在 unchecked 上下文中计算表达式 |
|
|
default(T) |
获取类型 T 的默认值 |
|
|
delegate {...} |
匿名函数(匿名方法) |
|
|
一元 |
+x |
恒等 |
|
-x |
求相反数 |
|
|
!x |
逻辑求反 |
|
|
~x |
按位求反 |
|
|
++x |
前增量 |
|
|
--x |
前减量 |
|
|
(T)x |
将 x 显式转换为类型 T |
|
|
await x |
异步等待 x 完成 |
|
|
乘法 |
x * y |
乘法 |
|
x / y |
除法 |
|
|
x % y |
求余 |
|
加减 |
x + y |
加法、字符串串联、委托组合 |
|
x – y |
减法、委托移除 |
|
|
移位 |
x << y |
左移 |
|
x >> y |
右移 |
|
|
关系和类型检测 |
x < y |
小于 |
|
x > y |
大于 |
|
|
x <= y |
小于或等于 |
|
|
x >= y |
大于或等于 |
|
|
x is T |
如果 x 为 T,则返回 true,否则返回 false |
|
|
x as T |
返回转换为类型 T 的 x,如果 x 不是 T 则返回 null |
|
|
相等 |
x == y |
等于 |
|
x != y |
不等于 |
|
|
逻辑 AND |
x & y |
整型按位 AND,布尔逻辑 AND |
|
逻辑 XOR |
x ^ y |
整型按位 XOR,布尔逻辑 XOR |
|
逻辑 OR |
x | y |
整型按位 OR,布尔逻辑 OR |
|
条件 AND |
x && y |
仅当 x 为 true 时,才对 y 求值 |
|
条件 OR |
x || y |
仅当 x 为 false 时,才对 y 求值 |
|
null 合并 |
X ?? y |
如果 x 为 null,则计算结果为 y,否则计算结果为 x |
|
条件 |
x ? y : z |
如果 x 为 true,则对 y 求值;如果 x 为 false,则对 z 求值 |
|
赋值或匿名函数 |
x = y |
赋值 |
|
x op= y |
复合赋值;支持的运算符有: *= /= %= += -= <<= >>= &= ^= |= |
|
|
(T x) => y |
匿名函数(lambda 表达式) |
1.4语句

浙公网安备 33010602011771号