C# 在.NET中,当实现隐式转换运算符时,是否可以访问分配给的对象?

C# 在.NET中,当实现隐式转换运算符时,是否可以访问分配给的对象?,c#,casting,operators,operator-overloading,implicit-conversion,C#,Casting,Operators,Operator Overloading,Implicit Conversion,例如,如果我有一个对象,例如: public class MyObject { public MyObject(int initialValue) { this.InitialValue = initialValue; this.CurrentValue = initialValue; } public int InitialValue { get; set; } public int CurrentValue { ge

例如,如果我有一个对象,例如:

public class MyObject
{
    public MyObject(int initialValue)
    {
        this.InitialValue = initialValue;
        this.CurrentValue = initialValue;
    }

    public int InitialValue { get; set; }

    public int CurrentValue { get; set; }

    public static implicit operator MyObject(int someValue)
    {
        MyObject result = new MyObject(someValue);
        return result;
    }
}
在隐式转换中,如果存在初始值,是否可以保留初始值,并且只更新当前值

这样做的想法是:

MyObject test = 4; // Both InitialValue and CurrentValue are now 4.
test = 5; // InitialValue is 4 but CurrentValue is now 5.
SomeFunction(5);
这是一个远大的目标,我认为这是不可能的,但如果有任何人有任何辉煌的想法来实现这一点,我将不胜感激


谢谢

您可以在不进行任何赋值的情况下进行施法。其中一个例子是调用函数时:

void SomeFunction(MyObject passedValue) { /* ... */ }
可以通过您的隐式cast调用,如下所示:

MyObject test = 4; // Both InitialValue and CurrentValue are now 4.
test = 5; // InitialValue is 4 but CurrentValue is now 5.
SomeFunction(5);
而且没有任务发生


即使指定发生,也要记住指定给变量,而不是对象。从某种意义上说,您在本例中请求的对象实际上是
结果
变量。

您可以在不进行任何赋值的情况下强制转换。其中一个例子是调用函数时:

void SomeFunction(MyObject passedValue) { /* ... */ }
可以通过您的隐式cast调用,如下所示:

MyObject test = 4; // Both InitialValue and CurrentValue are now 4.
test = 5; // InitialValue is 4 but CurrentValue is now 5.
SomeFunction(5);
而且没有任务发生


即使指定发生,也要记住指定给变量,而不是对象。从某种意义上说,您在本例中请求的对象实际上是
结果
变量。

否,因为转换运算符总是创建一个新对象(它没有对目标对象的任何引用),并且赋值运算符不能被重写。您可以做的是牺牲语法,转而使用
MyObject.Set(ref MyObject target,int value)
静态方法(也可以使用扩展方法来实现)。这是一个有趣的想法,但我认为这样的操作符是不可能的。这可能需要
MyObject
类上的一个方法来更新特定实例的值,并且该方法将旧值保留为该实例中的状态。(这个方法确实可以是一个属性的setter,让它更透明一些。)谢谢,我也这么想,但我想在任何情况下我都会问一下。不,因为转换操作符总是创建一个新对象(它没有任何对目标对象的引用),赋值操作符不能被重写。您可以做的是牺牲语法,转而使用
MyObject.Set(ref MyObject target,int value)
静态方法(也可以使用扩展方法来实现)。这是一个有趣的想法,但我认为这样的操作符是不可能的。这可能需要
MyObject
类上的一个方法来更新特定实例的值,并且该方法将旧值保留为该实例中的状态。(这个方法确实可以是一个属性的setter,使其更加透明。)谢谢,我也这么想了,但我想无论如何我都会四处询问。