C#自定义类型转换

C#自定义强制转换通过函数中的关键字来声明,且一般都是使用static来表明不依赖于类型实例

示例:

使用explicit来声明显示转换,

 1 class LimitedInt
 2     {
 3         const int MaxValue = 100;
 4         const int MinValue = 0;
 5
 6         public static explicit operator int(LimitedInt li)
 7         {
 8             return li.TheValue;
 9         }
10
11         public static explicit operator LimitedInt(int x)
12         {
13             LimitedInt li = new LimitedInt();
14             li.TheValue = x;
15             return li;
16         }
17
18         private int _TheValue = 0;
19         public int TheValue
20         {
21             get { return _TheValue; }
22             set
23             {
24                 if (value < MinValue)
25                     _TheValue = 0;
26                 else
27                     _TheValue = value > MaxValue
28                         ? MaxValue : value;
29             }
30         }
31     }

此时如果要进行赋值的话应当按照如下规则:

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             LimitedInt li = (LimitedInt)5;
 6             int Five = (int)li;
 7
 8             Console.WriteLine("li:{0},Five:{1}",li.TheValue,Five);
 9             Console.ReadKey();
10         }
11     }

按:如果将上述转换explicit换成implicit,就是声明了隐式转换(因为程序会自动判断右值的类型来进行转换),此时调用就可以不使用显示转换(也可以使用):

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             LimitedInt li =5;
 6             int Five = li;
 7
 8             Console.WriteLine("li:{0},Five:{1}",li.TheValue,Five);
 9             Console.ReadKey();
10         }
11     }

如此可以看出,隐式转换会方便我们使用,但是有些地方会不方便调试,如果一个类型声明了隐式但是其他未声明,编辑器可能无法检测出来,那么会造成程序运行失败。

时间: 2024-11-12 05:04:10

C#自定义类型转换的相关文章

Struts2自定义类型转换,和处理类型转换错误

Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自己的转换器: 例: 我有一个Point类型: package cn.jnit.bean; public class Point { private Integer x; private Integer y; public Point() { } public Point(Integer x, Int

Spring MVC JSON自定义类型转换(续)

前面提到了两种转换类型的方法(Spring MVC JSON自定义类型转换),这里针对Json转换提供一种更简便的方法. 通过配置全局的日期转换来避免使用麻烦的注解. 首先用到了一个简单的日期工具类DateUtil.java /** * DateUtil类 * * @author liuzh */ public class DateUtil { public static final String Y_M_D = "yyyy-MM-dd"; public static final St

在复数类中自定义类型转换函数实现复数和非复数之间的运算

实现复数+double型数据,并且打印运算后实部上的数据 #include <iostream> using namespace std; class Complex { public: Complex( )//定义默认构造函数初始化复数 { real=0; imag=0; } //使用初始化表初始化复数 Complex(double r, double i):real(r),imag(i){} //定义自定义类型转换函数 operator double() { return real; }

不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自定义类型转换 示例CppOperator.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppOperator { public: string Demo(); }; } CppOperator.cpp /* * 运算符重载, 自定义类型转换 */ #include &qu

【.NET深呼吸】基础:自定义类型转换

照例,老周在开始吹牛之前,先讲讲小故事,这是朋友提出的建议,老TMD写技术有什么了不起的,人人都会写.后来老周想想,也确实,代码谁不会写,能写到有品位有感悟,就不容易做到.于是,老周接受了该朋友的建议. 有初入职场的弟弟妹妹们经常诉苦,为啥,因为常常被人骂,被老员工骂,被老板骂.好像自己做的事永远都是错的,于是感觉很受打击,很伤心. 这里老周必须提醒各位,小伙子应该坚强一点,小妹妹们也不要过于绝望,千万不要因为这些事情去做傻事.西湖景观很美,“欲把西湖比西了,淡妆浓抹总相宜”,但是,如果有人跳西

AutoMapper搬运工之自定义类型转换

前言 最近还挺忙,还有点累,一直都没更新了,实在是懒呀.正题之前先说点别的,最近公司要扩张了,需要大量开发,领导说推荐有钱可以拿,如此好机会,我就趁机做个广告.ShippingRen.com招募.NET高级开发,坐标上海,有兴趣的给我留言,或者加我qq:1029183866,加的时候请说明博客园看到. 另外在说说这几天,工作忙是不可避免,业余也在准备自己的网站www.capqueen.com(目前还在备案中),准备用目前会的技术从无到有建立一个CMS(博客),到时候也会发一些文章和大家分享.最近

Spring MVC JSON自定义类型转换

类型有很多,这里只用日期为例说明. 在Spring MVC中存在两大类的类型转换,一类是Json,一个是Spring的Binder转换. JSON: 使用Json转换时,可以如下使用: public class Test { private Date createdate; @JsonSerialize(using = DateYMDHMSJsonSerializer.class) public Date getCreatedate() { return createdate; } @JsonD

自定义类型转换

这里说点平常不怎么用的知识(也不建议在项目中运行,因为增加阅读代码成本).自定义类型转换,有两类型:一是类型间隐式转换,一是类型间强制转换. 定义格式: 访问修饰符 static 转换修饰操作符 operator 类型(参数列表); 转换修饰操作符: explicit用于声明必须强制转换的自定义类型转换操作符 implicit用于声明隐式的自定义类型转换操作符 注意隐式转换由系统自行调用,因此不建议再隐式转换中抛出任何异常. 下面看一个简单的小栗子: class MyAge { public i

自定义类型转换器之TypeConverter

C#提供了很多类型转换的方法如ConvertToInt.int.Parse.int.tryParse等等,这些方法都能将一个C#的基本数据类型转换成另一个C#基本数据类型.那么.既然如此,C#肯定会提供某种机制来让我们编写自定义的类型转换器. so.C#提供了一个类型-TypeConverter来帮助我们完成类型转换的功能,TypeConverter类就是将一种类型(object,当然可以是任意类型)转换成一种类型(一般为string,当然也可以是其他的类型).或者将另一种类型转换回来. 1.所

struts2自定义类型转换

struts2 类型转换很智能,他会帮我们自动转换类型,struts会自动转换4类8种原生数据类型和String ,Date,当我们自己定义的类型就不会转换了,需要我们自己去编写类型转换器. 原理:类型转换有两个类,DefaultTypeConverter和Struts2TypeConverter,Struts2TypeConverter继承DefaultTypeConveter,DefaultTypeConverter里面就一个方法convertValue. package com.sheng