C#编程利器之一:类(Class)

面向对象的程序设计(Object-Oriented Programming,简记为OOP)是一种功能非常强大的编程方法,立意于创建软件重用代码,以类为基础去思考编程问题。类是OOP中的核心组成元素,通常都是使用类来“封装”对象(属性、行为)。在经典图书《代码大全》里定义:“创建高质量的类,第一步,可能也是最重要的一步,就是创建一个好的接口。这也包括了创建一个可以通过接口来展现的合理的抽象,并确保细节仍被隐藏在抽象背后。”,其实接口也是一个类,一个更为抽象的类.

在我以前的一篇文章里曾经提到:“面向对象编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。----选自《大话设计模式》” 。

可见,在OOP中,类是何等的重要,本文将以类作为谈论点,全方面的分析和介绍类的各种相关知识点。

一. 日常生活中的对象

在大多数人眼里,对象是一个抽象的名词,而类呢则更为抽象。日常生活中,可以把对象理解为可辩识的一种实体。如汽车、轮船、飞机、电脑等。如果把对象和程序联系起来,则可看作是在程序中表示的一个实体。

一切从现实出发,才能使编写出的代码更能反映出真实的生活。如电脑这个对象,则包括有主板,硬盘,显卡,内存等组成元素。然而实际的编程中并不是这么的简单,但是我们还是得从现实中去分析。以这种方式去考虑程序的设计,就会得到很多的好处:程序更容易设计,程序的体系结构更直观,更容易理解,更清晰的反映了程序从真实生活中抽象出来的含义,更便于多个开发人员一起工作,因为他们可以在代码中处理不同的对象,只需要知道其他人的对象做什么工作,无需担心其他人的代码的工作细节。

 

二. 编程中的对象

我们平时在编程中用到过些什么对象呢?我想无外乎是两大类:系统对象和用户自定义对象。OK, 为了更清楚的说明这点,我们从“Hello World”开始吧。看看如下代码定义:

Console.WriteLine("Hello Wrold");

上面这句代码对于正在看本文的你来说,我想应该是在熟悉不过了.他的功能就是将“Hello World”这个字符串在控制台输出.然而,出此之外,这句代码还隐含着其他的相关知识.那么具体是什么呢?其实我们在编写这句代码的时候已经使用对象了.Console就是一个对象,.NET Framework提供的一个系统对象,我们之所以能够通过WriteLine方法实现输出,是因为我们调用了这个系统对象的方法. 这里Console就是一个典型的系统对象.

下面我们来看看什么的自定义对象,首先我们来分析一下现实生活中的对象.以电脑来说,一台电脑大概由主板,硬盘,显卡,内存等众多元素组成.通过抽象,我们就可以认为电脑就是一个对象,主板,显卡这些组成元素则是电脑这个对象的属性.下面是电脑类的定义:

}

上面这段代码说明什么呢?我们定义了一个Computer类,类里定义了几个成员,还有构造方法等.为了更清晰的说明这样做的目的,我们可以先来做个测试.建立两个对象,然后判断他门的属性是不是同一个.代码如下:

}

通过运行上面程序段,结果为:true.这说明什么,说明张三的主板和李四的主板是同一个吗?不是,我们应该说张三和李四都是使用的同一个类的对象.这里Computer类到底做了什么呢?封装属性和行为吗?最容易的理解便是把这个类看作是一种新的数据类型.也就是说Computer是一种数据类型,而zhangsan和lisi则是这种新数据类型的变量,用OOP的话来说的话,zhangsan和lisi则是Computer这个对象的实例或是对象.

三、类的相关特性

类的特性有很多,这里我就简单的介绍下最常用的几个特性。

1. 类名

类名是唯一一个用于区分其他类的特性,如同人的名字一样。当然在同一个项目或是程序集或是框架中,会出现同名的类,就如同世界之大,名字相同的人到处都有一样。而现实生活中的同名人可以根据他所在的国家、省份、区县、乡村以及家庭来区分,对于同名的类呢则是通过命名空间来区分的。

如上电脑类Computer,Computer就是电脑类的类名,用这个名字类区分其他类。

2. 属性

属性是一个类的重要组成部分,就以上面的电脑类(Computer)来说吧。name,主板,显卡等都是Computer类的属性。我们可以通过类对象(实例对象)去访问他们,示意性代码如下:

}

在实际的开发中,我们通常将属性设置为private的,通过对外提供get;set;属性访问器供外部调用,关于这点这里就不作详细介绍。

3. 构造方法

构造方法是用得最多的一个特性,与普通的方法相比不同的是构造方法无返回值修饰符,每当你要创建一个对象实际上就是在调用给对象的构造方法。实际开发中,我们可以多次重载构造方法,以及通过构造方法来初始化属性的值。示意性代码如下:

}

