博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#用户定义类型转换
阅读量:5904 次
发布时间:2019-06-19

本文共 1645 字,大约阅读时间需要 5 分钟。

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();
        }

 

 

转载地址:http://jmkpx.baihongyu.com/

你可能感兴趣的文章
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Windows Home Server 简体中文版安装和配置体验 - 海量图鉴
查看>>
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
查看>>
Windows 8部署系列PART3:配置WDS服务器环境
查看>>
Ruby中写一个判断成绩分类的脚本
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
SCCM2012SP1---资产管理和远程管理
查看>>
org.springframework.util 类 Assert的使用
查看>>
更改UIView的背景
查看>>
JLNotebookView
查看>>
StackPanel
查看>>
SPUserResizableView
查看>>
UML类图示例
查看>>
sh ./ 执行区别
查看>>
宏定义(#ifndef+#define+#endif)的作用
查看>>
Prometheus安装部署以及配置
查看>>
taobao-pamirs-schedule-2.0源码分析——类设计
查看>>
10位程序员眼中的2007:寻找软件开…
查看>>