谁叫了共享方法?

时间:2010-08-20 18:50:26

标签: vb.net override static-methods

我有一个父类(Foo),共享方法sharedMethod()。它是MustInheritBarBaz类继承自Foo。我会做那样的事情:

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

baz.sharedMethod()
bar.sharedMethod()

Foo sharedMethod()内,我需要知道是谁调用了它。我需要班级名称。因此,使用上面的示例,它将分别是BazBar

5 个答案:

答案 0 :(得分:4)

这是不可能的,你没有Me变量来知道类的类型。为了避免产生可能的错觉,你应该这样写:

 Foo.sharedMethod()

答案 1 :(得分:0)

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

Me.GetType().Name

这假设您的方法未声明为

Private/Public/Protected Shared MyMethod()

当你说“sharedmethod”时,你只是意味着两个类都可以访问该方法。如果您有实际的共享方法,那么您需要使用反射和诊断中的某些内容来获取此信息described here

答案 2 :(得分:0)

为什么你需要知道这个?这似乎不是“正确的方式”去做事情。如果您需要共享方法对其调用者执行一些特殊操作,那么将Foo作为共享方法的参数(此时可能不值得再共享它!)。

答案 3 :(得分:0)

您可以为sharedmethod提供一个参数并指明这一点。

答案 4 :(得分:0)

您应该考虑覆盖子类中的方法而不是使用共享方法。在覆盖中,请确保调用基类方法。如果父方法中有功能需要知道调用它的内容(并且不能移动到子类),那么您应该考虑使用泛型。然后在子类的内部,你将子类型传递给foo的构造函数。