我正在编写运行用户定义算法的应用程序。我想跟踪所使用的变量,因此我创建了类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);
}
但是你可能已经注意到我使用" name"识别不同的电视节目。现在,我创建了新的TVar var1,并将其命名为#34;首先是var",用它做一些事情(Tracker接收信息),当我将var1更改为其他int时,它会丢失它的名字(因为我返回新的TVar,而不是实际的那个)请帮助!
答案 0 :(得分:3)
它不会按照您希望的方式工作,因为当您定义隐式转换运算符时,您无法从运算符体内访问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, ...);
}