物件導向程式設計——VB.NET&C# 篇 (轉)

amyz發表於2007-08-16
物件導向程式設計——VB.NET&C# 篇 (轉)[@more@]

面向設計

——& 篇

 

引言:namespace prefix = o ns = "urn:schemas--com::office" />

.NET是一種充分體現物件導向(OO)特徵的語言平臺,這些特徵包括:

  • 名字空間(Namespace)
  • 類(Classes)
  • 物件(s)
  • 封裝(Encapsulation)
  • 過載(Overloading)
  • 繼承(Inheritance)
  • 重寫(Overriding)
  • 介面(Interfaces)
  • 多型(Polymorphism)

下面我們一起來逐一瞭解這些特徵的簡要意義:

名字空間(NameSpace

名字空間即使被.NET平臺廣泛的應用,但其不是真正的S特徵,它只不過是各種不同類(Classes)的一個邏輯容器。名字空間下的類名必須是唯一的,名字空間有兩個用途——為類提供邏輯組織和避免歧義性。

 

類(Classes

類,僅僅是指“模板”或“blue-print”的一種定義。例如,你可以定義一個真實存在的類——Employee,這個類中包含有屬性成員(Name, Age...)和行為(CalculateSalary, GoOnLeave...)。

 

物件Objects

類的例項叫做物件。例如,上面提到的Employee類可以包含有三個例項,它們描繪了具體的僱員——John, Bob and Tom。

 

封裝(Encapsulation

每一個物件(Objects)都是有代表性地分配一些資料或其他什麼的。不是所有的資料都暴露在的外部,這些可以透過封裝來控制。

 

過載(Overloading

過載是指方法或可以使用相同的名字,但使用不同的引數名。引數的資料型別和個數可以改變。

 

繼承(Inheritance

繼承是指類的延伸。它在任何時候對你的系統發展中的“物件模型”起到重要作用。.NET計劃只支援單一的繼承關係。

 

重寫(Overriding

重寫是指方法在派生類中用跟父類相同(除了引數以外)的名字。

 

介面(Interfaces

介面只不過是無需任何程式碼的類的屬性和方法的模型。類使用Implement關鍵字來執行介面。當一個類透過Implements關鍵字建立介面的時候,它必須執行所有的屬性和方法(雖然這個動作是空的或者是無效的)。

 

多型(Polymorphism

多型性是指系統使用相同的名字正確的任務的能力。

 

建立名字空間

建立名字空間使用關鍵字——Namespace(C#裡使用namespace)。下面的例子顯示了怎樣宣告一個名字空間。

[VB.NET]


Namespace MyNamespace


...


End Namespace


 


[C#]


namespace MyNamespace


{


...


}


注意,一個集合可以有一個或多個名字空間,相反,一個名字空間可以跨越多個集合。你可以像下面例子一樣建立名字空間巢。

[VB.NET]


Namespace MyNamespace


  Namespace MuSubNamespace


  ... 


  End Namespace 


End Namespace


 


[C#]


namespace MyNamespace


{


  namespace MySubNamespace


  {


  ...


  }


}


如果你是使用VS.NET整合開發環境來建立解決方案,那麼請使用預設的名字空間。

建立類

類的建立跟建立名字空間相似。

 

[VB.NET]


Public Class Class1


  ... 


End Class


 


[C#]


public class Class1


{


  ...


}


類通常是一些名字空間的一部分。

建立屬性

屬性是類的封裝資料成員,屬性可以是讀寫、只讀和只寫。這是一個建立“讀寫”屬性的例子:

[VB.NET]


Public Class Employee


 


  private strName As String


 


 Public Property Name As String


  Get


    return strName;


  End Get


   


 Set(value As String)


  strName=value; 


 End Set


  End Property


End Class


 


[C#]


public class Class1


{


  public string Name


  {


    string strName;


    get


    {


     return strName;


    }


    set


  {


    strName=value;


  }


  }


}


注意:1、VB.NET使用Property關鍵字宣告屬性,C#使用這個關鍵字。

2、Property定義由Get和Set兩部分組成,Get部分返回屬性的值而Set部分是設定一些private變數。

3、Set設定的值在C#裡是透過隱含變數來呼叫這個值,而在VB.NET裡允許你去改變這個值。

建立方法

方法描繪物件的行為。在VB.NET的FUNCTION和SUB塊可以想方法一樣被集體呼叫,在C#中任何事情都是函式。

[VB.NET]


Public Sub CalculateSalary()


...


End Sub


 


[C#]


public void CalculateSalary()


{


...


}


建立過載

方法過載是指呼叫同一方法名稱使用不同的資料型別和它們的次序。下面的例子清晰的演示方法過載的建立:

[VB.NET]


Public Sub CalculateSalary()


...


End Sub


 


Public Sub CalculateSalary(month as Integer)


...


End Sub


 


[C#]


public void CalculateSalary()


{


...


}


 


public void CalculateSalary(int month)


{


...


}


注:使用VB.NET你也可以使用任意的引數去完成相似的功能,然而,推薦使用過載的方法。

繼承

繼承是延伸已有的類的一種能力。.NET允許單一繼承而不象C++那樣允許並聯的繼承,這就意味著你在任何某一時刻只能從一個單一的類那裡繼承。

[VB.NET]


Public Class Manager


  Inherits Employee


  ... 


End Class


 


[C#]


public class Manager : Employee


{


  ...


}


在上面的例子中,我們建立了一個從父類Employee繼承的派生類Manager象你能夠猜到Manager是父類Employee的具體的實行一樣。VB.NET使用Inherits關鍵字表示父類而在C#程式碼中使用“:”運算子。

方法重寫

為了在子類裡重寫方法,必須在父類中的方法前標識Overridable關鍵字(VB.NET)virtual關鍵字(C#)。

[VB.NET]


Public Overridable Function CalculateSalary() As Integer


...


End Function


 


[C#]


public virtual int CalculateSalary()


{


...


}


然後,在子類中你可以建立一個方法使用相同的名字和指定重寫的基類方法。

[VB.NET]


Public Overrs Function CalculateSalary() As Integer


...


End Function


 


[C#]


public override int CalculateSalary()


{


...


}


注意:如果你在子類中沒有提供關鍵字Overrides (VB.NET) 或 override (C#)的話,那麼,會給出一個“you are hiding a base class member”的警告提示。當然了,你也可以輸入Shadows (VB.NET)或new (C#)關鍵字來隱藏基類成員。

建立介面

象類是模板的生存期一樣,介面可以是類的模板,相同地,他們是在物件模型裡。

[VB.NET]


Public Interface IEmployee


  Property EmployeeID() As Integer


  Property Name() As String


  Property Age() As Integer


  Function CalculateSalary() As Integer


End Interface


 


[C#]


public interface IEmployee


{


  int EmployeeID


  {


    get;


  }


 


  string Name


  {


    get;


    set;


  }


 


  int Age


  {


    get;


    set;


  }


 


  int CalculateSalary();


}


多型

下面一段作為講解的例子:

[VB.NET]


Dim emp As Employee


emp = New Clerk()


Console.WriteLine


("Clerk Salary :{0}", emp.CalculateSalary())


emp = New Manager()


Console.WriteLine


("Manager Salary :{0}", emp.CalculateSalary())


 


[C#]


Employee emp;


emp=new Clerk();


Console.WriteLine


("Clerk Salary :{0}",emp.CalculateSalary());


emp=new Manager();


Console.WriteLine


("Manager Salary :{0}",emp.CalculateSalary());


在例子中,我們定義了一個Employee型別的變數。父類型別的變數能夠指向任何其子類的例項。首先,我們讓它指向一個叫做Clerk類的例項,然後,我們再讓它指向一個叫做Manager類的例項。依靠子型別,父型別(這裡的type Employee)甚至可以正確的呼叫CalculateSalary()方法。透過inheritance polymorphism和interface polymorphism都可以可以完成上面的動作。

[VB.NET]


Dim emp As IEmployee


emp = New Clerk()


Console.WriteLine


("Clerk Salary :{0}", emp.CalculateSalary())


emp = New Manager()


Console.WriteLine


("Manager Salary :{0}", emp.CalculateSalary())


 


[C#]


IEmployee emp;


emp=new Clerk();


Console.WriteLine


("Clerk Salary :{0}",emp.CalculateSalary());


emp=new Manager();


Console.WriteLine


("Manager Salary :{0}",emp.CalculateSalary());


總結:

透過這篇文章我們可以瞭解許多VB.NET和C#的OO(物件導向)特徵,在VB.NET和C#語言的領域,你必須有了解面嚮物件語言特徵和使用關鍵字的程式設計思想。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962705/,如需轉載,請註明出處,否則將追究法律責任。

相關文章