2010-08-20 61 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的构造函数。