封裝對象的原理:
一、什麼是封裝?封裝的好處?
把類的內部隱藏引來
良好的封裝能夠減少耦合;
類內部的實現可以自由地修改;
類具有清晰的對外介面
二、實現:
1.訪問限制符來實現
public;protected(類內部及其子類);internal(同一個assembly);private(類內部)
預設:private
protected internal = protected + internal(同一項目,子類可以訪問基類)
2.
屬性和索引器也用來封裝類的細節,並提供公用介面給該類的使用者
繼承性
1.衍生類別:基類
2.C#只支援單繼承,多繼承是指一個子類有多個父類,若要實現多繼承要使用介面
3.防止繼承:public
sealed class XX4.衍生類別可以調用基類的方法:
base基類
1 public class Account
2 {
3 public double balance;
4 public bool Withdraw(double amt)
5 {
6 balance -= amt;
7 return true;
8 }
9 } 衍生類別
1 public class CheckAccount:Account
2 {
3 public bool Withdraw(double amt)
4 {
5 if(amt<= base.balance)
6 return base.Withdraw(amt);
7 else
8 return false;
9 }
10 }
何時使用繼承性
1.代碼重用
2.設計重用(公有的欄位和方法放在父類,私人的放在子類)
3.經驗而言(A是由B繼承來的,則可以說A IS a B)
多態性
同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果,這就是多態性
編譯時間多態(overload 重載),運行時多態(override 覆寫)
overload
位置:存在於有繼承關係的類中
方法名:必須相同
參數列表:必須不相同
傳回值:可以不相同
override
位置:存在於同一類中
方法名:必須相同
參數列表:必須相同
傳回值:必須相同
virtual
若在子類中要覆寫父類中的方法,則父類的方法必須為虛擬方法
abstract
父類中只有抽象方法的聲明,實現在子類中
若類中存在一個抽象方法,則類必須聲明為抽象類別(抽象類別不常用,用介面)
介面
1.介面為類提供藍圖(介面的目的就是搭建一個架構,等待實現)
2.介面只提供定義(永遠是public,只有方法的定義沒有實現【這方面和抽象方法一樣】)
3.實現介面的資料類型必須提供介面成員的實現
4.介面本身可以從多個基底介面派生
介面和抽象類別的比較:
相同點:
1.都是只有方法的定義,沒有實現
2.就像子類繼承了父類,則必須提供父類抽象方法的實現一樣;若一個類繼承了介面,則必須提供方法體來實現
如:public class admin_user:Iadmin_user 表示類admin_user提供Iadmin_user中方法的實現
不同點:
1.介面裡方法永遠是public的
2.介面中只有方法的定義,而抽象類別中可以有一般的方法的定義和其它類成員的定義:如屬性、欄位
3.類只支援單繼承,而介面可以實現多繼承
介面
public interface IAccount
{
void Method1();
string Method2(int x, int y);
...
}實作類別
Public class InsuranceAccount : IAccount
{
void Method1()
{
…
}
string Method2(int x, int y)
{
…
}
}