2

您如何从对象的类外部静态调用实例方法的特定定义,以抑制该特定用途中的多态性?(换句话说:我需要 Visual Basic.NET 的等价物MyClass,但来自外部。)

4

3 回答 3

3

您可以通过构建委托并调用它来强制调用。从记忆里:

void delegate(int, float) dg;

dg = &t.theFunction;  // gives the function for the dynamic type
// OR
dg.ptr = t;  // gives the object

dg.funcptr = &typeof(t).theFunction; // gives the function for the static type 

dg(1,3.1415);

OTOH 这是我书中的一个技巧,对于某些类型肯定会引起问题。

于 2011-01-02T01:14:29.357 回答
1

当这不是您想要的行为时,您是否有理由使用多态类方法?我也不确定你在类之外是什么意思(你是不是想在没有对象实例的情况下调用成员函数)?

我会做一些假设,你可能应该做的是编写将对象作为第一个参数的普通函数。

binarySize(MyClass myObject) {  ... }

尚未添加到任何 D 编译器的功能是能够像这样调用它:

myObject.binarySize();
于 2011-01-02T00:55:09.273 回答
0

您可以使用typeof(this).myfunc()内部类实例函数进行非虚拟调用。如果您需要从外部类非虚拟地调用虚拟方法,您可以向将包装调用的类添加新的(最终)方法。

于 2011-01-01T20:03:00.437 回答