C#程序结构分析实例

首先,我们来输入一段C#程序

using System;
namespace Acme.Collections
{
    public class Stack
    {
        Entry top;
        public void Push(object data) {
            top = new Entry(top, data);
        }
        public object Pop() {
            if (top == null) throw new InvalidOperationException();
            object result = top.data;
            top = top.next;
            return result;
        }
        class Entry
        {
            public Entry next;
            public object data;
            public Entry(Entry next, object data) {
                this.next = next;
                this.data = data;
            }
        }
     }
}

在名为Acme.Collections 的命名空间中声明了一个名为Stack 的类。Acme.Collections.Stack 是此类的完全限定名。该类包含几个成员:一个名为top 的字段,两个分别名为Push 和Pop 的方法和一个名为Entry 的嵌套类。Entry 类还包含三个成员:一个名为next 的字段、一个名为data 的字段和一个构造函数。假定将此示例的源代码存储在文件acme.cs 中,执行以下命令行:csc /t:library acme.cs,将此示例编译为一个库(没有Main 入口点的代码),并产生一个名为acme.dll 的程序集。程序集包含中间语言(Intermediate Language, IL) 指令形式的可执行代码和元数据(metadata) 形式的符号信息。在执行程序集之前,.NET 公共语言运行时的实时(JIT) 编译器将程序集中的IL 代码自动转换为特定于处理器的代码。由于程序集是一个自描述的功能单元,它既包含代码又包含元数据,因此,C# 中不需要#include 指令和头文件。若要在C# 程序中使用某特定程序集中包含的公共类型和成员,只需在编译程序时引用该程序集即可。例如,下面的程序将使用来自acme.dll 程序集的Acme.Collections.Stack 类:

using System;
using Acme.Collections;
class Test
{
    static void Main() {
        Stack s = new Stack();
        s.Push(1);
        s.Push(10);
        s.Push(100);
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
    }
}

如果此程序存储在文件test.cs 中,那么在编译test.cs 时,可以使用编译器的/r 选项引用acme.dll 程序集:
csc /r:acme.dll test.cs
这样将创建名为test.exe 的可执行程序集,运行结果如下:
100
10
1

C# 允许将一个程序的源文本存储在多个源文件中。在编译多个文件组成的C# 程序时,所有源文件将一起处理,并且源文件可以自由地相互引用— 从概念上讲,就像是在处理之前将所有源文件合并为一个大文件。C# 中从不需要前向声明,因为除了极少数的例外情况,声明顺序无关紧要。C# 不限制一个源文件只能声明一个公共类型,也不要求源文件的名称与该源文件中声明的类型匹配。

通过上述分析,对你查阅MSDN的文档将有一定的帮助,不会再因为那些什么恼人的类啊,方法啊发愁了。

猜你喜欢

转载自blog.csdn.net/thebestleo/article/details/52507204