创建只读属性,可以只有getter方法而没有setter方法即可。
代表主要有两个用途,一个是回调,另一个是事件处理。对于回调,代表就像是用typedef定义了一个指向函数的指针。代表需要用new来产生,代表也可以在形式上类似于类那样,来定义个该代表的对象,也可以作为对象作为函数参数进行传递。
nested loop的意思是嵌套循环,经常看到nested这个词,但一直不知道啥意思,现在总算知道了。
线程部分:
在System.Threading名空间中定义;
创建线程不必要利用到一个ThreadStart的代表,该代表来指定一个方法,这一方法就是线程执行的函数体;
启动线程用Start;
休眠线程用Sleep;
在.NET中,线程可以超越进程的界限,访问其他进程中的线程;
线程挂起有Sleep(0)和Suspend两种方法,第一种方法直到其他线程调用该线程的Interrupt来中断这种挂起状态,第二种方法会直到其他线程调用该线程的Resume才能恢复挂起的状态;
销毁线程用Abort。
一个典型例子:
class A
{
public static void fun()
{
Console.WriteLine("Another Thread is running!");
}
public static void main()
{
ThreadStart t=new ThreadStart(fun);
Console.WriteLine("Main Thread is running!");
Thread thread=new Thread(t);
thread.Start();
Console.WriteLine("...");
}
}
.NET中用Monitor类实现了类似于信号量的机制来对代码块进行串行化的访问。
Monitor.Enter(this);
代码块
Monitor.Exit(this);
C#中用lock实现了类似Monitor的功能,使用方法如下:
lock(this)
{
代码块
}
可以通过Mutex来实现同步,使用方法如下:
在类中定义一个成员变量:Mutex mutex=new Mutex(false);//这里用false表示此刻还不希望锁定。
在使用时,可以这样:
mutex.WaitOne();
代码块
mutex.Close();