有什么方法可以在将隐式转换从int重载到A
时获取操作左侧的实例?
像这样:
public class A
{
int myInt;
public static implicit operator A(int x)
{
a.myInt = x;
}
}
然后
A myA = new A();
myA = 2;
以便myA.myInt
为2
我在互联网上搜索但我找不到这个确切问题的答案。我不认为它是可能的,因为它是一个静态函数,如果你试图将两个参数放入函数中它会引发错误。此外,我可以看到,如果您尝试对空变量执行此操作会导致错误(例如,如果我已将其声明为此A myA;
)。但是你可以在一个结构中做到这一点(因为据我所知,结构不能为空 - 或者不能指定为null - 如果我错了,请纠正我。)
我只是想知道是否有某种魔法可以做这样的工作。
答案 0 :(得分:4)
您无法获得对myA.myInt
或任何其他左侧的引用,因为它并非总是存在。
以下是确定左侧存在问题的示例:
void Foo(A a) {...}
...
Foo(2);
在上面,调用Foo(2)
需要调用隐式转换运算符,但其返回值不会分配给Foo
的{{1}}参数以外的任何值,这不是一个变量在来电者中可用。
答案 1 :(得分:3)
这是不可能的。隐式运算符返回一个值。它是由C#编译器生成的代码,它调用该代码来获取值,并以调用者指示它应该使用的任何方式使用它。
值得注意的是,甚至可能 存储位置。如果有人写SomeMethodThatAcceptsAnAInstance(2)
,那么您不会将隐式转换的结果存储在变量中。您还可以编写A a = 2;
a
是未初始化的变量,直到将隐式运算符的值设置为它,因此存储位置在隐式运算符为时没有有效状态调用。