C#编程利器之一:类(Class)
在我以前的一篇文章里曾经提到:“面向对象编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。----选自《大话设计模式》” 。
可见,在OOP中,类是何等的重要,本文将以类作为谈论点,全方面的分析和介绍类的各种相关知识点。
一. 日常生活中的对象
一切从现实出发,才能使编写出的代码更能反映出真实的生活。如电脑这个对象,则包括有主板,硬盘,显卡,内存等组成元素。然而实际的编程中并不是这么的简单,但是我们还是得从现实中去分析。以这种方式去考虑程序的设计,就会得到很多的好处:程序更容易设计,程序的体系结构更直观,更容易理解,更清晰的反映了程序从真实生活中抽象出来的含义,更便于多个开发人员一起工作,因为他们可以在代码中处理不同的对象,只需要知道其他人的对象做什么工作,无需担心其他人的代码的工作细节。
二. 编程中的对象我们平时在编程中用到过些什么对象呢?我想无外乎是两大类:系统对象和用户自定义对象。OK, 为了更清楚的说明这点,我们从“Hello World”开始吧。看看如下代码定义:
Console.WriteLine("Hello Wrold");
1/**//// <summary>
2/// 电脑类
3/// </summary>
4public class Computer
5{
6 private string name;
7 public string Name
8 {
9 get { return name; }
10 set { name = value; }
11 }
12
13 public string 主板 = "精英主板";
14 public string 硬盘 = "希捷硬盘";
15 public string 内存 = "金士顿";
16 public string 显卡 = "七彩红";
17 //其他组成元素
18
19 public Computer()
20 { }
21
22 public Computer(string name)
23 {
24 this.Name = name;
25 }
26}
上面这段代码说明什么呢?我们定义了一个Computer类,类里定义了几个成员,还有构造
1class Program
2{
3 static void Main(string[] args)
4 {
5 Computer zhangsan = new Computer("张三");
6 Computer lisi = new Computer("李四");
7
8 Console.WriteLine(zhangsan.主板 == lisi.主板);
9 }
10}
通过运行上面程序段,结果为:true.这说明什么,说明张三的主板和李四的主板是同一个吗?不是,我们应该说张三和李四都是使用的同一个类的对象.这里Computer类到底做了什么呢?封装属性和行为吗?最容易的理解便是把这个类看作是一种新的数据类型.也就是说Computer是一种数据类型,而zhangsan和lisi则是这种新数据类型的变量,用OOP的话来说的话,zhangsan和lisi则是Computer这个对象的实例或是对象.
三、类的相关特性
类的特性有很多,这里我就简单的介绍下最常用的几个特性。
1. 类名
类名是唯一一个用于区分其他类的特性,如同人的名字一样。当然在同一个项目 或是程序集或是框架中,会出现同名的类,就如同世界之大,名字相同的人到处都有一样。而现实生活中的同名人可以根据他所在的国家、省份、区县、乡村以及家庭来区分,对于同名的类呢则是通过命名空间来区分的。
如上电脑 类Computer,Computer就是电脑类的类名,用这个名字类区分其他类。
2. 属性
属性是一个类的重要组成部分,就以上面的电脑类(Computer)来说吧。name,主板,显卡等都是Computer类的属性。我们可以通过类对象(实例对象)去访问他们,示意性代码如下:
1class Computer
2{
3 public string Name = "张三";
4}
5class TestComputer
6{
7 void Method()
8 {
9 Computer computer = new Computer();
10 Console.WriteLine(computer.Name);
11 }
12}
在实际的开发中,我们通常将属性设置为private的,通过对外提供get;set;属性访问器供外部调用,关于这点这里就不作详细介绍。
3. 构造方法
1class Computer
2{
3 public Computer() { } //无参构造方法
4 public Computer(string name) //重载构造方法,带一个参数
5 {
6 this.Name = name;
7 }
8
9 private string name;
10 public string Name
11 {
12 get { return name; }
13 set { name = value; }
14 }
15}
16class TestComputer
17{
18 void Method()
19 {
20 Computer computer = new Computer(); //调用无参构造方法
21 computer.Name = "张三"; // 通过属性访问器设置属性的值
22 Console.WriteLine(computer.Name); //调用重载的带参数构造方法
23 computer = new Computer("张三"); //通过构造方法设置属性的值
24 Console.WriteLine(computer.Name);
25 }
26}
这点很容易理解,类的行为也就是类的方法,如上面类构造方法里的程序代码,在TestComputer类里就有一个方法Method,我们可以称为是TestComputer类的行为或是方法。
5. 类对象(实例)
1public void Method()
2{
3 //创建一Computer类型的对象computer
4 Computer computer = new Computer("张三");
5 string name = computer.Name; //通过对象computer去调用Computer类的属性Name
6}
6. 类继承
1class A
2{
3 public string Name { get; set; };
4}
5class B:A //类B继承于类A
6{
7
8}
1class A
2{
3 public string Name { get; set; };
4}
5interface Ia
6{
7 void MethodA();
8}
9class B:A,Ia //类B继承于类A,同时继承于Ia接口
10{
11 public void MethodA()
12 {
13 //
14 }
15}
1class A
2{
3 public string Name { get; set; };
4}
5interface Ia
6{
7 void MethodA();
8}
9interface Ib
10{
11 void MethodB();
12}
13class B:A,Ia,Ib //类B继承于类A,同时继承了Ia,Ib接口
14{
15 public void MethodA()
16 {
17 //
18 }
19
20 public void MethodB()
21 {
22 //..
23 }
24}
7. 类修饰
关于类修饰这里就不做详细介绍,只是简单的提出几个概念。详细请查阅相关资料了解更多。下面是几种常见的类修饰:
1public class ClassName { }
2public static class ClassName { }
3public sealed class ClassName { }
4public partial class ClassName { }
本文介绍了与类相关的常用知识点,当然类还有很多的知识点本文里没有提出,要更详细的了解类请查阅相关书籍和资料,篇幅限制,本文就介绍于此,希望本文对新手有所帮助。个人能力有限,文中难免会出错,还望大家勇言提出,谢谢。
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。