首页
学习
活动
专区
圈层
工具
发布

c#隐算子
EN

Stack Overflow用户
提问于 2014-04-13 01:22:55
回答 1查看 333关注 0票数 1

我正在编写一个运行用户定义算法的应用程序。我想要跟踪使用的变量,所以我创建了类TVar,当事件被修改或查看时会引发事件。我已经做了

代码语言:javascript
复制
public static implicit operator int(TVar v)
{
    Tracker.Track(v.name, EventType.Variable, EventAction.Peek, v.var);
    return (int)v.var;
}

现在我想知道什么时候用户更改了值,并且

代码语言:javascript
复制
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)--请帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-13 13:55:27

这将不能按您希望的方式工作,因为当定义隐式转换运算符时,您不能从运算符体内访问l值。根据定义,赋值总是丢弃变量所引用的值(如果有的话)。

代码语言:javascript
复制
TVar foo = new TVar("Foo", 13);
foo = 42;

在第一行foo被初始化之后,它引用了TVar的一个实例。但是第二行丢弃foo的旧值,并将其替换为另一个TVar实例。

实现所需的唯一方法是使实例(非静态)方法TVar.Assign(int)

代码语言:javascript
复制
public void Assign(int value)
{
    this.Value = value;
    Tracker.Track(this.Name, ...);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23038058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档