这是我的班级:
public class UserInformation { public string Username { get; set; } public string ComputerName { get; set; } public string Workgroup { get; set; } public string OperatingSystem { get; set; } public string Processor { get; set; } public string RAM { get; set; } public string IPAddress { get; set; } public UserInformation GetUserInformation() { var CompleteInformation = new UserInformation(); GetPersonalDetails(ref CompleteInformation); GetMachineDetails(ref CompleteInformation); return CompleteInformation; } private void GetPersonalDetails(ref UserInformation CompleteInformation) { } private void GetMachineDetails(ref UserInformation CompleteInformation) { } }
我的印象是ref关键字告诉计算机使用相同的变量而不是创建一个新变量.
我正确使用它吗?我是否必须在调用代码行和实际方法实现上使用ref?
当您将引用类型(在您的情况下,您的UserInformation
类是引用类型)作为参数传递时,默认情况下您将指针传递给类的值,这意味着GetPersonalDetails
它将获得自己的指针副本,该指针指向相同的UserInformation
班级的实例.
ref
在示例中使用关键字会将指向UserInformation
实例的相同指针传递给方法.
所以你的情况,如果你的目的是简单修改的属性UserInformation
时,ref
在不需要的关键字,因为你会被修改,从实际情况GetPersonalDetails
和GetMachineDetails
.但是,如果您的目的是UserInformation
从这些方法中实例化一个新对象或将实例设置为null,则需要使用该ref
关键字.
Jon Skeet在解释本文中的参数传递方面做得很好.