隐式setter重置其他值

时间:2014-01-17 12:23:34

标签: c# operator-overloading implicit

我有一个包含两个双变量的类。并添加了隐式运算符。

public class MyClass
{
     public double A { get; set; }
     public double B { get; set; }

     static public implicit operator MyClass(double value)
     {
         return new MyClass{ A = value };
     }

     static public implicit operator double(MyClass classObject)
     {
         return classObject.A;
     }
}

我想要的是,当我指定一个double值时,它会设置一个MyClass对象。当我得到一个double值时,它返回一个MyClass对象。

1. var taget = new MyClass { A = 1.0, B = 2.0 };
2. target = 3.0;
3. double ValA = target;
4. double ValB = target.B;

在这个代码示例中,我创建了一个对象,分配了A和B.现在在第2行,我想要target.A设置为3,但B值仍然保持为2.但是行号2重置了B值。所以在代码执行之后ValA有3.0(如预期的那样),但ValB有0.0。

我应该怎样做才能保持原有价值?

1 个答案:

答案 0 :(得分:0)

您正在此处更改目标变量:

target = 3.0;

因为您的强制转换操作符返回一个新对象:

return new MyClass{ A = value };

您不会更改原始目标对象,而是在目标变量中指定一个全新的对象。你无法以这种方式做你想做的事。

您希望将数字转换为MyClass对象,还要“保留”此转换中根本未使用的另一个MyClass对象的值。