到目前为止,我们介绍了组成C#语言的主要模块,包括变量、数据类型和程序流语句 ,并简要介绍了一个只包含Main()方法的完整小例子。但还没有介绍如何把这些内容组合在一起,构成一个完整的程序,其关键就在于对类的处理。
(一) 类与结构
类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。类定义了类的每个对象(称为实例)可以包含什么数据和功能。例如,如果一个类表示一个顾客,就可以定义字段CustomerID、 FirstName、LastName和Address, 以包含该顾客的信息。还可以定义处理在这些字段中存储的数据的功能。接着,就可以实例化表示某个顾客的类的对象,为这个实例设置相关字段的值,并使用其功能。
结构与类的区别是它们在内存中的存储方式、访问方式(类是存储在堆(heap)上的引用类型,而结构是存储在栈(stack)上的值类型)和它们的一些特征(如:结构不支持继承)。较小的数据类型使用结构可提高性能。在语法上,结构与类非常相似,主要的区别是使用关键字struct代替class来声明。
对于类和结构,都使用关键字new来声明实例,这个关键字创建对象并对其进行初始化:
在大多数情况下,类要比结构常用得多。因此,我们主要讨论类。
(二)类的数据成员与函数成员
数据成员是包含类的数据——字段、常量和事件的成员。数据成员可以是静态数据。类成员总是实例成员,除非用static进行显式的声明。字段是与类相关的变量。 一旦实例化对象,就可以使用语法Object.FieldName来访问这些字段,例如:
函数成员提供了操作类中数据的某些功能,包括方法、属性、构造函数和终结器(finalizer)、运算符以及索引器。
(1)方法
方法是与某个类相关的函数,与数据成员一样,函数成员默认为实例成员,使用static修饰符可以把方法定义为静态方法。声明方法代码如下:
(2)属性
属性(property)的概念是: 它是一个方法或一对方法,在客户端代码看来,它(们)是一个字段。
在 C# 中定义属性,可以使用下面的语法:
例如:
在属性定义中省略set访问器,就可以创建只读属性。同理,省略get访问器可创建只写属性。
(3)构造函数
声明基本构造函数的语法就是声明一个与包含的类同名的方法 ,但该方法没有返回类型:
一般情况下,如果没有提供任何构造函数,编译器会在后台创建一个默认的构造函数。这是一个非常基本的构造函数,它只能把所有的成员字段初始化为标准的默认值,这通常就足够了,否则就需要编写自己的构造函数。
但注意 ,如 果提供了带参数的构造函数,编译器就不会自动提供默认的构造函数。
一般使用this关键字区分成员字段和同名的参数。
注意,可以把构造函数定义为private 或 protected,这样不相关的类也不能访问它们。
而编写静态构造函数的一个原因是,类有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性。
(4)匿名类型
前面讨论了var关键字,它用于表示隐式类型化的变量。var与new关键字一起使用时,可以创建匿名类型。匿名类型只是一个继承自Object且没有名称的类。该类的定义从初始化器中推断,类似于隐式类型化的变量。例如:
好,关于C#的类和对象就先介绍,相关内容还有很多,就当是抛砖引玉了,只有在实际的运用中才能够学到更多。下一篇博客将重点介绍面向对象的编程方法,即C#中的封装,继承与多态。