【发布时间】:2015-07-31 17:20:14
【问题描述】:
我有一些有趣的事情想深入了解一下。
我有一个扩展 int 的扩展类:
public static class MyExtension
{
public static void GetProp(this int i, MyObject o)
{
var val = i;
o.sum = i;
}
}
使用类作为其参数之一:
public class MyObject
{
public int sum { get; set; }
}
现在,让我们看看单元测试类:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void test()
{
int a = 1;
int b = 2;
int sum = 0;
Add(a, b, sum);
//这里 sum=3 但是在执行之后 sum 失去了它的值并且 保留值 sum = 0
int test = 4;
MyObject obj = new MyObject();
test.GetProp(obj);
但在上面的代码中,当我使用扩展名传递变量时 方法,obj.sum 保留其值 obj.sum = 4 。我没有通过任何 参考价值。代码的第一部分似乎遵循 通过 ByVal。但是扩展方法的第二部分,值 被保留,就好像它作为 ByRef 传递一样
string s = sum.ToString();
string p = obj.sum.ToString();
}
private void Add(int x, int y, int sum)
{
sum = x + y;
}
}
谁能解释一下这背后的机制。谢谢
【问题讨论】:
-
你熟悉如何在扩展方法stackoverflow.com/questions/2618597/…中使用
ref关键字
标签: c# scope extension-methods