C#:在构造函数中通过引用传递或通过更新循环作为参数传递?
我有一个对象,我需要更新的数据从每次更新的游戏循环(在C#)。将对象传递给执行更新循环的对象的构造函数会更好吗,以便引用始终具有最新对象C#:在构造函数中通过引用传递或通过更新循环作为参数传递?
或者我应该将它作为参数正常传递到更新方法(每次更新都被调用)?
所以这是一个构造函数:
public UpdatingObject(ref DataObject dataObject)
或以此为更新循环头(通过按值默认):
public void Update(DataObject dataObject)
通过引用传递,当您需要,即,当您需要重新分配引用时引用不同的对象:
void ByRef(ref object o)
{
o = new object();
}
如果方法保证设置为o
然后将其作为out
参数传递。
默认语义(通过引用的副本传递)适用于大多数的需求为您通常只在对象上修改的字段/属性。
如果参数是值类型,那么你就需要使用ref
变异参数的方式,调用者会看到。
我的问题是;你为什么要改变一个构造函数的参数?对我来说似乎有点奇怪。
通过将参数改变为构造函数,你的意思是什么?我想将参数传递给构造函数,使其成为可以通过Update方法访问的类变量。争论的任何突变都会在其他课程中完成。这个类只需要能够从参数中获取数据。 –
@BlakeThiessen:那么你根本不需要使用'ref';简单地拿一份参考资料,你会没事的。 –
通过引用传递时,你必须。
但是,你能够做到在您的数据对象类定义更新方法和定义另一个复合类来执行更新?类似的东西。
public class DataObject
{
public void Update()
{
// define your update method.
}
}
哦,DataObject已经在一个单独的复合类中更新了。我只是认为我必须通过引用专门将DataObject传递到UpdatingObject中(因为它包含之后直接提到的Update方法,所以我很差地命名了UpdatingObject),因为我认为DataObject可能只是DataObject的“快照”实例,不会包含对象传递后的更改。但是因为我理解类引用是通过值传递的,所以我知道我不需要不断地将更新版本的DataObject传递到UpdatingObject中。 –
如果对象是一个引用类型的实例(即,类,而不是结构)则不应使用ref关键字。 – phoog
@phoog:我可以想象一个场景,其中可能会设置'ref'参数,但可能不会。在这种情况下,您将不得不使用'ref'作为'out'不起作用。你说得对,这将是一种罕见的情况。 –
@Ed S.什么,我想说的是,像这里需要既不裁判也没有出关键字问题的描述听起来对我来说,除非有问题的对象是值类型。尽管如此,很难说没有更完整的代码示例。 – phoog