歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C#中的繼承封裝和多態

C#中的繼承封裝和多態

日期:2017/3/1 10:00:45   编辑:Linux編程

一、 封裝:

封裝是實現面向對象程序設計的第一步,封裝就是將數據或函數等集合在一個個的單元中(我們稱之為類)。被封裝的對象通常被稱為抽象數據類型。

面向對象程序設計中一般以類作為數據封裝的基本單位。類將數據和操作數據的方法結合成一個單位。在設計類時,不希望直接存取類中的數據,而是希望通過方法來存取數據。如此就可以達到封裝數據的目的,方便以後維護、升級,也可以在操作數據時多一層判斷,提高安全性。

在C#中可使用類來達到數據封裝的效果,這樣就可以使數據與方法封裝成單一元素,以便於通過方法存取數據。除此之外,還可以控制數據的存取方式。封裝在C#中可使用類來達到數據封裝的效果,這樣就可以使數據與方法封裝成單一元素,以便於通過方法存取數據。除此之外,還可以控制數據的存取方式。

封裝的意義:

  封裝的意義在於保護或者防止代碼(數據)被我們無意中破壞。在面向對象程序設計中數據被看作是一個中心的元素並且和使用它的函數結合的很密切,從而保護它不被其它的函數意外的修改。

封裝還可以解決數據存取權限問題,使用封裝可以將數據隱藏起來,形成一個封閉的空間,用戶可以設置哪些數據只能在這個空間中使用,哪些數據可以在空間外部使用。如果一個類中包含敏感數據,則有些用戶可以訪問,有些用戶卻不能訪問。如果不對這些數據的訪問加以限制,那麼後果是很嚴重的。所以,在編寫程序時,要對類的成員使用不同的訪問修飾符,從而定義它們的訪問級別。

  封裝提供了一個有效的途徑來保護數據不被意外的破壞。相比我們將數據(用域來實現)在程序中定義為公用的(public)我們將它們(fields)定義為私有的(privat)在很多方面會更好。私有的數據可以用兩種方式來間接的控制。第一種方法,我們使用傳統的存、取方法。第二種方法我們用屬性(property)。

  使用屬性不僅可以控制存取數據的合法性,同時也提供了“讀寫”、“只讀”、“只寫”靈活的操作方法。

訪問修飾符:

Private:只有類本身能存取.

Protected:類和派生類可以存取.

Internal:只有同一個項目中的類可以存取.

Protected Internal:是Protected和Internal的結合.

Public:完全存取.

二、 繼承:

繼承是OOP最重要的特性之一。任何類都可以從另外一個類繼承,即這個類擁有它所繼承類的所有成員。在OOP中,被繼承的類稱為父類或基類。C#提供了類的繼承機制,但C#只支持單繼承,不支持多重繼承,即在C# 中一次只允許繼承一個類,不能同時繼承多個類。

利用繼承機制,用戶可以通過增加、修改或替換類中方法對這個類進行擴充,以適應不同的應用要求。利用繼承,程序開發人員可以在已有類的基礎上構造新類。繼承使得類支持分類的概念。在日常生活中很多東西比較有條理,那是因為它們有著很好的層次分類。如果不用層次分類,則要對每個對象定義其所有的性質。使用繼承後,每個對象就可以只定義自己的特殊性質。每一層的對象只需定義本身的性質,其他性質可以從上一層繼承下來。

在C#中,接口允許多繼承,可以通過繼承多個接口來實現類似於C++中的多重繼承。在繼承一個基類時,成員的可訪問性是一個重要的問題。子類不能訪問基類的私有成員,但是可以訪問其公共成員。子類和外部代碼都可以訪問公共成員。這就是說,只使用這兩個可訪問性,就可以讓一個成員被基類和子類訪問,同時也可以被外部的代碼訪問。

為了解決這個問題,C# 還提供了第3種可訪問性:protected。只有派生類才能訪問protected成員,基類和外部代碼都不能訪問protected成員。

除了成員的保護級別外,用戶還可以為成員定義其繼承行為。基類的成員可以是虛擬的,成員可以由繼承它的類重寫。子類可以提供成員的其他執行代碼。這種執行代碼不會刪除原來的代碼,仍可以在類中訪問原來的代碼,但外部代碼不能訪問它們。如果沒有提供其他執行方式,外部代碼就訪問基類中成員的執行代碼。

虛擬成員不能是私有成員,因為成員不能同時由子類重寫,也不能訪問它。基類還可以定義為抽象類。抽象類不能直接實例化,要使用抽象類就必須繼承這個類,然後再實例化。

Copyright © Linux教程網 All Rights Reserved