2010-08-20 66 views
1

我有一個父類(Foo)共享方法sharedMethod()。它是MustInheritBarBaz類從Foo繼承。我會做這樣的事情:誰叫共享方法?

Dim baz as New Baz() 
Dim bar as New Bar() 

baz.sharedMethod() 
bar.sharedMethod() 

FoosharedMethod(),我需要知道誰的說法。我需要班級名稱。因此,使用上面的例子,它將分別是BazBar

+0

我不認爲這是可能的。共享方法不持有對實例的引用。 – SKG 2010-08-20 18:55:54

+0

另外,您不應該從實例調用共享方法。 C#不允許這樣做,但不幸的是,VB會。你應該總是使用類名稱調用共享方法 – 2010-08-20 20:34:06

回答

0

在你的功能,你可以使用:

Me.GetType().Name 

這是假設你的方法未聲明爲

Private/Public/Protected Shared MyMethod() 

而且,當你說「sharedmethod」只意味着兩個類有訪問該方法。如果您有實際的Shared方法,那麼您需要使用Reflection和Diagnostics中的某些內容來獲取這些信息,如described here

0

爲什麼你需要知道這個?它似乎不是'正確的方式'去處理事情。如果你需要共享方法來對它的調用者做一些特殊的事情,那麼將Foo作爲共享方法的一個參數(在這一點上,它可能不值得再分享!)。

4

這是不可能的,你沒有Me變量來知道類的類型。爲了避免創建有可能的錯覺,你應該把它寫這樣的:

Foo.sharedMethod() 
0

你可以給一個參數傳遞給sharedmethod和表示方法。

+0

我想,但我想避免... – afe 2010-08-20 19:08:15

+0

任何原因爲什麼? – Shawn 2010-08-20 19:45:49

0

您應該考慮重寫子類中的方法而不是使用共享方法。在覆蓋請確保調用基類的方法。如果在父方法內部需要知道調用它的功能(並且不能移動到子類),那麼您應該考慮使用泛型。然後在子類中,你可以將子類型傳遞給foo的構造函數。