1、类型间的强制转换和隐式转换;
2、checked的使用初试;

3、C#要求把类型强制转换的定义放在源类(或结构)或者目标类(或结构)的内部,它的副作用是不能定义两个类之间的类型强制转换,除非至少可以编辑其中一个累的源代码,这是因为这样可以防止第三方吧类型强制转换引入类中。

  a.内部定义了类型强制转换,就不能在另一个类中定义相同的类型强制转换;

  b.显然,对于每一种转换只能有一种类型签字转换,否则编译器就不知道该选择哪个类强制转换了。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using static System.Console;
 7
 8 namespace LearnForCSharp
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             try
15             {
16                 Currency balance = new Currency(50, 35);
17
18                 WriteLine(balance);
19                 WriteLine(balance.ToString());
20
21                 float balance2 = balance;
22
23                 WriteLine(balance2);
24
25                 checked
26                 {
27                     Currency balance3 = (Currency)balance2;
28
29                     WriteLine(balance3.ToString());
30                     WriteLine(balance3);
31                 }
32
33                 checked
34                 {
35                     Currency balance3 = (Currency)(-50.50);
36
37                     WriteLine(balance3.ToString());
38                     WriteLine(balance3);
39                 }
40             }
41             catch (Exception e)
42             {
43                 WriteLine("Exception occurred:" + e.Message);
44             }
45
46             ReadKey();
47         }
48     }
49
50     struct Currency
51     {
52         public uint Dollars;
53         public ushort Cents;
54
55         public Currency(uint dollars, ushort cents)
56         {
57             this.Dollars = dollars;
58             this.Cents = cents;
59         }
60
61         public Currency(Currency c)
62         {
63             this.Dollars = c.Dollars;
64             this.Cents = c.Cents;
65         }
66
67         public override string ToString()
68         {
69             return string.Format("${0}.{1,-2:00}", Dollars, Cents);
70         }
71
72         public static implicit operator float(Currency value)
73         {
74             return value.Dollars + (value.Cents / 100.0f);
75         }
76
77         public static explicit operator Currency(float value)
78         {
79             //确保类型强制转换本身也在checked环境下
80             checked
81             {
82                 uint dollars = (uint)value;
83                 //强制转换导致的精度丢失
84                 //ushort cents = (ushort)((value - dollars) * 100);
85                 ushort cents = Convert.ToUInt16((value - dollars) * 100);
86
87                 return new Currency(dollars, cents);
88             }
89         }
90     }
91 }

转载于:https://www.cnblogs.com/RedCoffeeGod/p/5678999.html

C#类型的强制转换及隐式转换相关推荐

  1. JS的类型转换,强制转换和隐式转换

    JS的类型转换 1.强制转换 通过String(),Number(),Boolean()函数强制转换 var str=123;var str1='123';console.log(typeof str ...

  2. [转载] python隐式转换_Python | 数据类型的转换 显式转换 隐式转换

    参考链接: Python类型转换和类型转换 显式转换 # 首先对要转换的数据进行变量的声明 float_number = 1.5 int_number = 2 # 其他类型转换到字符串,使用的是str ...

  3. python隐式类型转换_python隐式转换_Python | 数据类型的转换 显式转换 隐式转换

    显式转换 # 首先对要转换的数据进行变量的声明 float_number = 1.5 int_number = 2 # 其他类型转换到字符串,使用的是str()函数 # 浮点数转字符串 float_t ...

  4. python隐式转换_Python | 数据类型的转换 显式转换 隐式转换

    显式转换 # 首先对要转换的数据进行变量的声明 float_number = 1.5 int_number = 2 # 其他类型转换到字符串,使用的是str()函数 # 浮点数转字符串 float_t ...

  5. mysql日期隐式转换_MySQL 隐式转换 | 剑花烟雨江南

    MySQL 隐式转换的规则如下: 1. 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回1,这两种都不需要做类型转换. 2 ...

  6. 从 ++[[]][+[]]+[+[]]==10? 深入浅出弱类型 JS 的隐式转换

    起因 凡是都有一个来源和起因,这个题不是我哪篇文章看到的,也不是我瞎几把乱造出来的,我也没这个天赋和能力,是我同事之前丢到群里,叫我们在浏览器输出一下,对结果出乎意料,本着实事求是的精神,探寻事物的本 ...

  7. 无法将类型int隐式转换为string_Scala implicit 隐式转换安全驾驶指南

    这篇短文将结合实例对隐式转换的各种场景进行解释和总结,希望看完的人能够安全驶过隐式转换这个大坑. 隐式转换函数 隐式转换函数有两种作用场景. 1 转换为期望类型:就是指一旦编译器看到X,但需要Y,就会 ...

  8. SqlServer 0和空字符串''等价?-----类型的隐式转换问题

    今天在修改一个bug的时候发现的一个比较奇怪的问题查询部门的时候偶尔会出现错误多查出一个不正确的部门 最后找到了原因 部门表 deptInfo 部门ID         部门名称 deptId     ...

  9. C# 重载 Equals() 方法、重载运算符、声明显隐式转换的简要整理

    自动生成 可以使用 JetBrains ReSharper 的代码生成功能来自动生成各种结构性的或可重载的成员,而不必自行手写,因为非常麻烦且易错. 如确需手写,可参考本文. 引用类型和值类型 本文不 ...

最新文章

  1. 为什么数据科学不值得?
  2. 使用chrome development tool观察box 模型
  3. C++没有调用析构函数
  4. 微信被曝大“Bug”?有用户账户资金被盗刷,这个功能要慎用
  5. 嵌入式工作笔记0004---常见术语积累--随时更新
  6. CM3中数据传输对齐/非对齐方式
  7. VMware中网络设置之host-only
  8. 不知道这十项Linux常识,就别说自己玩过Linux!
  9. Matlab实现图像识别(六)
  10. 音乐倒数计数器(求解答,lcd相关知识点)
  11. 【核心命令 cd pwd mkdir touch ls mv cp echo vim rm】
  12. 通过pdf的url在线浏览pdf
  13. [c++简单小游戏]东搞西搞第二弹——谷歌chrome小恐龙升级版(啊哈)
  14. virtual box上安装ubuntu20.04遇到的问题
  15. 过拟合是什么 怎么解决?
  16. 如何才能做一个淡定从容的人呢?
  17. 程序员兼职私活的网站
  18. Latex中调整三线表行间距
  19. IT华人在硅谷的一天
  20. apr协议的使用粗解和练习

热门文章

  1. 一个轻量级javascript框架的设计模式
  2. java 蓝桥杯算法训练 快速排序
  3. 物联网和工业互联网场景下的边缘计算
  4. 如何在Linux上部署Jenkins
  5. Uber和Non-Uber模式介绍
  6. Spark源码分析之TaskSetManager分析
  7. (44)FPGA时序逻辑与组合逻辑(组合逻辑)
  8. (33)FPGA面试题附加约束的作用
  9. (4)verilog语言编写计数器
  10. php 序列化 java_JAVA之序列化