1.重载转换运算符

到目前为止,我们使用的类型转换,包括隐式类型转换和显示类型转换都是在两个相关的类中进行的,这几个类要么是简单类型之间的转换,比如int 隐式转换成double,要么是有继承关系,或者是实现了接口。假如我们要在两个不相关的类之间进行转换,可以重载转换运算符。

    class ConvClass1
{
public int Val; /// <summary>
/// 定义ConvClass2隐式转换为ConvClass2的方式
/// </summary>
/// <param name="c1"></param>
/// <returns></returns>
public static implicit operator ConvClass2(ConvClass1 c1)
{
ConvClass2 c = new ConvClass2();
c.Val = c1.Val;
return c;
}
} class ConvClass2
{
public double Val; /// <summary>
/// 定义ConvClass2显示式转换为ConvClass1的方式
/// </summary>
/// <param name="c1"></param>
/// <returns></returns>
public static explicit operator ConvClass1(ConvClass2 c1)
{
ConvClass1 c = new ConvClass1();
checked { c.Val = (int)c1.Val; }
return c;
}
} class Program
{ static void Main(string[] args)
{ ConvClass1 c1 = new ConvClass1();
c1.Val = ;
ConvClass2 c2 = c1;//ConvClass1隐式转换为ConvClass2 ConvClass2 d = new ConvClass2();
d.Val = 8.88;
ConvClass1 d1 = (ConvClass1)d;//ConvClass2显示转换为ConvClass1,如果val的值超过了int的范围会引发一个报错 Console.ReadLine();
}
}

2.as运算符

as运算符把一种类型转换为指定的引用类型,如果不能转换返回null,as 运算符只使用以下几种情况:

<operand> as <type>

1)<operand>的类型是<type>;

2) <operand>可以隐式转换为<type>;

3)<operand>可以封箱为<type>。

    class Program
{ static void Main(string[] args)
{
D d = new D();
A a = d; D dd = a as D;//a 是D类型,可以转换 MyInterface i = a as MyInterface;// a 可以隐式转换成MyInterface int j = ;
object o = j as object;//j可以封箱为object Console.ReadLine();
}
} interface MyInterface
{ } class A : MyInterface
{ } class D : A { }

as运算符非常有用,因为一般的类型转换如果转换不了会抛出异常,需要处理异常,as 运算符如果转换不了返回null,只需要判断是不是null就可以了,少了处理异常的代码。

18. C# 转换的更多相关文章

  1. 【C#4.0图解教程】笔记(第9章~第18章)

    第9章 语句 1.标签语句 ①.标签语句由一个标识符后面跟着一个冒号再跟着一条语句组成 ②.标签语句的执行完全如同标签不存在一样,并仅执行冒号后的语句. ③.给语句添加一个标签允许控制从代码的另一部分 ...

  2. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  3. js 强转规范解读

    js的强转是我们很容易遇到坑的一个地方 比如 == 会产生很有意思的事情(使用===还是最佳实践的)  或者+new Date()一个当前的数字时间戳  这里面都涉及到强转  下面分享下学习强转的过程 ...

  4. C Primer Plus(第五版)5

    第5章 运算符,表达式和语句 5.1 循环简单 程序清单 5.1 显示了一个示例程序,该程序做了一点算术运算来计算穿 9 码鞋的脚用英寸表示的长度.为了增加你对循环的理解,程序的第一版演示了不使用循环 ...

  5. c#对字符串的各种操作

    1.字符串定义 2.在字符串后面追加字符串 3.获取字符串长度 4.截取字符串的一部分 5.字符串转为比特码 6.查指定位置是否为空字符 7.查字符串是否是标点符号 8.截头去尾(Trim) 9.替换 ...

  6. 【Python之路】第三篇--Python基本数据类型

    运算符 1.算数运算: # 在py2的 取整除运算中 9//2 = 4.0 # 引入 from __future__ import division 9//2 = 4.5 # py3中不需要! 2.比 ...

  7. The Willpower Instinct

    https://book.douban.com/subject/7043452/ 1.冥想2.健康饮食(低GI.素食为主,未加工食物为主).低GI食物使血糖稳定(蛋白.麦片.粗纤谷类.豆类.水果蔬菜) ...

  8. C#.net干货,最全公共帮助类

    比较全面的c#帮助类,日常工作收集,包括前面几家公司用到的,各式各样的几乎都能找到,所有功能性代码都是独立的类,类与类之间没有联系,可以单独引用至项目,分享出来,方便大家,几乎都有注释,喜欢的请点赞, ...

  9. 干货,比较全面的c#.net公共帮助类

    比较全面的c#帮助类 比较全面的c#帮助类,日常工作收集,包括前面几家公司用到的,各式各样的几乎都能找到,所有功能性代码都是独立的类,类与类之间没有联系,可以单独引用至项目,分享出来,方便大家,几乎都 ...

随机推荐

  1. C#学习-接口

    众所周知,电脑有拍照和播放光碟的功能. 现在有一个TakingPhoto类,它提供了拍照的功能:还有一个PlayVCD类,它提供了播放光碟的功能. 电脑同时具有着两个类提供的功能,因此我们希望定义一个 ...

  2. spring boot 2.0 neo4j 使用

    参考文档 官方文档 http://spring.io/projects/spring-data-neo4j#learn https://docs.spring.io/spring-data/neo4j ...

  3. 【转】Java Socket编程基础及深入讲解

    原文:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html#q2.3.3 Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要 ...

  4. HTML 中的预留字符(如标签的小于号 < )必须被替换为字符实体( &lt; )。 不间断空格(&nbsp;)

    1. 参考 HTML 字符实体 Python处理HTML转义字符 比方说一个从网页中抓到的字符串 html = '<abc>' 用Python可以这样处理: import HTMLPars ...

  5. python基础篇_006_面向对象

    面向对象 1.初识类: # 定义一个函数,我们使用关键字 def """ def 函数名(参数): '''函数说明''' 函数体 return 返回值 "&qu ...

  6. Java笔记(二十) 注解

    注解 一.内置注解 Java内置了一些常用注解: 1.@Override 该注解修饰一个方法,表示当前类重写了父类的该方法. 2.@Deprecated  该注解可以修饰类.方法.字段.参数等.表示对 ...

  7. 管理Android设备的唤醒状态

    当一个Android设备闲置时,首先它的屏幕将会变暗,然后关闭屏幕,最后关闭CPU. 这样可以防止设备的电量被迅速消耗殆尽.但是,有时候也会存在一些特例: Apps such as games or ...

  8. 07-MYSQL多表查询

    今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MYSQL中的表关系分析并能正确建表 昨天内容回顾: ​    数据库的创建 : crea ...

  9. NOIP-质因数分解

    题目描述 已知正整数n是两个不同的质数的乘积,试求出较大的那个质数. 输入描述: 输入只有一行,包含一个正整数n. 输出描述: 输出只有一行,包含一个正整数p,即较大的那个质数. #include&l ...

  10. angular.isNumber()

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...