将C ++代码移植到C#-指针问题

阿什什·查兰(Ashish Charan)

我正在尝试将C ++代码转换为C#。我们有接受C ++指针的函数。在C#中,我们很难做到这一点。我们已经尝试了以下演示代码:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Test obj = new Test();
            int a,b;
            Console.WriteLine("Initial Values");
            a = 20;
            b = 100;
            obj.SetRef(ref a,ref b);
            Console.WriteLine("Value of A: " + a);
            Console.WriteLine("Value of B: " + b);
            obj.SetValRef(ref a);
            Console.WriteLine("After Ref");
            Console.WriteLine("Value of A: " + a);
            Console.WriteLine("Value of B: " + b);
            Console.ReadKey();
        }   
    }



    class Test
    {

        public void SetRef(ref int x, ref int y)
        {
            y = x;
        }

        public void SetValOut(out int x)
        {
            x = 10;

        }

        public void SetValRef(ref int x)
        {
            x = 10;

        }
    }
}

当我们运行它的输出是

Initial Values
Value of A: 20
Value of B: 20
After Ref
Value of A: 10
Value of B: 20

我们希望如果一个变量的值改变了,那么第二个变量的值应该自动改变(指针)。

拉瑟·卡尔森(Lasse V.Karlsen)

在C#/。NET中执行此操作的唯一方法是使用不安全的代码,并将变量之一声明为指针。

但是,这对于C#代码不是很好的建议。我极力考虑将代码重组为更类似于C#的风格,否则您将与该语言进行大量斗争。

或者,更好的建议是,如何使用托管C ++编译器编译代码并将其包装为一些不错的实际托管类型,而不要经历移植的麻烦?

无论如何,这是一个LINQPad示例,该示例显示了如果您真的必须移植它并需要该功能,该怎么办

void Main()
{
    unsafe
    {
        int x = 10;
        int* y = &x;

        Debug.WriteLine("x=" + x + ", y=" + *y);

        ChangeValue(ref x);

        Debug.WriteLine("x=" + x + ", y=" + *y);

        ChangeValue(ref *y);

        Debug.WriteLine("x=" + x + ", y=" + *y);
    }
}

static void ChangeValue(ref int value)
{
    value += 10;
}

这将输出:

x=10, y=10
x=20, y=20
x=30, y=30

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章