正如标题所说"从类中发送实例与通过ref发送实例具有相同的效果"
例如
FillStudentInformation(student);
具有相同的效果
FillStudentInformation(ref student);
我是否希望通过此调用以相同的方式更改这两个实例。
注意:FillStudentUnformation是一个void方法
答案 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更新该变量时,它将更新该变量引用而不是实际引用。
在第二种方法中它会传递实际引用,所以当你更新它时会影响对象的实际引用。