gpt4 book ai didi

c# - C# 中的对象指针(对象*)

转载 作者:太空宇宙 更新时间:2023-11-03 20:33:05 26 4
gpt4 key购买 nike

我想做的是,我想传递一个指向函数的指针,它可以是任何类型的变量(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();
}
}

最佳答案

也许您应该传入一个委托(delegate),您的类可以使用它来获取“对象字符串”。

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.

不过要小心,因为委托(delegate)是从另一个线程调用的,简单地调用 ToString() 可能对所有对象都不安全并且需要锁定。但是,委托(delegate)允许调用者执行此操作,具体取决于对象。

指针会变得丑陋,需要不安全的代码并且不稳定。如果您没有明确地固定指针,垃圾收集器可以自由移动对象。无法存储引用,您只能传递它们。

关于c# - C# 中的对象指针(对象*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6455252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com