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语句

 

posted @ 2020-03-16 00:45  magic_d  阅读(961)  评论(0)    收藏  举报