程序:
class Program
{
class class1
{
public string Name { get; set; }
public int Value { get; set; }
}
class class2
{
public string Name { get; set; }
public int Value { get; set; }
}
static void Main(string[] args)
{
var Source = new class1() { Name = "Source", Value = 1 };
var Target = new class2() { Name = "Target", Value = 2 };
setValue(Source, Target);
Console.WriteLine(string.Format("Source - Name:{0} Value:{1}", Source.Name,Source.Value));
Console.WriteLine(string.Format("Target - Name:{0} Value:{1}",Target.Name, Target.Value));
}
private static void setValue(object Source, object Target)
{
Target = Source;
}
}
Run Code Online (Sandbox Code Playgroud)
当这运行我得到(我期望):
Source - Name:Source Value:1
Target - Name:Target Value:2
Run Code Online (Sandbox Code Playgroud)
但是当我将setValue方法更改为:
private static void setValue(object Source, object Target)
{
var source = Source as class1;
var target = Target as class2;
target.Name = source.Name;
target.Value = source.Value;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
Source - Name:Source Value:1
Target - Name:Source Value:1
Run Code Online (Sandbox Code Playgroud)
这一行:
Target = Source;
Run Code Online (Sandbox Code Playgroud)
只是将值复制Source到变量中Target.
该值只是一个参考 - Target实际上只是一个局部变量,因为它是一个正常的参数.
在您的其他代码中:
var source = Source as class1;
var target = Target as class2;
target.Name = source.Name;
target.Value = source.Value;
Run Code Online (Sandbox Code Playgroud)
这是在设置数据中其由参数所指的对象.想想这样.想象一下,你给某人一张带有地址的纸,然后他们去那个地址并将房子涂成红色.之后你自己去看房子,你会发现它是红色的.
现在将它与你的第一个例子进行比较 - 这就像给某人一张纸,然后他们划掉地址并将红房子的地址写在上面.你没有看到这一点 - 你只是给了他们一张纸,让他们继续下去.因此,当你去原始地址时,你看不到红房子,因为它没有改变.
我有两篇文章可以帮助您理解所涉及的概念:
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |