C# 在C语言中如何正确地自动更新一对多的双向关系#
在示例游戏引擎服务器中,游戏世界可以由世界对象表示。游戏可能有多个游戏世界,一个玩家在一个世界中只需要接收该世界中单位的位置数据C# 在C语言中如何正确地自动更新一对多的双向关系#,c#,game-engine,bidirectional-relation,C#,Game Engine,Bidirectional Relation,在示例游戏引擎服务器中,游戏世界可以由世界对象表示。游戏可能有多个游戏世界,一个玩家在一个世界中只需要接收该世界中单位的位置数据 class World { public List<Unit> Units { get; set; } } 这适用于查找,但当程序员不知道对象之间的关系时,更改数据很快就会出现问题,因此我将World中的Units更改为只读,并在Unit中包含以下代码 public virtual World World { get { return _
class World
{
public List<Unit> Units { get; set; }
}
这适用于查找,但当程序员不知道对象之间的关系时,更改数据很快就会出现问题,因此我将World
中的Units
更改为只读,并在Unit
中包含以下代码
public virtual World World
{
get { return _world; }
set
{
// Unit must always be in a world
Contract.Requires<ArgumentNullException>(value != null);
// If already this, don't do anything
if (value == _world) return;
var oldWorld = _world;
_world = value;
if(oldWorld != null) oldWorld.UpdateUnitEntry(this);
_world.UpdateUnitEntry(this);
}
}
公共虚拟世界
{
获取{return\u world;}
设置
{
//单位必须永远在一个世界里
Contract.Requires(值!=null);
//如果已经这样了,什么都不要做
如果(值==_world)返回;
var oldWorld=_world;
_世界=价值;
如果(oldWorld!=null)oldWorld.UpdateUnitEntry(此);
_world.UpdateUnitEntry(本);
}
}
这是可行的,但感觉有更好的方法。特别是当我添加更多需要以相同方式链接的内容时(一个
World
也有Structure
s和Player
s),大量重复的功能出现了。有没有一种更好的方法来实现这种一对多关系,而不需要手动更新两个方面?public virtual World World
{
get { return _world; }
set
{
// Unit must always be in a world
Contract.Requires<ArgumentNullException>(value != null);
// If already this, don't do anything
if (value == _world) return;
var oldWorld = _world;
_world = value;
if(oldWorld != null) oldWorld.UpdateUnitEntry(this);
_world.UpdateUnitEntry(this);
}
}