Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择使用哪个模糊的用户定义转换运算符的C#语法是什么?_C#_Type Conversion_Operator Overloading - Fatal编程技术网

选择使用哪个模糊的用户定义转换运算符的C#语法是什么?

选择使用哪个模糊的用户定义转换运算符的C#语法是什么?,c#,type-conversion,operator-overloading,C#,Type Conversion,Operator Overloading,在C#中,如果存在不明确的用户定义的转换运算符,是否可以从调用站点选择其中一个 考虑这个例子(类似于和中的例子) 使用系统; 静态类程序{ 甲级{ 静态公共显式运算符A(B值){ 控制台。写入线(“A”); 返回新的A(); } } B类{ 静态公共显式运算符A(B值){ 控制台。写入线(“B”); 返回新的A(); } } 公共静态void Main(){ A=(A)新的B(); } } 。这是一个理论上的问题(实际的解决方案不是使用模棱两可的转换运算符),但是在调用站点是否有一些特殊的语法

在C#中,如果存在不明确的用户定义的转换运算符,是否可以从调用站点选择其中一个

考虑这个例子(类似于和中的例子)

使用系统;
静态类程序{
甲级{
静态公共显式运算符A(B值){
控制台。写入线(“A”);
返回新的A();
}
}
B类{
静态公共显式运算符A(B值){
控制台。写入线(“B”);
返回新的A();
}
}
公共静态void Main(){
A=(A)新的B();
}
}
。这是一个理论上的问题(实际的解决方案不是使用模棱两可的转换运算符),但是在调用站点是否有一些特殊的语法来专门调用其中一个(通过编辑
(a)new B()
)?还是不可能并强制重写类?

说明:

  • 如果U正好包含一个从SX转换为TX的用户定义转换运算符,则这是最具体的转换运算符
  • 否则,如果U正好包含一个从SX转换为TX的提升转换运算符,则这是最具体的转换运算符
  • 否则,转换不明确,会发生编译时错误。

因此,基本上这是无效代码,编译器将拒绝接受它。

如果可能,我不知道如何做到这一点。但我对这些问题的看法一直是,编译器应该只为double(或triple)X-to-Y运算符抛出一个警告。