標籤:
6.封裝
封裝就是對外部類隱藏成員或變數。我已經說過房子的保安僅僅被限制在房子的入口處,不需要知道屋內發生了什麼。房主對保安隱藏了屋內所發生的任何事,以便更安全。隱藏和限制就被稱為封裝。
例如我們有兩個類,一個是”Houseclass”另一個是”houseSecurityClass”。
我們可以看到所有的成員都包裹在公開的類houseSecurityClass裡,所以Houseclass類的對象能夠訪問 houseSecurityClass裡的任何成員。但是Houseclass有2個成員,一個public一個private。private類不能夠被外部的類所訪問。
1 public class houseSecurityClass 2 { 3 public int noofSecurity; 4 public String SecurityName = String.Empty; 5 } 6 7 public class Houseclass 8 { 9 private int noofLockerinHosue = 2;10 public string OwnerName = String.Empty;11 }7.抽象化
抽象就是顯示和分享一些共同的資訊給使用者。接著討論屋子的例子。屋子裡有僕人,能夠進入任何房間,做清潔和其他的事情。房主可以給僕人所有或者部分進入臥室的許可權。我們可以看出,程式中private的成員和方法都是僕人所沒有的許可權,而public的成員和方法都是僕人所擁有的許可權。
1 public class HouseServerntClass 2 { 3 4 private int SaftyLoackerKeyNo = 10001; 5 public String roomCleanInstructions = "Clean All rooms"; 6 7 private void saftyNos() 8 { 9 Console.WriteLine("My SaftyLoackerKeyNo is" + SaftyLoackerKeyNo);10 }11 12 public void roomCleanInstruction()13 {14 Console.WriteLine(roomCleanInstructions);15 }16 17 }8.繼承
繼承就是為了代碼的重用。在protected internal存取修飾詞章節我們已經看到繼承的例子。繼承就是在衍生類別中能夠訪問父類的所有公開的方法和變數等。
單層次繼承--一個衍生類別只繼承一個父類。
1 public class baseClass 2 { 3 private void privateMethod() 4 { 5 Console.WriteLine("private Method"); 6 } 7 8 public void publicMethod() 9 {10 Console.WriteLine("This Method Shared");11 }12 }13 public class DerivedClass : baseClass14 {15 static void Main(string[] args)16 {17 DerivedClass obj = new DerivedClass();18 obj.publicMethod();19 //obj.privateMethod(); //This will be error as private method can not be accessed in Derived Class20 }21 22 }
注意:有時候大家可能不清楚什麼是基類,什麼是衍生類別。基類就是超級類,衍生類別就是繼承了基類。
下面就是一個繼承的例子,基類GuestVist,衍生類別HouseOwnerClass。衍生類別HouseOwnerClass繼承自GuestVisit類。
1 HouseOwnerClass.Here HouseOwnerClass class inherits the base class of GuestVist 2 class GuestVist 3 { 4 public void Guestwelcomemessage() 5 { 6 Console.WriteLine("Welcome to our Home"); 7 } 8 public void GuestName() 9 {10 Console.WriteLine("Guest name is: Shanu");11 }12 13 }14 class HouseOwnerClass : GuestVist15 {16 static void Main(string[] args)17 {18 HouseOwnerClass obj = new HouseOwnerClass();19 obj.Guestwelcomemessage();20 obj.GuestName();21 Console.ReadLine();22 }23 }
多層次繼承--不止一個衍生類別的例子。下面的例子中我們可以看到baseclass派生了DerivedClass1,而DerivedClass1派生了DerivedClass2。因此DerivedClass2可以訪問DerivedClass1和baseclass兩個類的公開成員和方法。
1 public class baseClass 2 { 3 private void privateMethod() 4 { 5 Console.WriteLine("private Method"); 6 } 7 8 public void publicMethod() 9 {10 Console.WriteLine("This Method Shared");11 }12 }13 public class DerivedClass1 : baseClass14 {15 public void DerivedClass1()16 {17 Console.WriteLine("Derived Class 1");18 }19 }20 public class DerivedClass2 : DerivedClass121 {22 static void Main(string[] args)23 {24 DerivedClass2 obj = new DerivedClass2();25 obj.publicMethod();26 obj.DerivedClass1();27 //obj.privateMethod(); //This will be error as private method can not be accessed in Derived Class28 }29 30 }多重繼承:
.Net支援多重繼承嗎?NO
一個類不能支援多重繼承。
什麼是多重繼承?多重繼承就是 一個類繼承多個基類。就是一個衍生類別繼承多於1個基類。
c#使用了多重繼承會發生什嗎?
繼續來看屋子的執行個體。下面的例子中我們有一個衍生類別ouseOwnerClass,兩個基類“GuestVist” 和“FriendsandRelationsClass”.
現在家裡來了兩個人一個客人,一個朋友。因此我們寫的3個類中衍生類別繼承了2個類。當我用c#寫一個多重繼承,編譯器會給出警告資訊但是可以執行代碼。警告資訊是“Expected and interface”。
那麼怎樣才能支援多重繼承呢?
答案是使用介面,介面支援多重繼承。
~~~~今天就到這裡,洗澡睡覺咯
C#物件導向的基本概念 (Basic C# OOP Concept) 系列二