public void Test(int a)
{
// changes to "a" do not affect variable used in Test call
// изменение значения параметра "a" не влияет на значение переменной,
// использованной в качестве аргумента вызова функции
a = a + 1;
}
public void TestRef(ref int a)
{
// changes to "a" do affect variable used in TestRef call
// изменение значения параметра "a" меняет значение переменной,
// использованной в качестве аргумента вызова функции, отсюда - псевдоним
a = a + 1;
}
public void TestOut(out int a)
{
// changes to "a" do affect variable used in TestOut call,
// value assigned to variable before the call is discarded
// присвоение значения параметру "a" присваивает значение переменной,
// использованной в качестве аргумента вызова функции, отсюда - псевдоним;
// значение переменной до вызова функции теряется,
// переменая может быть не инициализирована до вызова функции
// compiler error without this:
// параметр обязательно должен быть инициализирован до
// использования/возврата
a = 2;
a = a + 1;
}
int b = 5;
Test(b); // b = 5
Test(ref b); // b = 6
Test(out b); // b = 3;
看。“普通”参数(不带
ref
/ )按值out
传递给方法。这意味着如果你在方法内部改变参数的值,外面没有人会注意到它。(如果您不更改引用类型参数本身,而是更改其字段/属性,那么它将从外部可见,但这是另一回事。)
现在,如果您已指定参数
ref
,则此参数的更改将从外部可见。也就是说,在代码中abc
不会更改对字符串的引用的副本,而是引用本身。所以如果你现在写- 那么它将被准确地输出
Хихи
。因此,这意味着
s
在该方法的执行过程中,它就像是name 的另一个名称(即别名)abc
。