C#重载引用旧值的隐式转换
尽管我很确定我的问题可能没有解决办法,但我还是想尝试一下,并征求你们的意见 假设我有一个简单的类,比如C#重载引用旧值的隐式转换,c#,type-conversion,operator-overloading,implicit-conversion,C#,Type Conversion,Operator Overloading,Implicit Conversion,尽管我很确定我的问题可能没有解决办法,但我还是想尝试一下,并征求你们的意见 假设我有一个简单的类,比如 public class MyIntContainer { public int myIntValue; public bool randomOtherValue; public MyIntContainer(int value) { myIntValue = value; } } 现在我想简单地如下分配变量: MyIntContainer con
public class MyIntContainer
{
public int myIntValue;
public bool randomOtherValue;
public MyIntContainer(int value)
{
myIntValue = value;
}
}
现在我想简单地如下分配变量:
MyIntContainer container = 10;
MyIntContainer container = new MyIntContainer(10);
container.randomOtherValue = true;
container = 20;
因此,最简单的方法是向我的类中添加一个隐式转换运算符,如下所示
public static implicit operator MyIntContainer(int value)
{
return new MyIntContainer(value);
}
问题是:我想保留randomOther值,如果有的话。
所以如果我做这样的事情:
MyIntContainer container = 10;
MyIntContainer container = new MyIntContainer(10);
container.randomOtherValue = true;
container = 20;
我希望最新的容器变量具有myIntValue=20和randomOtherValue=true;
我似乎找不到任何方法来做这件事。只要我们能以任何方式使赋值运算符过载,这样的事情就有可能发生。我甚至想过给隐式操作符方法一个额外的“this MyIntContainer”参数,它可以引用赋值操作符之前声明的变量。但显然,这些都不起作用。
模仿这种行为有什么好办法吗
提前感谢,hline赋值运算符将值与旧值组合是没有意义的,这不是该符号的含义 但是,您可以重载
|
(逻辑OR),这可能表示值的组合(例如0x10 | 0x01
=0x11
)
测试:
输出:
20 true
是的,我明白你在赋值运算符上的意思。我现在面临的问题是,我想为int之类的东西提供一个“替代”类型。我想在赋值中保留的其他值由某种GUI处理。另一个用户应该能够像使用整数一样使用我的自定义类,这可以通过双向隐式转换实现。但是,是的,然后其他的值丢失了,这对GUI-tho非常重要。我自己一直使用|=没有问题,但其他用户可能有问题。这是一个非常可靠的选择,谢谢!