我想要做的是,我想传递一个指向函数的指针,该函数可以是任何类型的变量(int、long、string,甚至是一个类,我的意思是我应该能够传递任何变量的指针)。我就是这样做的
unsafe class whatever
{
whatever(object* variable)
{
this.variable = variable;
}
}
错误是:无法获取托管类型(“对象”)的地址、获取大小或声明指向托管类型的指针
我想要做的是,我将存储通过构造函数传递的变量,并使用它们的 ToString() 方法,我试图创建一个用于控制台应用程序的类,用更新后的变量刷新变量。
如果我能那样做我的代码就会像那样
unsafe class whatever
{
whatever(object* variable)
{
this.variable = variable;
}
object* variable;
public override string ToString()
{
return *variable.ToString();
}
}
也许您应该传入一个委托,您的类可以使用该委托来获取“对象字符串”。
class MyFancyClass
{
Func<string> getObjectString;
public MyFancyClass(Func<string> getObjectString)
{
this.getObjectString = getObjectString;
}
private MyOtherThread()
{
// ...
string desc = getObjectString();
// ...
}
}
// ...
long value = 34;
MyFancyClass fancy = new MyFancyClass(() => value.ToString());
// ...
value = 88;
// getObjectString() should now reflect the new value.
// The variable is captured in the lambdas closure.
但要小心,因为委托是从另一个线程调用的,简单地调用 ToString() 可能并不对所有对象都是安全的,并且需要锁定。然而,委托允许调用者执行此操作,具体取决于对象。
指针会变得丑陋,需要不安全的代码并且不稳定。如果您没有明确地固定指针,垃圾收集器可以自由移动对象。引用无法存储,您只能传递它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)