我正在编写一个运行用户定义算法的应用程序。我想要跟踪使用的变量,所以我创建了类TVar,当事件被修改或查看时会引发事件。我已经做了
public static implicit operator int(TVar v)
{
Tracker.Track(v.name, EventType.Variable, EventAction.Peek, v.var);
return (int)v.var;
}现在我想知道什么时候用户更改了值,并且
public static implicit operator TVar(int i)
{
Tracker.Track(/* I need TVar.Name here */, EventType.Variable, EventAction.Change, i);
return new TVar(i);
}但正如您可能已经注意到的,我使用“名称”来标识不同的TVars。现在,我创建了新的TVar var1并将其命名为"first var",使用它做一些事情(跟踪器接收信息),当我将var1更改为其他int时,它会丢失它的名称(因为我返回了新的TVar,而不是实际的TVar)--请帮助!
发布于 2014-04-13 13:55:27
这将不能按您希望的方式工作,因为当定义隐式转换运算符时,您不能从运算符体内访问l值。根据定义,赋值总是丢弃变量所引用的值(如果有的话)。
TVar foo = new TVar("Foo", 13);
foo = 42;在第一行foo被初始化之后,它引用了TVar的一个实例。但是第二行丢弃foo的旧值,并将其替换为另一个TVar实例。
实现所需的唯一方法是使实例(非静态)方法TVar.Assign(int)。
public void Assign(int value)
{
this.Value = value;
Tracker.Track(this.Name, ...);
}https://stackoverflow.com/questions/23038058
复制相似问题