.net 有關多態性的學習筆記

來源:互聯網
上載者:User

將衍生類別對象指派給基類引用。程式要想多態性的處理對象,這是非常基本的部分。
  所謂引用就是聲明資料類型。
  然後就是執行個體化。“new”.
  衍生類別引用指派給基類引用:point = circle
  此時如果調用point的方法,因為將衍生類別引用指派給基類引用,所以是circle的方法
  而不是point的方法。
  將基類對象指派給衍生類別引用(無強制類型轉換),會發生語法錯誤。
  衍生類別引用指派給基類引用,可通過強制類型轉換,只有這樣才能向那個對象發送未在
  基類中出現的訊息。(表示調用一個對象的方法和屬性)
  因為衍生類別包含與基類對象所有成員對應的成員,但衍生類別還可能有附加成員。所以,
  不進行顯式的強制類型轉換,就不能將基類的引用指派給衍生類別引用。option strict
  在on 的狀態。否則,附加的衍生類別成員會]進入未定義的狀態。
  不會執行個體化任何對象的類,稱為抽象類別。(mustinherit)
  所以,派聲類必須覆蓋繼承抽象的方法和屬性,使那些衍生類別的對象被執行個體化。
  例如:有人讓你畫一個形狀,那麼具體畫什麼形狀呢?具體類提供這些細節。
  許多良好的物件導向的系統都用mustinherit積累開始以各類階層。有時要佔據類
  階層頂部的好幾個層級。
  關鍵字mustoverride可將一個方法和屬性聲明為抽象的。每個衍生類別必須覆蓋所有的
  mustoverride方法和屬性。使用關鍵字(overrides)
  mustoverride和overridable方法區別在於,後者有具體的方法實現。並允許衍生類別
  覆蓋。而前者沒有具體實現,並且衍生類別必須要覆蓋其方法和屬性。
  在面向對對象編程,經常要用到迭代器類。它能便利容器(比如數組)內所有對象
  例如:
  dim arrayofshapes as cshape() = new shape(2)
  arrayofshapes(0) = point
  arrayofshapes(0) = circle
  arrayofshapes(0) = cylinder(圓柱)
  dim shape as cshape
  for each shape in arrayofshapes
  next
  建立和使用介面:
  介面指定了類必須是實現的一系列public服務(也就是方法和屬性)。
  介面要用關鍵字interface開頭,要使用介面,類必須指出實現了自己的implments
  介面。
  可讓介面提供一個屬性和方法,讓這些類的對象來實現,已返回每個對象的方法或屬性。
  委託:
  在事件通訊中,事件發送方類不知道哪個對象或方法將接收到(處理)它引發的事件。
  所需要的是在源和接收方之間存在一個媒介(或類似指標的機制)。.NET Framework
  定義了一個特殊的類型(Delegate),該類型提供函數指標的功能。
  委託是一個可以對方法進行引用的類。與其他的類不同,委託類具有一個簽名,並且它只能
  對與其簽名匹配的方法進行引用。這樣,委託就等效於一個型別安全函數指標或一個回調。
  委託是一種參考型別,它參考型別的 Shared 方法或對象的執行個體方法。在其他語言中,
  與委託最接近的是函數指標,但函數指標只能引用 Shared 函數,而委託可以引用 Shared
  和執行個體方法。在後一種情況中,委託不僅儲存對方法進入點的引用,還儲存對用於調用方法
  的對象執行個體的引用。
  自己理解:委託其實質就是一個方法的地址,通過它可以找到這個方法,並使用它。
  這個在多線程的編程中使用到。
  例子:
  Delegate Sub MySubDelegate(x as integer)
  Protected Sub Test()
   Dim c2 As New class2()
   ' Test the delegate.
   c2.DelegateTest()
  End Sub
  Class class1
   Sub Sub1(ByVal x As Integer)
   MessageBox.Show("The value of x is: " & CStr(x))
   End Sub
  End Class
  Class class2
   Sub DelegateTest()
   Dim c1 As Class1
   Dim msd As MySubDelegate
   c1 = New Class1
   ' Create an instance of the delegate.
   msd = AddressOf c1.Sub1
   msd(x) ' Call the method.
   End Sub
  End Class
  委託傳遞參數:委託的參數傳遞給class1.sub1的參數,通過這裡可以看出。
  還有一種方式,但不能傳遞參數。
  dim msd as new methodinvoke(addressof 方法名)
  調用時 msd.invoke
  委託結合線程使用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.