您正在查看: C# 分类下的文章

线程是轻量级的进程

线程是轻量级的进程。使用线程能提供应用系统的效率。为了使用多线程需要引入System
命名空间中的Threading 命名空间。System.Threading 命名空间包含需要使用多线程
的地方。

using System;
using System.Threading;
public class MyThread {
public static void Thread1() {
for (int i = 0; i < 10; i++) {
Console.WriteLine("Thread1 {0}", i);
}
}
public static void Thread2() {
for (int i = 0; i < 10; i++) {
Console.WriteLine("Thread2 {0}", i);
}
}
}
public class MyClass {
public static void Main() {
Console.WriteLine("Before start thread");
Thread tid1 = new Thread(new ThreadStart(MyThread.Thread1));
Thread tid2 = new Thread(new ThreadStart(MyThread.Thread2));
tid1.Start();
tid2.Start();
}
}

这个程序有一个MyThread 类包括两个静态方法Thread1 和Thread2。为了创建线程需
要创建Thread 类对象。Thread 类的构造方法是ThreadStart 的引用。这个构造方法可
能会发出两种类型的异常;当参数是一个空引用时引发ArgumentNullException 异常
或当程序不允许创建线程的SecurityException 异常。
Thread类的参数是ThreadStart 的引用。当线程开始时执行ThreadStart 指向的方法。
ThreadStart 的参数名是函数名,作为线程的函数。Thread1 是一个静态方法可以使用

类名来访问不需要要创建类的对象。线程开始执行Thread 类的Start()方法。下面是程
序的输出:
Before start thread
Thread1 0
Thread1 1
Thread1 2
Thread1 3
Thread1 4
Thread1 5
Thread1 6
Thread1 7
Thread1 8
Thread1 9
Thread2 0
Thread2 1
Thread2 2
Thread2 3
Thread2 4
Thread2 5
Thread2 6
Thread2 7
Thread2 8
Thread2 9
线程的方法可以不是静态方法。在下面的例子中使用非静态方法需要创建类的对象。

using System;
using System.Threading;
public class MyThread {
public void Thread1() {
for (int i = 0; i < 10; i++) {
Console.WriteLine("Thread1 {0}", i);
}
}
public void Thread2() {
for (int i = 0; i < 10; i++) {
Console.WriteLine("Thread2 {0}", i);
}
}
}


public class MyClass {
public static void Main() {
Console.WriteLine("Before start thread");
MyThread thr = new MyThread();
Thread tid1 = new Thread(new ThreadStart(thr.Thread1));
Thread tid2 = new Thread(new ThreadStart(thr.Thread2));
tid1.Start();
tid2.Start();
}
}

这个程序的输出和上一个的输出相同。
不需要为两个线程创建两个方法。可以使用一个方法为两个线程类创建两个线程

编译器错误 CS1959

错误消息“name”的类型为“type”。在常量声明中指定的类型必须为 sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string、枚举类型或引用类型。

常量声明中允许的类型局限于在此消息中描述的那些类型。

更正此错误

使用允许的类型声明常量。

示例

下面的代码将产生 CS1959,因为 null 不是类型。

 复制代码
// cs1959.cs
class Program
 {
  static void Test<T>() where T : class
  {
const T x = null; // CS1959
  }
 }
请参见参考常量(c# 编程指南)null(c# 参考)

编译器错误 CS0845

错误消息表达式目录树 lambda 不能在合并运算符左侧包含 null 文本。

由于 null 本身不具有类型,因此 null 合并运算符无法对其进行运算。

更正此错误

将 null 文本强制转换为对象。

示例

下面的代码将生成 CS0845:

 复制代码
// cs0845.cs
using System;
using System.Linq;
using System.Linq.Expressions;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Expression<Func<object>> e = () => null ?? null; // CS0845
// Try the following line instead.
// Expression<Func<object>> e = () => (object)null ?? null;
}
}
}

C# 术语

访问修饰符

用于限制对类型或类型成员的访问的关键字,如 private、protected、internal 或 public。有关更多信息,请参见访问修饰符。

可访问成员

一种可由给定类型访问的成员。一种类型的可访问成员不一定可由另一种类型访问。有关更多信息,请参见访问修饰符和友元程序集。

访问器

设置或检索与属性关联的私有数据成员的值的方法。读写属性具有 get 和 set 访问器。只读属性只有 get 访问器。有关更多信息,请参见属性。

