c# - 如何使 C# 函数参数充当值?

标签 c# function parameters

我的问题与 C# 函数参数有关。我习惯了 C++,默认情况下参数是值,除非您明确指定它们作为引用。那么,在 C# 中,如何使函数参数按值而不是按引用传递?其实,我只是想知道如何传递一个变量,而不是在函数调用后修改那个变量。

例如:

void foo(Widget w)
{
     w.X = 3;//where w wouldn't really be modified here
}

最佳答案

没有人提到 struct 是按值传递的:

struct Foo
{
    public int X;
    public override string ToString()
    {
        return "Foo.X == " + X.ToString();
    }
}

class Program
{
    static void ModifyFoo(Foo foo)
    {
        foo.X = 5;
        System.Console.WriteLine(foo);
    }

    static void Main()
    {
        Foo foo = new Foo();
        foo.X = 123;
        ModifyFoo(foo);
        System.Console.WriteLine(foo);
    }
}

输出:

$ mono ./a.exe
Foo.X == 5
Foo.X == 123

如果您对类型使用struct,那么您只能在显式使用refout 时修改实例 在你的方法中......但显然这只有在你可以控制所涉及的类型时才有效。

关于c# - 如何使 C# 函数参数充当值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3275504/

相关文章:

c# - 如何在 Entity Framework 中查找具有指定日期范围列表的日期?

c# - 防止 Windows Phone 上的自动锁定

matlab - 从函数句柄创建矩阵 (MATLAB)

c# - 在方法覆盖中更改 params 修饰符

c# - IPC 使用 Protobuf 和内存映射文件 C#

python - Python 中的自恋数字

c++ - 对数组的每个元素求和函数的结果

powershell - 将多个值传递给单个 PowerShell 脚本参数

php - 将 PHP 类作为参数传递

javascript - 页面刷新子菜单上的 Accordion 垂直菜单栏隐藏