C#用户定义类型转换详解
发布时间:2022-06-07 11:44:32
C#用户定义类型转换
•用于自定义类和结构能够进行隐式转换和显示转换.例如:将一个自定义类类型转换成整型,浮点型等,反之亦然.
C#提供隐式转换和显式转换
•隐式转换:编译器自动执行转换
•显式转换:编译器只在使用显式转换运算符时才执行转换
声明隐式转换的语法如下.注:所有用户定义转换必须使用public和static修饰符
public static implicit operator TargetType(SourceType Identifier)
{
...
return ObjectOfTargetType;
}
TargetType:目标类型
参数Identitfier:源数据
例如,下面代码使一个int字面量被隐式转换为LimitedInt对象,反过来LimitedInt也可以隐式转换成一个int
class LimitedInt
{
const int MaxValue = 100;
const int MinValue = 0;
private int _theValue = 0;
//属性
public int TheValue
{
get { return _theValue; }
set
{
if (value < MinValue)
{
_theValue = 0;
}
else
{
_theValue = value > MaxValue ? MaxValue : value;
}
}
}
//隐式转换:将LimitedInt对象转为整型
public static implicit operator int(LimitedInt li)
{
return li.TheValue;
}
//隐式转换:将整型转换为LimitedInt对象
public static implicit operator LimitedInt(int x)
{
LimitedInt li = new LimitedInt();
li.TheValue = x;
return li;
}
}
class Program
{
static void Main(string[] args)
{
LimitedInt li = 500; //将500转换为LimitedInt
int value = li; //将LimitedInt转换为int
Console.WriteLine("li:{0},value:{1}", li.TheValue, value);
Console.ReadKey();
}
改代码输出结果:li:100,value:100
显示转换和强制转换运算符
前面所讲的都是隐式转换,如果你把运算符implcit改为explicit,你将不得不在实行转换时显示使用转换运算符
代码片段如下:
//显示转换:将LimitedInt对象转为整型
public static explicit operator int(LimitedInt li)
{
return li.TheValue;
}
//显示转换:将整型转换为LimitedInt对象
public static explicit operator LimitedInt(int x)
{
LimitedInt li = new LimitedInt();
li.TheValue = x;
return li;
}
static void Main(string[] args)
{
LimitedInt li = (LimitedInt)500; //将500强制转换为LimitedInt
int value = (int)li; //将LimitedInt强制转换为int
Console.WriteLine("li:{0},value:{1}", li.TheValue, value);
Console.ReadKey();
}


猜你喜欢
- 本文实例分析了Android中ImageView用法。分享给大家供大家参考,具体如下:猜牌游戏大家可能以前都玩过,这里我们用这个小游戏来说明
- 这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 概念CAS的全称是Compare-And-Swap,它是cpu并发原语它的功能是判断内存某个位置的值是否为预期值。如果是则更改为新的值,这个
- 先给大家展示下效果图,如果感觉不错,请参考实现思路详解Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安
- 前言序列化想必大家都很熟悉了,对象在进行网络传输过程中,需要序列化之后才能传输到客户端,或者客户端的数据序列化之后送达到服务端序列化的标准解
- 今天小编来手写一个自定义圆形进度条:先看效果:首先我们在attrs属性文件中增加几个自定义属性<?xml version="
- 网上找了一些获取客户端IP的方法,但本地测试时,返回的是IPv6的表示方法"::1":Host文件里面:# &
- 1.创建字符串的方法1.1构造方式一、直接构造String str = "fly";方式二 、调用构造方法进行构造对象S
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,
- Spark_SQL的UDF使用用户自定义函数,也叫UDF,可以让我们使用Python/Java/Scala注册自定义函数,并在SQL中调用。
- 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都
- 前言在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功
- springboot配置mysql数据库spring.datasource.url报错spring.datasource.url=jdbc:
- 手机一般有两种类型的输入设备。一种是键盘类型的输入设备,通常它包含电源键和音量下键。另一种是触摸类型的输入设备,触摸屏就属于这种类型。键盘类
- 学会了技术就要使用,否则很容易忘记,因为自然界压根就不存在什么代码、变量之类的玩意,这都是一些和生活常识格格不入的东西。只能多用多练,形成肌
- 导语本章根据百度地图API,实现仿钉钉打卡功能。用到了基础地图、覆盖物、定位图层、陀螺仪方法、悬浮信息弹框。百度地图API地址
- 本文实例讲述了android中图形图像处理之drawable用法。分享给大家供大家参考。具体如下:一、如何获取 res 中的资源数据包pac
- Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架。我们先看一下官方文档所给出
- 目录简介springfox大致原理:SpringBoot整合Swagger2引入依赖编写配置类配置SwaggerSwagger2常用注解使用
- 人机猜拳小游戏,只要用到的java面向对象的思维模式。本游戏中有游戏玩家和计算机两个参与者。玩家和计算机都有的属性是姓名和得分。共分为4个类