我正在创建一个函数,我需要传递一个对象,以便它可以被函数修改.有什么区别:
public void myFunction(ref MyClass someClass)
Run Code Online (Sandbox Code Playgroud)
和
public void myFunction(out MyClass someClass)
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个以及为什么?
因此,如果我使用foreach循环进行迭代,并且我在内部有一个函数,它接受从列表迭代的对象的参数,并且假设我将其值设置为不同.我为什么不用出来或参考?我认为它只是通过值传递,如果你没有使用或参考....我知道你必须在前后初始化变量你必须在从方法返回之前设置它的值.
看起来如果你通过列表迭代并传递一个实际通过引用传递的对象.请考虑以下示例.
例
class Program
{
static void Main(string[] args)
{
List<Foo> list = new List<Foo>();
list.Add(new Foo() { Bar = "1" });
list.Add(new Foo() { Bar = "2" });
foreach (var f in list)
{
Foo f2 = f;
Console.WriteLine("SetFoo Pre: " + f2.Bar);
SetFoo(f2);
Console.WriteLine("SetFoo Post: " + f2.Bar);
Console.WriteLine("SetFooRef Pre: " + f2.Bar);
SetFooRef(ref f2);
Console.WriteLine("SetFooRef Post: " + f2.Bar);
Console.WriteLine("");
}
Console.WriteLine("");
int i = 0;
// Not using ref keyword
Console.WriteLine("SetI Pre: " + i); …Run Code Online (Sandbox Code Playgroud)