匿名方法

匿名方法是作为参数传递给委托的代码块。有关更多信息,请参见匿名方法。

基类

一种由其他“派生”类继承的类。有关更多信息,请参见继承。

调用堆栈

运行时从程序的开始位置到当前正在执行的语句的一系列方法调用。

一种描述对象的数据类型。类不仅包含数据,还包含作用于数据的方法。有关更多信息,请参见类。

构造函数

类或结构中用于初始化该类型的对象的一种特殊方法。有关更多信息,请参见构造函数。

委托

委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。有关更多信息,请参见委托。

派生类

一种使用继承获取、扩展或修改其他“基”类的行为和数据的类。有关更多信息,请参见继承。

析构函数

类或结构中用于准备要由系统销毁的实例的一种特殊方法。有关更多信息,请参见析构函数。

事件

类或结构的一个成员,用于发送更改通知。有关更多信息,请参见事件。

字段

类或结构的一个可直接访问的数据成员。

泛型

使用泛型,可以定义使用类型参数定义的类和/或方法。当客户端代码实例化类型时,会指定一个特定的类型作为参数。有关更多信息,请参见泛型。

IDE

集成开发环境。为各种开发工具(包括编译器、调试器、代码编辑器和设计器)提供统一用户界面的应用程序。

不可变类型

一种类型,其实例数据(字段和属性)在创建后不会更改。大多数值类型都属于不可变类型。

不可访问的成员

无法由给定类型访问的成员。一种类型的不可访问的成员并不一定对另一种类型是不可访问的。有关更多信息,请参见访问修饰符。

继承

c# 支持继承,因此从其他类(也称为基类)派生的类将继承相同的方法和属性。继承涉及基类和派生类。有关更多信息,请参见继承。

接口

一种只包含公共方法、事件和委托的签名的类型。继承接口的对象必须实现该接口中定义的所有方法和事件。类或结构可以继承任意数目的接口。有关更多信息,请参见接口。

迭代器

迭代器是这样一种方法,它允许包含集合或数组的类的使用者使用 foreach,in(c# 参考) 循环访问该集合或数组。

成员

在类或结构上声明的字段、属性、方法或事件。

方法

一个提供类或结构的行为的命名代码块。

可变类型

一种类型,其实例数据(字段和属性)在创建后可以更改。大多数引用类型都属于可变类型。

嵌套类型

在另一个类型的声明内声明的类型。

对象

类的实例。对象存在于内存中,具有数据和作用于这些数据的方法。有关更多信息,请参见对象、类和结构。

属性

通过访问器访问的数据成员。有关更多信息,请参见属性。

重构

重用以前输入的代码。例如,Visual C# 速成版代码编辑器可以智能地重新设置代码的格式,将突出显示的代码块转变成方法。有关更多信息,请参见重构。

引用类型

一种数据类型。声明为引用类型的变量指向存储数据的位置。有关更多信息,请参见引用类型。

静态

声明为静态的类或方法不必首先使用关键字 new 进行实例化就可存在。Main() 就属于静态方法。有关更多信息,请参见静态类和静态类成员。

结构

一种复合数据类型,通常用于包含具有某种逻辑关系的多个变量。结构还可以包含方法和事件。结构不支持继承,但支持接口。结构是值类型,而类是引用类型。有关更多信息,请参见结构。

值类型

值类型是在堆栈上分配的数据类型,与在堆上分配的引用类型不同。内置类型(包括数值类型以及结构类型和可以为 null 的类型)都属于值类型。类类型和字符串类型属于引用类型。有关更多信息,请参见 值类型(C# 参考)。

请参见概念C# 编程指南其他资源C# 参考

C# 语言规范

c# 语言规范是 c# 语法的权威资料来源。它包含有关该语言各个方面的详细信息,以及 Visual C# 产品文档未涉及的许多要点。C# 3.0 规范已经更新,并且与早期版本合并为单个文档。

可以从下列位置获得 Microsoft Word 格式的 C# 语言规范:

“Visual C# Developer Center”(Visual C# 开发人员中心) 上的 MSDN online。

在 Visual Studio 中,位于 Visual Studio 2008 安装目录下的 vc#\Specifications\1033\ 目录中。

如果您的计算机没有安装 Microsoft Word,则可以使用免费的 Word Viewer 2003 来查看、复制和打印该规范的 Word 版本。

请参见概念C# 编程指南其他资源C# 参考