none
[VB .NET] Overridable & NotOverridable RRS feed

  • 問題

  • VB .NET 中 mscorlib.System.Collections.DictionaryBase 的 Count Property,在說明檔中是這樣的宣告,是這樣的:

     

    Public Overridable ReadOnly Property Count As Integer Implements ICollection.Count

     

    但不知為甚麼,在 Object Browser 中,卻是這樣的(既是 Overridable 又是 NotOverridable):

     

    Public Overridable NotOverridable ReadOnly Property Count() As Integer

    Member of: System.Collections.DictionaryBase

     

    而如下程式碼:

     

    Public Class MyCollection

        Inherits System.Collections.DictionaryBase

        Public Overrides ReadOnly Property Count() As Integer
            Get
                Return MyBase
    .Count
            End Get
        End Property

    End Class

     

    會引發錯誤:

     

    'Public Overrides ReadOnly Property Count() As Integer' cannot override 'Public Overridable NotOverridable ReadOnly Property Count() As Integer' because it is declared 'NotOverridable'.

     

    是甚麼原因呢?

     

    謝謝!

     

    2008年3月11日 下午 12:48

解答

  •  Alva Wong 寫信:

    那麼,這是否與說明檔不同(其宣告是 Overridable 的)?



    它的宣告為 Public ReadOnly Property Count As Integer 而且非 Overridable

    況且你繼承了 DictionaryBase 直接就可以取用 Count,
    不用再自行撰寫 Get 定義如何取得 Count。


    2008年3月16日 上午 09:11

所有回覆

  • 其實這個是否 Bug(請留意左下角 .. Overridable NotOverridable ..):

     

    http://lh3.google.com/alvawong2006/R9lCzvkXk-I/AAAAAAAAAB8/8zGSUdu7CbA/OB.bmp.jpg

     

     

    Overridable 與 NotOverridable 是不會同時出現的,是不是?大家在自己電腦的情形是否如上一樣?

     

    謝謝!
    2008年3月13日 下午 03:15
  • 在我的VS2005 SP1上出現的是

     

    Public ReadOnly Property Count() As Integer
         成員屬於: System.Collections.DictionaryBase
    摘要:
    取得包含於 System.Collections.DictionaryBase 執行個體中的元素數。

    傳回值:
    包含於 System.Collections.DictionaryBase 執行個體中的元素數。

     

    2008年3月14日 上午 01:19
  • 我安裝了 Service Pack 1,但發覺問題依舊!

     

     aliceyeh 寫信:

    在我的VS2005 SP1上出現的是

     

    Public ReadOnly Property Count() As Integer
         成員屬於: System.Collections.DictionaryBase
    摘要:
    取得包含於 System.Collections.DictionaryBase 執行個體中的元素數。

    傳回值:
    包含於 System.Collections.DictionaryBase 執行個體中的元素數。

     

     

    那麼,這是否與說明檔不同(其宣告是 Overridable 的)?

    2008年3月14日 下午 04:07
  •  Alva Wong 寫信:

    那麼,這是否與說明檔不同(其宣告是 Overridable 的)?



    它的宣告為 Public ReadOnly Property Count As Integer 而且非 Overridable

    況且你繼承了 DictionaryBase 直接就可以取用 Count,
    不用再自行撰寫 Get 定義如何取得 Count。


    2008年3月16日 上午 09:11
  •  chhuang 寫信:
     Alva Wong 寫信:

    那麼,這是否與說明檔不同(其宣告是 Overridable 的)?



    它的宣告為 Public ReadOnly Property Count As Integer 而且非 Overridable

    況且你繼承了 DictionaryBase 直接就可以取用 Count,
    不用再自行撰寫 Get 定義如何取得 Count。


     

    但出現了這個情況,可能是發生了一些隱藏的問題,將來也可能會在其他方再次「出現」!

     

    另外,我在網上找到另一個相同的例子:http://www.cnblogs.com/leeym/archive/2005/08/30/225879.html

    2008年3月16日 下午 03:26
  • 你有看到文中所提的嗎? 問題在於

     

    不是只能写Shadows,而是你根本不应该去重写这一遍RemoveAt。

     

    你不應該去重寫一個 Readonly Property !!!

    2008年3月17日 上午 03:12
  •  aliceyeh 寫信:

    你有看到文中所提的嗎? 問題在於

     

    不是只能写Shadows,而是你根本不应该去重写这一遍RemoveAt。

     

    你不應該去重寫一個 Readonly Property !!!

     

    其實這個問題,與程式碼沒有關係(無論甚麼時候,例如正在編輯程式,或剛建立一個專案,在 Object Browser 之中看到的,亦是一樣),我們只是要找出為甚麼在 Object Browser 中會有 Overridable NotOverridable 這種奇怪的宣告出現!

    2008年3月17日 下午 11:47
  • 不用在一個不是你的問題的問題上面鑽牛角尖, Microsoft 的東西有問題又不是一個二個, 在你的 Object Browser 中會有 Overridable NotOverridable 這種奇怪的宣告出現, 在別人的電腦上不會出現, 一點都不奇怪! 只要確定自己的觀念沒有被誤導就行了!

    2008年4月2日 上午 02:58