c#中的关键组织概念是programs、namespaces、types、members和assemblies。
程序中声明带有members和能被划分到对应namespace的types:
Classes\Structs\Interfaces都是types的例子;
Fields\Methods\Properties\Events是members的例子;
当C#的程序被编译以后,他们被打包到assemblies。 程序集的文件扩展名通常为.exe或.dll,具体取决于它们分别实现的是application还是library。
一个简单的C#程序:
Stack类:
using System; namespace Acme.Collections { public class Stack<T> { Entry _top; public void Push(T data) { Console.WriteLine("push data {0}", data); _top = new Entry(_top, data); } public T Pop() { if (_top == null) { throw new InvalidOperationException(); } T result = _top.Data; _top = _top.Next; Console.WriteLine("pop data {0}", result); return result; } class Entry { private Entry next; private T data; public Entry Next { get { return next; } set { this.next = value; } } public T Data { get { return data; } set { this.data = value; } } public Entry(Entry next, T data) { Next = next; Data = data; } } } }
该类的完全限定名是
Acme.Collections.Stack。
类包含了几个成员,一个是_top的Field(属性),两个methods(方法),分别是Push和Pop,还有一个嵌套内部类Entry。进一步的,这个内部类包含了三个成员:Next\Data fields和一个构造器。
这个Stack类是一个通用的类,它包含了一个类型参数T,在使用过程中会被替换成具体的类型。
对于Stack(栈)的理解,参考 栈的介绍 什么是栈?_有心栽花无心插柳的博客-CSDN博客
此处提供的例子定义了栈的存储和行为,我们可以创建Stack的实例对他进行使用。
Example.cs
这个cs文件提供了上述stack类的使用的一个简单例子:
using System; using Acme.Collections; class Example { public static void Main() { Stack<int> s = new Stack<int>(); s.Push(1); // stack contains 1 s.Push(10); // stack contains 1, 10 s.Push(100); // stack contains 1, 10, 100 Console.WriteLine(s.ToString()); Console.WriteLine(s.Pop()); // stack contains 1, 10 Console.WriteLine(s.Pop()); // stack contains 1 Console.WriteLine(s.Pop()); // stack is empty } }
该cs文件使用了上述定义的Stack类。
要运行上述程序,把他们分别copy到两个cs文件中(比如我把上述文件分别放在了CSharpStructureDemo.cs 和 Example.cs中),切换到文件中所在目录,然后用csc命令执行(关于如何配置csc, 请参考:C#开发环境准备_c#开发环境安装_非正规程序员的博客-CSDN博客):
方案1:
(1)执行csc .\CSharpStructureDemo.cs .\Example.cs 然后会生成Example.exe
(2)运行./Example
方案2:
(1)执行csc /target:library .\CSharpStructureDemo.cs 然后生成CSharpStructureDemo.dll
(2) csc /r:CSharpStructureDemo.dll .\Example.cs 然后会生成Example.exe
(3)运行./Example