【发布时间】:2021-08-21 07:53:28
【问题描述】:
我有一个关于在 c# 中通过引用传递值类型的非常基本的问题。 如果变量未初始化,为什么 c# 不允许我们通过引用传递变量?如果我们这样做会有什么问题?
让我们以下面的代码为例
public static void main()
{
int i;
SomeMethod(ref i);
}
public static void SomeMethod(ref int i)
{
i = 10;
}
why cant i execute this method? why compiler is stopping me from doing this? what issue will be faced if we pass a unassigned variable as reference?
【问题讨论】:
-
如果你想要这种语义,请将
ref更改为out。 -
@sweeper 我想了解不允许我们将未分配的变量作为参考传递的逻辑。这与我如何更改代码以使其正常工作无关。
-
您是否希望能够编写
int i; Console.WriteLine(i);- 即读取未分配的局部变量?如果不是,您为什么希望仅仅通过添加一个间接级别就能够完成完全相同(危险)的事情? -
请注意,这与
int是值类型无关。对于任何其他类型,您都会得到完全相同的行为 - 变量 必须 在用作ref参数之前明确分配。 -
what issue will be faced if we pass a unassigned variable as reference?它不会编译。正如你所发现的。 ;)want to understand the logic behind not allowing us to pass a unassigned variable as ref.因为编写编译器的人正试图保护你免于被自己的脚射伤。如果他们允许,他们需要记录会发生什么等等,并在它没有按照人们期望的方式运行时忍受不可避免的错误报告。如果他们不允许允许 - 好吧,他们可能会保护一些脚并减少错误报告。
标签: c#