从类发送实例与通过引用发送它相同

时间:2014-12-24 07:25:35

标签: c# oop

正如标题所说"从类中发送实例与通过ref发送实例具有相同的效果"

例如

FillStudentInformation(student);

具有相同的效果

FillStudentInformation(ref student);       

我是否希望通过此调用以相同的方式更改这两个实例。

注意:FillStudentUnformation是一个void方法

2 个答案:

答案 0 :(得分:1)

主要区别在于,如果您在方法内部执行某些操作:

student = new Student();

在第二种情况下,您也将在方法之外更改学生对象(不是在第一种情况下)。

使用类似的东西:

student.Name = 'John Doe';

对两者都有效。

但是,您应该尽量避免引用,因为它会导致更多的副作用和更低的可测试性。

答案 1 :(得分:0)

如果我假设Student是类的对象(引用类型),那么你不应该期望相同的行为,因为两者都是不同的东西。它还取决于你在方法中做了什么。

在第一种方法

void Main()
{
   Student student = new Student();
   FillStudentUnformation(student);
   Console.WriteLine(student.Name); // Here you will not get name
   FillStudentUnformationRef(ref student);
   Console.WriteLine(student.Name);    // you will see name you have set inside method.
}

vodi FillStudentUnformation(Student student)
{
   //If here if you do 
   student = new Student(); 
   student.Name = "test"; // This will not reflect outside.
}

vodi FillStudentUnformationRef(ref Student student)
{
   //If here if you do 
   student = new Student(); 
   student.Name = "test ref"; // This will not reflect outside.
}

因此,当我们将引用类型传递给方法时,它会将引用的副本传递给该变量。因此,当您使用new更新该变量时,它将更新该变量引用而不是实际引用。

在第二种方法中它会传递实际引用,所以当你更新它时会影响对象的实际引用。

更多内容:http://msdn.microsoft.com/en-IN/library/s6938f28.aspx