我有一个父类(Foo)共享方法sharedMethod()
。它是MustInherit
。 Bar
和Baz
类从Foo继承。我会做这样的事情:谁叫共享方法?
Dim baz as New Baz()
Dim bar as New Bar()
baz.sharedMethod()
bar.sharedMethod()
在Foo
的sharedMethod()
,我需要知道谁的说法。我需要班级名称。因此,使用上面的例子,它将分别是Baz
或Bar
。
我有一个父类(Foo)共享方法sharedMethod()
。它是MustInherit
。 Bar
和Baz
类从Foo继承。我会做这样的事情:谁叫共享方法?
Dim baz as New Baz()
Dim bar as New Bar()
baz.sharedMethod()
bar.sharedMethod()
在Foo
的sharedMethod()
,我需要知道谁的说法。我需要班级名称。因此,使用上面的例子,它将分别是Baz
或Bar
。
在你的功能,你可以使用:
Me.GetType().Name
这是假设你的方法未声明为
Private/Public/Protected Shared MyMethod()
而且,当你说“sharedmethod”只意味着两个类有访问该方法。如果您有实际的Shared方法,那么您需要使用Reflection和Diagnostics中的某些内容来获取这些信息,如described here。
为什么你需要知道这个?它似乎不是'正确的方式'去处理事情。如果你需要共享方法来对它的调用者做一些特殊的事情,那么将Foo作为共享方法的一个参数(在这一点上,它可能不值得再分享!)。
这是不可能的,你没有Me变量来知道类的类型。为了避免创建有可能的错觉,你应该把它写这样的:
Foo.sharedMethod()
您应该考虑重写子类中的方法而不是使用共享方法。在覆盖请确保调用基类的方法。如果在父方法内部需要知道调用它的功能(并且不能移动到子类),那么您应该考虑使用泛型。然后在子类中,你可以将子类型传递给foo的构造函数。
我不认为这是可能的。共享方法不持有对实例的引用。 – SKG 2010-08-20 18:55:54
另外,您不应该从实例调用共享方法。 C#不允许这样做,但不幸的是,VB会。你应该总是使用类名称调用共享方法 – 2010-08-20 20:34:06