当前位置: 首页 > news >正文

【C#】explicit、implicit与operator

字面解释

explicit:清楚明白的;易于理解的;(说话)清晰的,明确的;直言的;坦率的;直截了当的;不隐晦的;不含糊的。

implicit:含蓄的;不直接言明的;成为一部分的;内含的;完全的;无疑问的。

operator:操作人员;技工;电话员;接线员;(某企业的)经营者,专业公司。

专业解释

explicit用于强制转换,implicit用于隐式转换

用法

public static 返回的结果类型 operator unary-operator (参数类型 param)
unary-operator:+ - ! ~ ++ — true false
public static 返回的结果类型 operator binary-operator (参数类型 param1, 参数类型 param)
binary-operator:+ - * / % & | ^ << >> == != > < >= <=
public static implicit operator 返回的结果类型 (参数类型 param )
public static explicit operator 返回的结果类型 (参数类型 param )

explicit、implicit都是与operator一起操作使用的,operator 关键字用于在类或结构声明中声明运算符。

示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConversionOperator
{public class IntDouble{private readonly int intV;private readonly double doubleV;public IntDouble(int value) : this(value, 0){}public IntDouble(double value) : this(0, value){}public IntDouble(int intV, double doubleV){this.intV = intV;this.doubleV = doubleV;}//将IntDouble类型隐式转为int类型,返回int类型public static implicit operator int(IntDouble intdouble){return intdouble.intV;}//将IntDouble类型显式转为double类型,返回double类型public static explicit operator double(IntDouble intdouble){return intdouble.doubleV;}//将int类型隐式转化为IntDoublepublic static implicit operator IntDouble(int intdouble){return new IntDouble(intdouble);}//将double类型显式转化为IntDoublepublic static explicit operator IntDouble(double intdouble){return new IntDouble(intdouble);}public static IntDouble operator ++(IntDouble intdouble){var t = intdouble.intV + 1;var t2 = intdouble.doubleV + 1;var temp = new IntDouble(t, t2);return temp;}public override string ToString(){return $"intV:{intV},doubleV:{doubleV}";}}internal class Program{static void Main(string[] args){IntDouble doubleV = (IntDouble)2.1;Console.WriteLine($"原始数据:{doubleV}");doubleV++;//此处IntDouble显示转为double类型double c = (double)doubleV;//此处IntDouble隐示转为int类型int c2 = doubleV;Console.WriteLine($"int的值:{c2},double的值:{c}");Console.WriteLine($"{doubleV}");Console.ReadKey();}}
}

结果

http://www.lryc.cn/news/423272.html

相关文章:

  • Vue:Vuex-Store使用指南
  • 对经典动态规划问题【爬台阶】的一些思考
  • 开发一个能打造虚拟带货直播间的工具!
  • 汽车补光照明实验太阳光模拟器光源
  • MediaPipe人体姿态、手指关键点检测
  • 树上dp之换根dp
  • 2024/8/13 英语每日一段
  • Java多线程练习(1)
  • AI高级肖像动画神器LivePortrait
  • Java反射机制深度解析与实践应用
  • Oracle递归查询层级及路径
  • leetcode300. 最长递增子序列,动态规划附状态转移方程
  • C语言:字符串函数strcpy
  • Day16-指针2
  • 数据结构(5.5_3)——并查集的进一步优化
  • (回溯) LeetCode 131. 分割回文串
  • 【Linux】阻塞信号|信号原理|深入理解捕获信号|内核态|用户态|sigaction|可重入函数|volatile|SIGCHILD|万字详解
  • 基于Linux对 【进程地址空间】的详细讲解
  • [python]使用Pandas处理多个Excel文件并汇总数据
  • 提升体验:UI设计的可用性原则
  • x264 编码器 SSIM 算法源码分析
  • echarts使图表组件根据屏幕尺寸变更而重新渲染大小
  • 电脑图片损坏打不开怎么办?能修复吗?
  • vue-cli(二)
  • 今日头条的账号id在哪里看(网页版)
  • 单体应用提高性能和高并发处理-合理使用多核处理
  • 基于STM32/GD32的双CAN、一路485开发板
  • 快排/堆排/归并/冒泡/
  • React基础教程(08):state体验
  • Win10 创建新的桌面2,并实现桌面切换