学习笔记 04----声明和类

【声明】

C# 的大多数声明都是从C和C++继承的。下面的表列出了可用的声明的类型:

声明 

例子 

声明列表和块声明

static void Main() {
    F();
    G();
    {
        H();
        I();
    }
}

标号声明和goto声明

static void Main(string[] args) {
    if (args.Length == 0)
        goto done:
    Console.WriteLine(args.Length);

done:
    Console.WriteLine("Done");
}

局部常量声明

static void Main() {
    const float pi = 3.14;
    const int r = 123;
    Console.WriteLine(pi * r * r);
}

局部变量声明

static void Main() {
    int a;
    int b = 2, c = 3;
    a = 1;
    Console.WriteLine(a + b + c);
}

表达式声明

static int F(int a, int b) {
    return a + b;
}

static void Main() {
    F(1, 2);  // Expression statement
}

If声明

static void Main(string[] args) {
    if (args.Length == 0)
        Console.WriteLine("No args");
    else
        Console.WriteLine("Args");
}

Switch声明

static void Main(string[] args) {
    switch (args.Length) {
        case 0:
            Console.WriteLine("No args");
            break;
        case 1:
            Console.WriteLine("One arg ");
            break;
        default:
            int n = args.Length;
            Console.WriteLine("{0} args", n);
            break;
    }
}

While声明

static void Main(string[] args) {
    int i = 0;
    while (i < args.length) {
        Console.WriteLine(args[i]);
        i++;
    }
}

do声明

static void Main() {
    string s;
    do { s = Console.ReadLine(); }
    while (s != "Exit");
}

for声明

static void Main(string[] args) {
    for (int i = 0; i < args.length; i++)
        Console.WriteLine(args[i]);
}

Foreach 声明

static void Main(string[] args) {
    foreach (string s in args)
        Console.WriteLine(s);
}

Break 声明

static void Main(string[] args) {
    int i = 0;
    while (true) {
        if (i > args.Length)
            break;
        Console.WriteLine(args[i++]);
    }
}

continue 声明

static void Main(string[] args) {
    int i = 0;
    while (true) {
       Console.WriteLine(args[i++]);
       if (i > args.Length)
            continue;
       break;
    }
}

return 声明

static int F(int a, int b) {
    return a + b;
}

static void Main() {
    Console.WriteLine(F(1, 2));
    return;
}

throw 声明 and try 声明

static int F(int a, int b) {
    if (b == 0)
        throw new Exception("Divide by zero");
    return a / b;
}

static void Main() {
    try {
        Console.WriteLine(F(5, 0));
    }
    catch(Exception e) {
        Console.WriteLine("Error");
    }
}

checked 和 unchecked 声明

static void Main() {
    int x = 100000, y = 100000;
    Console.WriteLine(unchecked(x * y));
    Console.WriteLine(checked(x * y));  // Error
    Console.WriteLine(x * y);           // Error
}

lock 声明

static void Main() {
    A a = ...
    lock(a) {
        a.P = a.P + 1;
    }
}

【类】

类声明定义新的引用类型。一个类可以从其它类继承,并且可以没用接口或有多个接口。

类的成员可以包括常数、域、方法、属性、索引、事件、操作符、构造函数、析构器和嵌套类型声明。每个成员有相关的访问能力,这控制了可以访问这个成员的程序文本的区域。有访问能力有五种可能形式:

形式 

直观意义 

public

访问不受限制

protected

访问只限于此程序或类中包含的类型

internal

访问只限于此程序

protected internal

访问只限于此程序或类中包含的类型

private

访问只限于所包含的类型

【域】

域是一个代表和某对像或类相关的变量的成员。

【方法】

方法是一个执行可以由对像或类完成的计算或行为的成员。方法有一个形式参数列表(可能为空),一个返回数值(或void),并且可以是静态也可以是非静态。静态方法要通过类来访问。非静态方法,也称为实例方法,通过类的实例来访问。

【属性】

属性是提供对对像或类的特性进行访问的成员。属性的例子包括字符串的长度,字体的大小,窗口的焦点,用户的名字,等等。属性是域的自然扩展。两者都是用相关类型成员命名,并且访问域和属性的语法是相同的。然而,与域不同,属性不指示存储位置。作为替代,属性有存取程序,它指定声明的执行来对他们的进行读或写。

属性是由属性声明定义的。属性声明的第一部分看起来和域声明相当相似。第二部分包括一个get存取程序和一个set存取程序。在下面的例子类Button定义了一个Caption属性。

public class Button
{
private string caption;

public string Caption {
     get {
        return caption;
     }

     set {
        caption = value;
        Repaint();
     }
}
}

像Caption属性一样的读写都可以的属性包括get和set存取程序。当属性的值要被读出的时候,会调用get存取程序;当要写属性值的时候,会调用set存取程序。 Properties 在set存取程序中,属性的新值赋给一个名为value的隐含参数。

【事件】

事件是使得对像和类提供通知的成员。一个类通过提供事件声明来定义一个事件,这看起来与域和事件声明相当类似,但是有一个event关键字。这个声明的类型必须是delegate类型。

public delegate void EventHandler(object sender, Event e);

public class Button
{
public event EventHandler Click;

public void Reset() {
     Click = null;
}
}

 

【操作符】

操作符是一个定义了可以用来使用在类的实例上的表达式操作符所代表的意义的对象。这里有三种可以定义的操作符:一元操作符,二元操作符和转换操作符。

【索引】

索引(indexer)是使得对象可以像数组一样被索引的成员。然而属性使类似域的访问变得可能,索引使得类似数组的访问变得可能。索引的声明类似于属性的声明,最大的不同在于索引是无名的,而且索引包含索引参数。

【实例构造函数】

实例构造函数是实现对类中实例进行初始化的行为的成员。

【析构函数】

析构函数是实现破坏一个类的实例的行为的成员。析构函数不能有参数,不能任何修饰符而且不能被调用。析构函数在碎片收集时会被自动调用。

【静态构造函数】

静态构造函数是实现对一个类进行初始化的行为的成员。静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用。

【继承】

类支持单继承,object类型是所有类的基类。

posted @ 2011-03-20 11:39  start from program  阅读(176)  评论(0编辑  收藏  举报