------- 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培訓、期待與您交流! -------