方法中的C#指针';谁的论点?

方法中的C#指针';谁的论点?,c#,variables,pointers,methods,C#,Variables,Pointers,Methods,我希望从方法内部直接修改方法外部变量的值。 指针就是路,对吗 如何使用?您可以使用方法参数关键字: 这样称呼: int myFoo = 0; modifyFoo(ref myFoo); Console.WriteLine(myFoo); 结果: 42 从文件中: 方法参数上的ref method parameter关键字会导致方法引用传递给该方法的同一变量。当控件传回调用方法时,对方法中参数所做的任何更改都将反映在该变量中 要使用ref参数,必须将参数作为ref参数显式传递给方法。ref参数

我希望从方法内部直接修改方法外部变量的值。
指针就是路,对吗


如何使用?

您可以使用方法参数关键字:

这样称呼:

int myFoo = 0;
modifyFoo(ref myFoo);
Console.WriteLine(myFoo);
结果:

42
从文件中:

方法参数上的ref method parameter关键字会导致方法引用传递给该方法的同一变量。当控件传回调用方法时,对方法中参数所做的任何更改都将反映在该变量中

要使用ref参数,必须将参数作为ref参数显式传递给方法。ref参数的值将传递给ref参数


使用
ref
。例如,
Foo(ref int i)
将允许
Foo
通过引用调用方的值来更改
i
的值

指针就是路,对吗

不是在C#,他们不是。使用ref参数:

 void Times2(ref int a) { a = a * 2; }

 void Foo()
 {
      int x = 1;
      Times2(ref x);
      // x is now 2 
 }
否。在c#中,您可以使用
ref
out
修饰符应用按引用传递语义:

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#中,“指针”只能在中使用。与C或C++一样,C语言中的指针允许你引用变量或对象的位置。在C#中,引用是不同的——你不应该把它们看作指针——它们的目的是更加不透明,并提供一种“引用”变量或对象的方式,而不一定意味着它们指示其在内存中的位置


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

如果值是类,则它已经通过引用传递,而不需要其他任何东西,除非您需要将对象分配给某个对象,
val=anotherobject
,否则您需要使用ref或out关键字


如果它是一个结构(int、float、long、double等),那么必须使用ref(如果对象可能被更改或不被更改)或out(如果对象将被更改)。在用ref或val标记的方法中,可以有多个参数。

我假设这与垃圾收集器有关?我忍不住认为不可变引用类型(字符串)不是演示
ref
参数的最佳主题。
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"; 
}