【发布时间】:2011-01-16 09:39:07
【问题描述】:
我在我正在开发的 C# 游戏中创建了一个实用程序调试类,以便能够监视和观察属性值。是这样的:
public static class Monitor
{
private static List<object> monitoredObjects;
public static void Initialize()
{
monitoredObjects = new List<object>();
}
public static void Watch(object o)
{
monitoredObjects.Add(o);
}
public static void Unwatch(object o)
{
monitoredObjects.Remove(o);
}
public static void Draw(RenderWindow app)
{
//Not actual code, I actually draw this in game
foreach (object o in monitoredObjects)
Console.WriteLine(o.ToString());
}
}
public class Property
{
private object obj;
private PropertyInfo propertyInfo;
public override string ToString()
{
return propertyInfo.Name + ": " + propertyInfo.GetValue(obj, null).ToString();
}
public Property(object o, string property)
{
obj = o;
propertyInfo = o.GetType().GetProperty(property);
}
}
现在为了监控一个属性,比如我的游戏的 FPS,我必须这样做
Monitor.Watch(new Property(Game, "FPS"));
难道没有办法让它更易于使用吗?理想情况下,我希望能够做到
Monitor.Watch(Game.FPS);
但由于我们不能在 C# 中使用store pointers to value types,所以我不知道该怎么做。也许使用闭包和lambda表达式?早些时候有人建议我这样做,但我不知道该怎么做。还有其他方法可以改善吗?
谢谢
【问题讨论】:
标签: c# reflection properties closures