------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
C#作为C++、java等面向对象高级语言的集大成者,我们这些初学者自然对于其中的类和对象等概念应有一个大致的了解。就着教学视频,与自己的学习笔记,将这些资料整理成文。
一、面向对象简介
对象(object),从概念层面讲,就是某种事物的抽象(功能)。抽象原则包括数据抽象和过程抽象两个方面:数据抽象就是定义对象的属性;过程抽象就是定义对象的操作对象封装了数据和代码(数据和程序)。
封装,也就是把客观事物抽象并封装成对象,即将数据成员、属性、方法和事件等集合在一个整体内。通过访问控制,还可以隐藏内部成员,只允许可信的对象访问或操作自己的部分数据或方法。
继承是允许使用现有类的功能,并在无需重新改写原来的类的情况下,对这些功能进行扩展。继承可以避免代码复制和相关的代码维护等问题。继承的过程,就是从一般到特殊的过程。被继承的类称为“基类(base class)”、“父类”或“超类(super class)”,通过继承创建的新类称为“子类(subclass)”或“派生类(derived class)”C#语言一个子类只能有一个基类(单一继承),但允许实现多个接口。
多态性(polymorphism)是指同样的消息被不同类型的对象接收时导致完全不同的行为。多态性允许每个对象以自己的方式去响应共同的消息,从而允许用户以更明确的方式建立通用软件,提高软件开发的可维护性。例如,假设设计了一个绘图软件,所有的图形(Square、Circle等)都继承于基类Shape,每种图形有自己特定的绘制方法(draw)的实现。如果要显示画面的所有图形,则可以创建一个基类Shape的集合,其元素分别指向各子类对象,然后循环调用父类类型对象的绘制方法(draw),实际绘制根据当前赋值给它的子对象调用各自的绘制方法(draw),这就是多态性。如果要扩展软件的功能,例如增加图形Eclipse,则只需要增加新的子类,并实现其绘制方法(draw)即可。
二、类和对象
1.类和对象
类(class)是C#语言的核心,C#的一切类型都是类,所有的语句都必须位于类内。类是一个数据结构,类定义数据类型的数据(字段)和行为(方法和其他函数成员)。对象是基于类的具体实体,有时称为类的实例(instance)。类与对象的关系类似于车型设计和具体的车。
2.访问修饰符
访问修饰符用来控制所修饰成员的可访问域,以使类或者类的成员在不同的范围内具有不同的可见性,从而实现数据和代码的隐藏。C#中使用如下访问修饰符:public(公共)、private(私有)、internal(内部)、protected(受保护)。
访问修饰符 | 意义 |
public | 访问不受限制 |
protected | 访问仅限于此类或从此类派生的类 |
internal | 访问仅限于此程序(类所在的程序内,即同一个编译单元:dll或exe中) |
protected internal | protected或者internal,即访问仅限于此程序或从此类派生的类 |
private | 访问仅限于此类 |
下面给出一段代码进行演示
class Person
{
public const int RETIREMENT_AGE = 65; // 访问不受限制
public string name; // 访问不受限制
internal string nickName; // 在自定义Person类的程序内可访问
protected bool isMarried; // 在Person类或者其派生类中可访问
private int age; // 只在Person类内可访问
string creditCardNum; // 使用默认访问修饰符private,只在Person类内可访问
public void Speak() // 访问不受限制
{
System.Console.WriteLine("Hello!");
}
private void Method1() // 只在Person类内可访问
{
//…
// 类Person内的方法对本类所有成员都可访问,具体地:
// (1)RETIREMENT_AGE可访问
// (2)name可访问
// (3)nickName可访问
// (4)isMarried可访问
// (5)age可访问
// (6)creditCardNum可访问
// (7)Speak()可访问
}
}
class Student : Person
{
private void Method2()
{
//…
// 位于同一个程序的派生类Student内的方法,对于Person成员的访问权限如下:
// public、protected和internal成员都可访问;private成员不可访问,具体地:
// (1)RETIREMENT_AGE可访问(public)
// (2)name可访问(public)
// (3)nickName可访问(internal)
// (4)isMarried可访问(protected)
// (5)age不可访问(private)
// (6)creditCardNum不可访问(private)
// (7)Speak()可访问(public)
// (8)Method1()不可访问(private)
}
}
class Dog
{
private void Method3()
{
//…
// 程序内的非派生类内的方法,对于Person成员的访问权限如下:
// public和internal成员都可访问;protected和private成员不可访问,具体地:
// (1)RETIREMENT_AGE可访问(public)
// (2)name可访问(public)
// (3)nickName可访问(internal)
// (4)isMarried不可访问(protected)
// (5)age不可访问(private)
// (6)creditCardNum不可访问(private)
// (7)Speak()可访问(public)
// (8)Method1()不可访问(private)
}
}
三、嵌套类
类内声明的类称为内部类(internal class)或者嵌套类(nested class)。在编译单元或命名空间内声明的类称为顶级类,也称包含类或者非嵌套类型(non-nested class)。下面给出嵌套类示例。
<span style="font-size:18px;">using System;
namespace CSharpPractice.Class
{
class Container
{
public class Nested
{
public void SayHello()
{
Console.WriteLine("Hello, I am a nested class!");
}
}
}
class nestTest
{
static void Main(string[] args)
{
Container.Nested nest = new Container.Nested();
nest.SayHello();
Console.ReadLine();
}
}
}</span>
四、分部类
分部类型(partial type)可以将类(以及结构和接口)划分为多个部分,存储在不同的源文件中,以便于开发和维护。
分部类主要用于2种场合:当类的源码十分庞大或需要不同程序员同时进行维护时,使用分部类可以灵活地满足这种要求;使用继承开发工具源代码生成器时,将计算机生成的类型部分和用户编写的类型部分互相分开,以便更容易地扩充工具生成的代码。使用类修饰符partial,用来实现通过多个部分来定义一个类。下面给出分为两部分来实现的分部类示例。
public class PartialTest1
{
protected string name;
private int x;
public void f1()
{
}
public void f2()
{
}
class Inner
{
int y;
int z;
}
}
public partial class PartialTest1
{
protected string name;
public f1()
{
}
partial class Inner
{
int y;
}
}
public partial class PartialTest1
{
private int x;
public void f2()
{
}
partial class Inner
{
int z;
}
}
partial class PartialTest2
{
int x; // 错误,x被重复声明
partial class Inner // 正确,Inner类是分部类
{
int y;
}
}
partial class PartialTest2
{
int x; // 错误,x被重复声明
partial class Inner // 正确,Inner类是分部类
{
int z;
}
}
好了,关于C#类和对象的笔记就写到这里,理解面向对象的思想并非一日之功,仍需我们这些初学者继续去探究其更深层次的原理。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------