对隐式转换运算符左侧的引用
Reference to left hand side on implicit cast operator
有没有办法在重载从 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 - 或者不能被分配为 null - 如果我错了请纠正我)。
我只是想知道是否有某种魔法可以让我做这样的事情。
这是不可能的。隐式运算符 returns 一个值。它是由 C# 编译器生成的代码,调用该代码以获取值并以调用者指示应使用它的任何方式使用它。
值得注意的是,甚至可能 没有存储位置。如果有人写 SomeMethodThatAcceptsAnAInstance(2)
那么您就没有将隐式转换的结果存储在变量中。您还可以编写 A a = 2;
,其中 a
是一个未初始化的变量,直到隐式运算符的值被设置为它,因此存储位置在调用隐式运算符时没有有效状态。
您无法获得对 myA.myInt
或任何其他左侧的引用,因为它并不总是存在。
这里是确定左侧有问题的示例:
void Foo(A a) {...}
...
Foo(2);
以上,调用 Foo(2)
需要调用您的隐式转换运算符,但它的 return 值未分配给 Foo
的 a
参数以外的任何参数,该参数不是调用方可用的变量。
有没有办法在重载从 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 - 或者不能被分配为 null - 如果我错了请纠正我)。
我只是想知道是否有某种魔法可以让我做这样的事情。
这是不可能的。隐式运算符 returns 一个值。它是由 C# 编译器生成的代码,调用该代码以获取值并以调用者指示应使用它的任何方式使用它。
值得注意的是,甚至可能 没有存储位置。如果有人写 SomeMethodThatAcceptsAnAInstance(2)
那么您就没有将隐式转换的结果存储在变量中。您还可以编写 A a = 2;
,其中 a
是一个未初始化的变量,直到隐式运算符的值被设置为它,因此存储位置在调用隐式运算符时没有有效状态。
您无法获得对 myA.myInt
或任何其他左侧的引用,因为它并不总是存在。
这里是确定左侧有问题的示例:
void Foo(A a) {...}
...
Foo(2);
以上,调用 Foo(2)
需要调用您的隐式转换运算符,但它的 return 值未分配给 Foo
的 a
参数以外的任何参数,该参数不是调用方可用的变量。