熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

認識.NET中的虛函數[3]

2022-06-13   來源: .NET編程 

  [問題]: CA實現IA那麼CAFoo前面需要override嗎?

  答案是否定的在C#中繼承和實現是截然不同的兩個概念盡管在語法上很相似繼承意味著全盤接收基類的函數而實現只是一個契約保證當前類會提供interface中聲明的函數而不會接受基類的函數(事實上也不能因為interface中沒有函數的實現)

  [問題]: CA實現IA那麼CAFoo前面需要virtual嗎?

  答案是需要的否則的話CA的子類將無法覆寫Foo下面的代碼是CAFoo的IL聲明我們發現了關鍵字final(注這裡的final是IL語言的關鍵字和C#中sealed有些類似意味著子類不能override當前函數)

  method public hidebysig newslot virtual final

  instance void Foo() cil managed

  下面一段代碼緊接著上面的代碼讀者可以猜測一下輸出看看是否掌握了本文今天講述的內容我會在下期博客中講解其原委並且和大家進一步通過IL來研究NET中的虛函數

class CB : CA IA {
    public void Foo()  {
      ConsoleWriteLine(CBFoo);
    }
}
class Test  {
    public static void InvokeFoo(CA ia) {
      caFoo();
    }
    public static void Main()  {
      InvokeFoo(new CA());
      InvokeFoo(new CB());
     }

[]  []  []  


From:http://tw.wingwit.com/Article/program/net/201311/14948.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.