在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/

10-13 00:49