c# - 选择使用哪个模棱两可的用户定义转换运算符的 C# 语法是什么?
问题描述
在 C# 中,如果有不明确的用户定义转换运算符,可以从调用站点中选择其中一个吗?
考虑这个例子(类似于从 X 转换为 Y 时在 .NET中的不明确的用户定义的转换和不明确的用户定义的转换中的示例。C# .Net )
using System;
static class Program {
class A {
static public explicit operator A(B value) {
Console.WriteLine("A");
return new A();
}
}
class B {
static public explicit operator A(B value) {
Console.WriteLine("B");
return new A();
}
}
public static void Main() {
A a = (A)new B();
}
}
如果其中一个运算符被注释掉,代码将编译。这是一个理论上的问题(实际的解决方案是不要有模棱两可的转换运算符),但是调用站点是否有一些特殊的语法可以专门调用其中一个(通过编辑(A)new B()
)?还是不可能并强制重写课程?
解决方案
C# 语言规范是这样说的:
- 如果 U 恰好包含一个用户定义的从 SX 转换为 TX 的转换运算符,那么这是最具体的转换运算符。
- 否则,如果 U 恰好包含一个从 SX 转换为 TX 的提升转换运算符,那么这是最具体的转换运算符。
- 否则,转换不明确并出现编译时错误。
所以,基本上这是无效的代码,编译器会拒绝接受它。
推荐阅读
- r - 获取残差的散点图矩阵
- feathersjs - 为什么feathersjs mongoose 服务在get() 方法中返回不同的“总计”?
- impress.js - 在演示序列中多次使用同一张幻灯片
- qt - QFileSystemModel::setRootPath 行为似乎与文档不匹配
- arduino - 通过 SPI 从 SD 卡读取时出现问题
- android - 使用 Okhttp 的验证器(以及 RetroFit、RxJava 和 Dagger2)实现全局强制注销
- python - Python Selenium 动态表格单元格返回空字符串
- r - 如何修复getGEO函数中的错误?
- php - 缺少 $_SERVER['HTTP_AUTHORIZATION']
- c - C 未定义对 InetPtonW 的引用