我有一个可能为null的对象,我将传递给一个将设置其属性的方法。
所以我的代码如下:
User user = null; // may or may not be null at this point.
SetUserProperties(user);
UpdateUser(user);
public void SetUserProperties(User user)
{
if(user == null)
user = new User();
user.Firstname = "blah";
....
}
所以我正在更新传递给SetUserProperties的同一个对象。
我应该在我的SetUserProperties方法中使用'ref'关键字吗?
答案 0 :(得分:5)
我认为'ref'符合你在这里想要做的更好的语义。
但是,如果可能的话,我会尽量避免使用'out'和'ref'关键字。
这是否符合您的需求?它没有使用它,并且它在做什么,IMO更清楚。
user = user ?? new User();
SetUserProperties(user);
UpdateUser(user);
答案 1 :(得分:5)
了解对象与变量之间的区别非常重要:
ref
或out
ref
而不是out
。如果您将其更改为out
参数,则您的if
语句将无法编译,因为在方法开头不会明确分配user
。我个人并不确定这是一个不错的设计。你确定是否有意义创建新对象的方法?你不能在通话现场这样做吗?感觉有点尴尬。
使用ref
(但仍可能在方法中创建新用户)的另一种方法是返回适当的引用:
user = SetUserProperties(user);
...
public User SetUserProperties(User user)
{
if(user == null)
{
user = new User();
}
user.Firstname = "blah";
....
return user;
}
答案 2 :(得分:0)
您将使用ref,因为您有 potential 将变量指向内存中的新对象。如果您用完了,则必需来更改用户。
答案 3 :(得分:0)
ref
=您希望函数具有对象的句柄,可能“将其重定向到内存中的另一个位置”(即将其设置为不同的实例)对象类型)
out
=您要求方法“将其重定向到内存中的其他位置”
答案 4 :(得分:-1)
是的,您应该使用ref
。 out
关键字用于未初始化的变量,但这不是这种情况。