在隐式转换运算符上引用左侧

问题描述 投票:0回答:2

有什么方法可以在将一个隐式转换从int重载到A时获得操作左侧的实例?

像这样:

public class A
{
    int myInt;
    public static implicit operator A(int x)
    {
        a.myInt = x;
    }
}

然后

A myA = new A();
myA = 2;

所以myA.myInt2

我在互联网上搜索,但我找不到这个确切问题的答案。我不认为它是可能的,因为它是一个静态函数,如果你试图将两个参数放入函数中它会引发错误。此外,我可以看到,如果你试图在一个null变量上做这个会给你一个错误(就像我已经宣布它像这个A myA;)。但是你可以在一个结构中做到这一点(因为据我所知,结构不能为空 - 或者不能指定为null - 如果我错了,请纠正我)。

我只是想知道是否有某种巫术我可以做这样的工作。

c# operators implicit-conversion
2个回答
4
投票

你不能得到myA.myInt或任何其他左侧的参考,因为它并不总是存在。

以下是确定左侧存在问题的示例:

void Foo(A a) {...}
...
Foo(2);

在上面,调用Foo(2)需要调用隐式转换运算符,但其返回值不会分配给Fooa参数以外的任何值,该参数不是调用者可用的变量。

Demo.


3
投票

这是不可能的。隐式运算符返回一个值。它是由C#编译器生成的代码,它调用该代码来获取值,并以调用者指示它应该使用的任何方式使用它。

值得注意的是,甚至可能没有存储位置。如果有人写SomeMethodThatAcceptsAnAInstance(2),那么你不会将隐式转换的结果存储在变量中。您还可以编写A a = 2;,其中a是一个未初始化的变量,直到隐式运算符的值设置为它,因此存储位置在调用隐式运算符时没有有效状态。

© www.soinside.com 2019 - 2024. All rights reserved.