explicit和implicit的含义


Posted in 面试题 onNovember 15, 2012
explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换
explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)
implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)
隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端
示例:
using System;
using System.Collections.Generic;
using System.Text;
namespace Example23
{
class Program
{
//本例灵感来源于大话西游经典台词“神仙?妖怪?”–主要是我实在想不出什么好例子了
class Immortal
{
public string name;
public Immortal(string Name)
{
name = Name;
}
public static implicit operator Monster(Immortal value)
{
return new Monster(value.name + “:神仙变妖怪?偷偷下凡即可。。。”);
}
}
class Monster
{
public string name;
public Monster(string Name)
{
name = Name;
}
public static explicit operator Immortal(Monster value)
{
return new Immortal(value.name + “:妖怪想当神仙?再去修炼五百年!”);
}
}
static void Main(string[] args)
{
Immortal tmpImmortal = new Immortal(“紫霞仙子”);
//隐式转换
Monster tmpObj1 = tmpImmortal;
Console.WriteLine(tmpObj1.name);
Monster tmpMonster = new Monster(“孙悟空”);
//显式转换
Immortal tmpObj2 = (Immortal)tmpMonster;
Console.WriteLine(tmpObj2.name);
Console.ReadLine();
}
}
}
结果:
紫霞仙子:神仙变妖怪?偷偷下凡即可。。。
孙悟空:妖怪想当神仙?再去修炼五百年!

Tags in this post...

面试题 相关文章推荐
上海方立数码笔试题
Oct 18 面试题
c/c++某大公司的两道笔试题
Feb 02 面试题
介绍一下SQL Server里面的索引视图
Jul 31 面试题
如何在Oracle中查看各个表、表空间占用空间的大小
Oct 31 面试题
数据库什么时候应该被重组
Nov 02 面试题
如何实现一个自定义类的序列化
May 22 面试题
关于.NET, HTML的五个问题
Aug 29 面试题
了解AppleTalk协议吗
Apr 01 面试题
params有什么用
Mar 01 面试题
什么是测试驱动开发(TDD)
Feb 15 面试题
介绍一下RMI的基本概念
Dec 17 面试题
用Python写一个for循环的例子
Jul 19 面试题
C#如何调用Word并打开一个Word文档
May 08 #面试题
C# .NET面试题
Nov 28 #面试题
初级软件工程师面试题 Junior Software Engineer Interview
Feb 15 #面试题
params有什么用
Mar 01 #面试题
Does C# support multiple inheritance? (C#支持多重继承吗)
Jan 04 #面试题
西安当代医院管理研究院笔试题
Dec 11 #面试题
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
Oct 29 #面试题
You might like
PHP5中MVC结构学习
2006/10/09 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
Node.js编码规范
2014/07/14 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
纯JS实现简单的日历
2017/06/26 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
nodejs多版本管理总结
2018/04/03 NodeJs
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
Node.js事件的正确使用方法
2019/04/05 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
node中使用shell脚本的方法步骤
2021/03/23 Javascript
优秀应届毕业生推荐信
2014/02/18 职场文书
工作会议方案
2014/05/21 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
质量保证书怎么写
2015/02/27 职场文书
教师节获奖感言
2015/07/31 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
MySQL开启事务的方式
2021/06/26 MySQL
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server