发新帖

[C#/ASP.NET] C#中的对象指针(object *)

零下一度 2022-11-23 808

本文介绍了C#中的对象指针(object *)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!


问题描述

我想做的是,我想将一个指针传递给可能是任何类型的变量的函数(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()可能并非对所有对象都是安全的,并且需要锁定.但是,委托可以允许调用者执行此操作,具体取决于对象.

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

这篇关于C#中的对象指针(object *)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!




@IT1352



最新回复 (0)
返回
零下一度
主题数
928
帖子数
0
注册排名
1