4. 行为(方法)

这点很容易理解,类的行为也就是类的方法,如上面类构造方法里的程序代码,在TestComputer类里就有一个方法Method,我们可以称为是TestComputer类的行为或是方法。

5. 类对象(实例)

这里也很容易理解,在之前我们已经使用了多次类的对象了。如TestComputer类的Method方法里,就创建了Computer类型的类对象computer,通过此对象,我们可以很方便的访问Computer类里公开的属性和方法,示意代码如下:

}

6. 类继承

由于C#是单继承语言,因此在类的继承上只支持单一继承,也就是说一个类只能有一个父类,但是可以继承多个接口。

}
}
}

7. 类修饰

关于类修饰这里就不做详细介绍,只是简单的提出几个概念。详细请查阅相关资料了解更多。下面是几种常见的类修饰:

public partial class ClassName { }

注: 文章转载自: http://beniao.cnblogs.com/http://www.cnblogs.com/   作者 : Beniao

C#编程利器之一:类(Class)【转】的更多相关文章

  1. C#编程利器之三:接口(Interface)【转】

    C#编程利器之三:接口(Interface) C#接口是一个让很多初学者容易迷糊的东西,用起来好象很简单,定义接口,然后在里面定义方法,通过继承与他的子类来完成具体的实现.但没有真正认识接口的作用的时 ...

  2. 第24 章 : Kubernetes API 编程利器:Operator 和 Operator Framework

    Kubernetes API 编程利器:Operator 和 Operator Framework 本节课程主要分享以下三方面的内容: operator 概述 operator framework 实 ...

  3. Java并发编程:Thread类的使用

    Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知 ...

  4. [.net 面向对象编程基础] (9) 类和类的实例

    [.net 面向对象编程基础] (9) 类和类的实例 类 ,顾名思义就是分类.类别的意思.我们要面向对象编程,就需要对不同的事物进行分类.类可以说是.net面向对象的核心. 类:就是具有相同的属性和功 ...

  5. [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)

    [.net 面向对象编程基础] (10) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态 ...

  6. 【转】Java并发编程:Thread类的使用

    一.线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于对Thread类中的方法的理解. 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以 ...

  7. “编程利器”:VSCode

    原先一直使用sublime text3,并且认为它是很好的编程利器. 但最近写代码时,发现很多代码还是提示的不够完整.我们知道,当代码名字很长时,还没有提醒,这是非常苦恼的一件事!同时它的调试功能也不 ...

  8. 3、Java并发编程:Thread类的使用

    Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知 ...

  9. 程序员编程利器:20款最好的免费的IDEs和编辑器

    程序员编程利器:20款最好的免费的IDEs和编辑器 还没转眼明年可就大年三十了,忙的可真是晕头转了个向,看着亲朋好友们那让人欣羡的小肚腩,不禁感慨,岁月是一把猪饲料,绿了芭蕉,肥了那杨柳小蛮腰,可怜我 ...

随机推荐

  1. HDU5816 Hearthstone(状压DP)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5816 Description Hearthstone is an online collec ...

  2. POJ2976 Dropping tests(01分数规划)

    题目大概说给n个二元组Ai和Bi,要去掉k个,求余下的100*∑Ai/∑Bi的最大值. 假设要的最大的值是ans,令Di=Ai-ans*∑Bi,对Di排序取最大的n-k个,如果∑Ai-ans*∑Bi& ...

  3. WPF:在ControlTemplate中使用TemplateBinding

    A bit on TemplateBinding and how to use it inside a ControlTemplate. Introductio Today I'll try to w ...

  4. 424 - Integer Inquiry

     Integer Inquiry  One of the first users of BIT's new supercomputer was Chip Diller. He extended his ...

  5. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 A. Anagrams

    A. Anagrams time limit per test 1 second memory limit per test 512 megabytes input standard input ou ...

  6. 【原】iOS学习44之动画

    1. 简单动画 1> UIImageView GIF 动画 GIF图的原理是:获取图片,存储在图片数组中,按照图片数组的顺序将图片以一定的速度播放 UIImageView *showGifima ...

  7. unity gizmo绘制圆形帮助调试

    using UnityEngine; using System.Collections; using System; public class LearnGrazio : MonoBehaviour ...

  8. 建立php开发环境(XAMPP + Xdebug+Zend Studio)

    1. 安装XAMPP和Zend Studio Zend Studio下载地址: http://pan.baidu.com/s/1o6BjvAE XAMPP 下载地址: http://pan.baidu ...

  9. webpack: require.ensure与require AMD的区别

    http://blog.csdn.net/zhbhun/article/details/46826129

  10. [Leetcode] Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...