类(class)
在类与名称空间简单学习了类的概念。程序世界中的类是对现实世界的事物进行抽象的结果,类定义了事物的特点、行为,在一定程度上反映现实事物的样子。但类又舍弃了一些不必要的内容(在程序中没有涉及),是现实事物的模型。建模是一个由表及里的过程,向外提供了易于使用的接口,但是隐藏封装了内部的逻辑。
类与对象
类实例化过后得到的内存中的实体称为对象或实例,对象和实例没有区别。实例化指的是根据类来创建对象。在程序中,通常使用 new 操作符创建类对象,为类对象分配内存空间。
using System; using System.Windows.Forms; namespace ClassAndInstance { class Program { static void Main(string[] args) { //根据 Form 类创建类对象 fm //Form() 后的 () 表示实例在内存中创建后,使用相关的构造函数初始化类对象 Form fm = new Form(); fm.ShowDialog(); } } }
引用变量和类对象
在下面的代码中,第5、6行的代码分别在内存中创建了两个 Form() 类对象,但是都没有相应的变量指向它们。就像气球一样,没有绳子牵着。内存垃圾收集器很快就会收回分配给它们的内存。如果要连续的操作同一个类对象,需要使用引用变量。如第8行代码所示,将 new 出来的Form() 对象赋值给引用变量 fm。引用变量 fm 只是指向相应的内存空间,提供了一个访问 Form 对象的途径。也可以使用其他的引用变量指向 fm 指向的内存空间,就像气球可以有很多绳子,可以通过任意一根绳子牵住气球,但是这些绳子牵的都是同一个气球。
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 (new Form()).Text = "Title"; 6 (new Form()).ShowDialog(); 7 8 Form fm = new Form(); 9 fm.Text = "Title"; 10 fm.ShowDialog(); 11 } 12 }
类的三大成员
属性,用来存储数据,通过各种属性组合起来表示类或对象当前的状态。
方法,由C语言中的函数进化而来,用来表示类或对象能做什么,属于逻辑成员,通过方法来对数据进行各种操作。
事件,类或对象通知其他类或对象的机制,为C#持有(Java通过其他机制实现)。
某些特殊的类或对象在成员方面侧重点不同:
- 模型类或对象类重在属性,Entity Framwork
- 工具类或对象重在方法,如Math、Console
- 通知类或对象重在事件,如各种Timer
静态成员与实例成员
静态成员语义上表示成员隶属于某个类,不能隶属于某个对象。所有非静态的成员称为实例成员,表示成员属于某个对象,而不是某个类。例如人属于人类,人的身高是实例成员,而不是静态成员。人类的总数是静态成员,而不是实例成员。
static void Main(string[] args) { //WriteLine()方法属于Console类的静态成员,因为此前并 //没有实例化Console类。 Console.WriteLine("Hello"); //form对象的Text,ShowDialog()属于实例方法和实例属性 Form form = new Form(); form.Text = "Hello"; form.ShowDialog(); }