C#定义自定义类型转换
类型转换不限于单一继承链中的类型(派生类转换为基类或者基类转换为派生类),完全不相关的类型之间也能进行转换。关键在于在两个类型之间提供转型操作符。
在下面这样的情况下应该定义显式转型操作符:
- 在转型有可能失败时,开发者应该定义显式转型操作符。,例如:从long转换为int,这样可以提醒别人只有在确信转型会成功的时候才执行这样的转型,否则,就准备好在失败的时候捕捉异常。
- 执行有损转换的时候,开发者也应该优先使用显式转型。例如:将float转型为int。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Project5_42
{
class Program
{
static void Main(string[] args)
{
Sheep sheep = new Sheep();
Volf volf = new Volf();
sheep.say();
sheep = (Sheep)volf;
sheep.say();
volf.say();
volf = sheep;
volf.say();
}
}
class Sheep
{
public void say()
{
Console.WriteLine("I am a sheep");
}
//使用implicit声明为隐式类型转换
public static implicit operator Volf(Sheep sheep)
{
Console.WriteLine("I turned to a volf from a sheep");
return new Volf();
}
}
class Volf
{
public void say()
{
Console.WriteLine("I am a volf");
}
//使用explicit声明为显式类型转换
public static explicit operator Sheep(Volf volf)
{
Console.WriteLine("I turned to a sheep from a volf");
return new Sheep();
}
} }上面的例子演示了为不同类之间转换定义显式和隐式操作符的情况。显示转化使用:explicit声明,在转换时使用括号进行强制类型转换,请求编译器相信程序员的选择,隐式类型转换用:implicit,而隐式类型转换直接可以用赋值表达式。
C#定义自定义类型转换的更多相关文章
- 【.NET深呼吸】基础:自定义类型转换
照例,老周在开始吹牛之前,先讲讲小故事,这是朋友提出的建议,老TMD写技术有什么了不起的,人人都会写.后来老周想想,也确实,代码谁不会写,能写到有品位有感悟,就不容易做到.于是,老周接受了该朋友的建议 ...
- AutoMapper搬运工之自定义类型转换
前言 最近还挺忙,还有点累,一直都没更新了,实在是懒呀.正题之前先说点别的,最近公司要扩张了,需要大量开发,领导说推荐有钱可以拿,如此好机会,我就趁机做个广告.ShippingRen.com招募.NE ...
- 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换
[源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...
- Struts2自定义类型转换,和处理类型转换错误
Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自 ...
- C#构造函数、操作符重载以及自定义类型转换
构造器 构造器(构造函数)是将类型的实例初始化的特殊方法.构造器可分为实例构造器和类型构造器,本节将详细介绍有关内容. 实例构造器 顾名思义,实例构造器的作用就是对类型的实例进行初始化.如果类没有显示 ...
- java struts2入门学习---自定义类型转换
自定义类型转换器的作用就是将struts无法识别的类型转换成自己所需要的. 比如输入:广东-东莞-虎门,对应的输出时能输出:广东省 东莞市 虎门(镇/区) 这里涉及到的知识点即是将String转换为任 ...
- SSM框架之SpringMVC(2)参数绑定及自定义类型转换
SpringMVC(2)参数绑定及自定义类型转换 1.请求参数的绑定 1.1. 请求参数的绑定说明 1.1.1.绑定机制 表单提交的数据都是k=v格式的 username=haha&passw ...
- C#简单问题,不简单的原理:不能局部定义自定义类型(不含匿名类型)
今天在进行代码测试时发现,尝试在一个方法中定义一个委托,注意是定义一个委托,而不是声明一个委托变量,在编写的时候没有报错,VS也能智能提示,但在编译时却报语法不完整,缺少方括号,但实际查询并没有缺少, ...
- [Struts2学习笔记] -- 自定义类型转换
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
随机推荐
- jq向上无缝滚动
<!-- -------------摇奖排行榜--------------- --> <div class="Top_Record"> <div cl ...
- unity编辑器的搜索框好特么坑啊,居然不支持*号通配符
上图 t:Scene或者点搜索框旁边的 分类按钮 用*.unity是什么也搜索不出来的
- 【WIN32进阶之路】:线程同步技术纲要
前面博客讲了互斥量(MUTEX)和关键段(CRITICAL SECTION)的使用,想来总觉不妥,就如盲人摸象一般,窥其一脚而言象,难免以偏概全,追加一篇博客查遗补漏. win32下的线程同步技术分为 ...
- 动网论坛password暴力破解程序代码
<% response.buffer=false '为防止程序陷入死循环,初始化一些最大重试值 Dim MaxPassLen,MaxPassAsc MaxPassLen=20 'pass ...
- php获取内容中第一张图片地址
$note = '<img src="http://images.xxx.com/article/cover/201601/20/141539161273.png?imageView2 ...
- iOS开发——UI篇OC&transform详解
transframe属性详解 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两大类 (1) 创建“基 ...
- Eclipse插件-easy-explore-1.0.4
下载地址:http://sourceforge.net/projects/easystruts/files/Easy%20Explorer%20for%20Eclipse/easy-explore-1 ...
- [原创] 对于深度学习(deep learning)在工业界的应用现状和突破 [by matthewbai]
现状: 1. 目前大家对于大部分需求,通常采用multiple layer,units in each layer也是人工订好的(虽然可以做稀疏,但是在same layer范围内竞争). 2. 网络结 ...
- CreateToolhelp32Snapshot
CreateToolhelp32Snapshot CreateToolhelp32Snapshot函数为指定的进程.进程使用的堆[HEAP].模块[MODULE].线程[THREAD])建立一个快照[ ...
- DHCP服务自动分配IP地址原理
转载自:http://blog.csdn.net/lycb_gz/article/details/8499559 DHCP在提供服务时,DHCP客户端是以UDP 68号端口进行数据传输的,而DHCP服 ...