方法参数中的C#指针? [英] C# Pointers in a Method's arguments?

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

问题描述

我希望直接从方法内部修改变量的值.
指针是正确的方法吗?

如何?

解决方案

否.在c#中,您可以使用refout修饰符应用按引用传递语义:

void Foo( ref string s, ref int x )
{
    s = "Hello World"; // caller sees the change to s
    x = 100;           // caller sees the change to x
}

// or, alternatively...

void Bar( out string s )
{
    s = "Hello World"; 
}

这两者之间的区别在于,对于out,调用者在调用该方法时不必指定值,因为要求被调用的方法在退出之前必须分配一个值.

在C#中,指针"是您只能在

对于引用,可以使用特殊关键字(outref)将别名传递给变量.这些仅在方法调用的上下文中可用-编译器可以在其中使用有关引用对象生存期的信息,以确保引用不超过被别名的原始变量.

I wish to directly modify a variable's value outside of a method from inside it.
Pointers are the way, correct?

How?

解决方案

No. In c# you can apply pass by reference semantics using the ref or out modifiers:

void Foo( ref string s, ref int x )
{
    s = "Hello World"; // caller sees the change to s
    x = 100;           // caller sees the change to x
}

// or, alternatively...

void Bar( out string s )
{
    s = "Hello World"; 
}

The difference between these two, is that with out, the caller does not have to specify a value when calling the method, since it is required that the called method will assign a value before exiting.

In C#, "pointers" are something that you can only use in unsafe code. As in C or C++, pointers in C# allow you to refer to the location of a variable or an object. References, in C# are different - you shouldn't think of them as pointers - they are intended to be more opaque and provide a way to "refer" to a variable or object without necessarily implying that they indicate its location in memory.

With references, you can use special keywords (out, ref) to pass an alias to a variable. These are only available in the context of method calls - where the compiler can use information about the lifetime of the referents to make sure that the reference does not outlive the original variable being aliased.

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