我知道ref的意思是,当方法返回时,引用所指向的对象可能完全不同。
然而,我喜欢ref修饰符的原因在于,开发人员可以立即了解到他所输入的内容在方法返回时可能会有所不同,因为调用方也需要使用ref修饰符。
接下来是一个来自一个假想ORM的简单方法:
任何调用该方法的人都可能不知道他们的实体是通过调用该方法更新的。然而,将someEntity作为ref参数,这表明开发人员提交的参数将是不同的,他们就知道要查看文档/代码以查找它如何更改,如果没有这个修饰符,他们可能从未想过这样做。
我知道这有点滥用ref修饰符,因为在上面的示例中实际上并不需要它,但是这样使用会给我带来任何问题吗?
然而,我喜欢ref修饰符的原因在于,开发人员可以立即了解到他所输入的内容在方法返回时可能会有所不同,因为调用方也需要使用ref修饰符。
接下来是一个来自一个假想ORM的简单方法:
public Boolean AddItem(Entity someEntity)
{
try
{
// Add item to database
// Get Id of entity back from database
someEntity.Id = *returnedId*;
return true;
}
catch (DBException ex)
{
return false;
}
}
任何调用该方法的人都可能不知道他们的实体是通过调用该方法更新的。然而,将someEntity作为ref参数,这表明开发人员提交的参数将是不同的,他们就知道要查看文档/代码以查找它如何更改,如果没有这个修饰符,他们可能从未想过这样做。
我知道这有点滥用ref修饰符,因为在上面的示例中实际上并不需要它,但是这样使用会给我带来任何问题吗?
AddItem
的作者想要告诉调用者嘿,我不会修改参数
,他会使用结构体作为参数。在 C++ 中,有一个const
修饰符可以确保参数不会被修改。为什么在 C# 中没有这个修饰符呢?这里有一个很好的解释:https://dev59.com/KXA75IYBdhLWcg3wf5NV - user2160375