C#中的MyClass等价物

Dam*_*ver 17 c# vb.net

在查看这个问题时,评论者@Jon Egerton提到这MyClass是一个关键词VB.Net.从未使用过它,我去找了它的文档:

MyClass关键字的行为类似于一个对象变量,它引用了最初实现的类的当前实例.MyClass与Me类似,但是对它的所有方法调用都被视为方法是NotOverridable.

在某些特定情况下,我可以看到它有多么有用.我无法想到的是,你将如何在C#中获得相同的行为 - 也就是说,确保在当前类中myMethod实际调用虚拟方法myMethod,而不是派生myMethod(也就是在IL中,调用call而不是callvirt)?

我可能只是有一个完整的心理空白时刻.

Hei*_*nzi 14

据Jon Skeet说,没有这样的等价物:

不,C#没有相当于VB.NET的MyClass关键字.如果您想保证不调用方法的重写版本,则需要首先将其设置为非虚拟.

一个明显的解决方法是:

public virtual void MyMethod()
{
    MyLocalMethod();
}

private void MyLocalMethod()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后你可以MyLocalMethod()在VB用户写的时候调用MyClass.MyMethod().