您如何从对象的类外部静态调用实例方法的特定定义,以抑制该特定用途中的多态性?(换句话说:我需要 Visual Basic.NET 的等价物MyClass
,但来自外部。)
问问题
202 次
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 回答