1 数组:
数组初始化:type[] array-name={val1,val2,val3,val4...valN};
交错数组:元素为数组的数组。
Type[][]array-name=new type[size][];
例如:
Int[][]jagged=new int[3][];
Jagged[0]=new int[4];
Jagged[1]=new int[3];
Jagged[2]=new int[5];
2 参数:
参数传递的方式:默认的情况下,C#按值传送
使用ref与out参数:
A 使用ref参数:创建引用调用
B 使用out参数:使用引用参数从方法中接收值,但不是按值传递。
Ref参数必须在调用前赋值。Out参数只能用于将值传出去,在调用前不必赋值,其值无效,在方法内对其赋值。
使用参数可变的参数:params参数
如int Min(params int[] nums)
3 Static类:
A 不允许创建类对象
B 必须只包含static成员
4 转换运算符(类型转换):
Public static operator implicit target-type(source-type v){return value;}//隐式转换
Public static operator explicit target-type(source-type v){return value;}//显式转换
其中:target-type是转换的目标类型,source-type是转换的源类型
5 不能重载的运算符:
&&
()
.
?
??
[]
||
=
=>
->
As
Checked
Default
Is
New
Sizeof
Typeof
Uncheck
6 索引器:
创建一维索引器
element-type this[int index]{
//The get accessor
get
{
//return the value specified by index
}
//the set accessor
set
{
//set the value specified by index
}
}
7 结构:
结构式类的一个功能简化版本。结构是值类型,对他们的操作可以直接进行,而不必通过引用。能更节省内存,提高性能。
8 异常处理:
System名称空间中定义的常用异常:
ArrayTypeMismatchException
DivideByZeroException
IndexOutOfRangeException
InvalidCastException
OutOfMemeryException
OverflowException
NullReferenceException
9 委托:
能引用方法的对象
声明形式:delegate ret-type name(parameter-list);
Ret-type是委托将调用的方法的返回值类型。委托的名称由name指定。通过委托委托调用的方法所需的参数在parameter-list中指定。创建委托后,委托实例调用的方法的返回值类型和参数列表应该与委托的声明语句中指定的返回值类型和参数列表一致。委托可用于调用与声明的签名和返回值类型一致的任何方法。此外,方法可以是与对象相关的实例方法或与类相关的static方法,只要该方法的返回值类型和签名与委托声明的返回值类型和签名一致即可。
参考:
http://msdn.microsoft.com/zh-cn/library/ms173171(v=vs.100).aspx
http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html
10 Lambda表达式:
创建匿名方法的另一种形式
使用运算符:“=>”
左边指定输入参数,右边是Lambda主体
单参数形式:param=>expr
多单数形式:(param-list)=>expr
11 事件:
事件构建在委托的基础上。从本质上讲,事件是一种信号机制,它在某些操作发生时自动的发出通知。事件的工作原理为:如果对某个事件感兴趣,则对象为该事件处理程序。在事件发生时,会调用所有注册在此事件上的处理事件
常用事件声明:
Event event-delegate event-name;
例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyTools
{
//支持事件的委托声明,定义事件的返回类型和签名
delegate void MyEventHandler();
/// <summary>
/// 定义事件
/// </summary>
class MyEvent
{
public event MyEventHandler SomeEvent;//定义事件
//
public void OnSomeEvent()
{
if (SomeEvent != null)
{
SomeEvent();
}
}
}
class EventDemo
{
//An event handler
static void Handler()
{
Console.WriteLine("Event occurred");
}
static void Main()
{
MyEvent evt = new MyEvent();
//Add Handler() to the event list
evt.SomeEvent+=new MyEventHandler(Handler);
//Fire the event
evt.OnSomeEvent();
}
}
}
事件存取器:
event Event-delegate event-name
{
add
{
//Code to add an event to the chain
}
remove
{
//Code to remove an event from the chain
}
}
例如;
//Declare a delegate type for an event
delegate void MyEventHandler();
//delegate a class that holds up to 3 events
class MyEvent
{
MyEventHandler[] evnt = new MyEventHandler[3];
public event MyEventHandler SomeEvent
{
//Add an event to the list
add
{
int i;
for(i=0;i<3;i++)
if (evnt[i] == null)
{
evnt[i] = value;
break;
}
if (i == 3) Console.WriteLine("Event list full");
}
//Remove an Event from the list
remove
{
int i;
for(i=0;i<3;i++)
if (evnt[i] == value)
{
evnt[i] = null;
break;
}
if (i == 3) Console.WriteLine("Event handler not found.");
}
}
}
12 using指令
Using alias=name;
为类型或名称空间创建别名
13 预处理器
#define symbol:定义符号序列。
#if #endif :判断符号是否已定义
#undef :删除定义的符号
#error:用于调试,强制编译器停止编译,
#warning:类似于#error指令,产生警告消息
#region 代码分块
#endregion
#pragma 传递给编译器指示
14 运行时类型标识
A is: expr is type
测试expr对象是否是type类型
As:expr as type
转换成指定类型
Typeof(type)
获取类型的具体信息