J. *_*Doe 2 c# type-conversion
我有以下代码:
class Program
{
static void Main(string[] args)
{
Console.WriteLine((Program)3);
Console.WriteLine("Execution complete.");
Console.Read();
}
public static implicit operator Program(int asd)
{ return 10; }
}
Run Code Online (Sandbox Code Playgroud)
它在最后一行({ return 10; })引发StackOverflow异常。我不知道为什么,因为堆栈上应该有足够的空间来存放所有内容。
我正在学习operator关键字和隐式/显式转换,因此我制作了这个小例子来测试一些内容。
堆栈溢出是由以下方法导致的:
public static implicit operator Program(int asd)
{ return 10; }
Run Code Online (Sandbox Code Playgroud)
为什么此方法会无限调用自身?好的,此方法定义了从int到的隐式转换Program,因此您应该返回Program给定被int调用的实例asd。但是,您返回int。通常,这会失败,但是由于您定义了从int到的隐式转换Program,编译器会“很好,就可以了”。
但在运行时,它会尝试你转换10到一个Program,再次调用隐式转换方法。隐式转换方法返回a 10,运行时会尝试将其Program再次隐式转换为,因此它再次调用该方法...
我真的看不到您要在这里做什么,所以我不知道该问题的解决方案。
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |