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...

面试题 相关文章推荐
垃圾回收的优点和原理。并考虑2种回收机制
Oct 16 面试题
serialVersionUID具有什么样的特征
Feb 20 面试题
什么是Assembly(程序集)
Sep 14 面试题
一篇.NET面试题
Sep 29 面试题
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
Nov 20 面试题
什么是反射
Mar 17 面试题
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
Jun 27 面试题
传统软件工程与面向对象的软件工程有什么区别
May 31 面试题
GWT的应用有哪两种部署模式
Dec 21 面试题
如何用Java判断一个文件或目录是否存在
Nov 19 面试题
值传递还是引用传递
Feb 08 面试题
史上最全面的Java面试题汇总!
Feb 03 面试题
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
PHP截取中文字符串的问题
2006/07/12 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
解析php中curl_multi的应用
2013/07/17 PHP
php header功能的使用
2013/10/28 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
Javascript表达式中连续的 && 和 || 之赋值区别
2010/10/17 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
Python基于requests库爬取网站信息
2020/03/02 Python
基于Python的OCR实现示例
2020/04/03 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
python递归函数用法详解
2020/10/26 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
计算机本科生自荐信
2013/10/15 职场文书
校长岗位职责
2013/11/26 职场文书
师生聚会感言
2014/01/26 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
vue如何清除浏览器历史栈
2022/05/25 Vue.js