在C#中,我知道默认情况下,传递给函数的任何参数都是通过副本进行的,也就是说,在函数内部,存在该参数的本地副本。但是,什么时候将对象作为参数传递给另一个类呢?
将通过引用还是按值传递类似于以下情形的场景:
class MyClass {
private Object localObj;
public void SetObject(Object obj) {
localObj = obj;
}
}
void Main() {
Object someTestObj = new Object();
someTestObj.name = "My Name";
MyClass cls = New MyClass();
cls.SetObject(someTesetObj);
}
在这种情况下,类变量
localObj
是否与someTestObj
驱动程序类中创建的Main
具有相同的副本?还是两个变量将指向不同的对象实例? 最佳答案
对象将通过引用传递,而不管同一个类或另一个类的方法如何。这是相同示例代码的修改版本,以帮助您理解。该值将更改为“xyz”。
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class Employee
{
public string Name { get; set; }
}
public class MyClass
{
public Employee EmpObj;
public void SetObject(Employee obj)
{
EmpObj = obj;
}
}
public class Program
{
static void Main(string[] args)
{
Employee someTestObj = new Employee();
someTestObj.Name = "ABC";
MyClass cls = new MyClass();
cls.SetObject(someTestObj);
Console.WriteLine("Changing Emp Name To xyz");
someTestObj.Name = "xyz";
Console.WriteLine("Accessing Assigned Emp Name");
Console.WriteLine(cls.EmpObj.Name);
Console.ReadLine();
}
}
}
关于c# - 通过值或引用作为参数传递给另一个类的对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12997635/