C#自定义类型强制转换实例分析
作者:永远爱好写程序 发布时间:2022-01-14 08:20:06
标签:C#,类型,转换
本文实例讲述了C#自定义类型强制转换的用法。分享给大家供大家参考。具体分析如下:
先来举一个小例子
类定义:
public class MyCurrency
{
public uint Dollars;
public ushort Cents;
public MyCurrency(uint dollars, ushort cents)
{
this.Dollars = dollars;
this.Cents = cents;
}
public override string ToString()
{
return string.Format(
"${0}.{1}", Dollars, Cents
);
}
//提供MyCurrency到float的隐式转换
public static implicit operator float(MyCurrency value)
{
return value.Dollars + (value.Cents / 100.0f);
}
//把float转换为MyCurrency,不能保证转换肯定成功,因为float可以
//存储负值,而MyCurrency只能存储正数
//float存储的数量级比uint大的多,如果float包含一个比unit大的值,
//将会得到意想不到的结果,所以必须定义为显式转换
//float到MyCurrency的显示转换
public static explicit operator MyCurrency(float value)
{
//checked必须加在此处,加在调用函数外面是不会报错的,
//因为溢出的异常是在强制转换运算符的代码中发生的
//Convert.ToUInt16是为了防止丢失精度
//该段内容很重要,详细参考"C#高级编程(中文第七版) 218页说明"
checked
{
uint dollars = (uint)value;
ushort cents = Convert.ToUInt16((value - dollars) * 100);
return new MyCurrency(dollars, cents);
}
}
}
测试代码:
private void btn_测试自定义类型强制转换_Click(object sender, EventArgs e)
{
MyCurrency tmp = new MyCurrency(10, 20);
//调用MyCurrency到float的隐式转换
float fTmp = tmp;
MessageBox.Show(fTmp.ToString());
float fTmp2 = 200.30f;
//调用float到MyCurrency的显示转换
MyCurrency tmp2 = (MyCurrency)fTmp2;
MessageBox.Show(tmp2.ToString());
}
希望本文所述对大家的C#程序设计有所帮助。
0
投稿
猜你喜欢
- Author:jeffreyDate:2019-04-08一、开发环境:1、mysql - 5.72、navicat(mysql客户端管理工
- SpringMVC获取表单数据1、实体类package cn.hadron.bean;import java.io.Serializable
- SpringBoot启动yaml报错报错找不到org.yaml里的一个方法10:45:54.742 [main] ERROR org.spr
- int、String的类型转换int -> Stringint i=12345;String s="";第一种方法
- 一 概述DiffUtil是support-v7:24.2.0中的新工具类,它用来比较两个数据集,寻找出旧数据集-》新数据集的最小变化量。 说
- 相信对于一名JAVA开发者开说properties文件一定再熟悉不过了,比如一下配置:config.properties会经常存放一些系统常
- 引言当我们通过@ConfigurationProperties注解实现配置 bean的时候,如果默认的配置属性转换无法满足我们的需求的时候,
- 最近在使用 url 的 queryString 传递参数时,因为参数的值,被DES加密了,而加密得到的是 Base64的编码字符串类似于:z
- 无论您是为具有单个处理器的计算机还是为具有多个处理器的计算机进行开发,您都希望应用程序为用户提供最好的响应性能,即使应用程序当前正在完成其他
- 主要是重写attemptAuthentication方法导入依赖<dependency><groupId>org.s
- @Conditional的使用@Conditional可以根据条件来判断是否注入某些Bean。package com.morris.spri
- feignclient https接口调用报证书错误问题最近在使用 feignclient 过程中,和第三方通过https 协议交互的时候,
- 游标查询(scroll)简介scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种
- 项目源码:https://gitee.com/tanwubo/jwt-spring-security-demo登录通过自定义的WxApple
- 前言我昨天做了个梦,我梦见我在一条路走,走的时候经过一个房间,里面关着一条边牧和鸡和猪,后来我醒了,我知道那只边牧就是小叶子(哈仔十一的边牧
- 前言但是没有合理的架构,大家写出来的代码很可能是一大堆的复制粘贴。比如十几个页面,都有这个关注按钮。然后,你是不是也要写十几个地方呢 然后修
- mybatis自动生成实体类、mapper文件、mapper.xml文件若采用mybatis框架,数据库新建表,手动编写的话,需要编写大量的
- 话不多说,请看代码/// <summary>/// 删除字符串中的中文/// </summary>public st
- 本文实例为大家分享了C#实现简易点餐功能的具体代码,供大家参考,具体内容如下图示效果实现过程1.设计界面2.设计控件及其属性3.实现点击事件
- 概述在使用Spring Boot的时候我们经常使用actuator,健康检查,bus中使用/refresh等。这里记录如何使用注解的方式自定