C#用户定义类型转换详解

所属分类: 软件编程 / C#教程 阅读数: 70
收藏 0 赞 0 分享

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

更多精彩内容其他人还在看

C# SendInput 模拟鼠标操作的实现方法

C# SendInput 模拟鼠标操作的实现方法,需要的朋友可以参考一下
收藏 0 赞 0 分享

C#中 paint()与Onpaint()的区别

paint是事件onpaint方法onpaint方法是调用paint事件的,用哪一个,效果是一样,就看那一个方便了内部是这样实现的:
收藏 0 赞 0 分享

c#中GetType()与Typeof()的区别

c#中GetType()与Typeof()的区别,需要的朋友可以参考一下
收藏 0 赞 0 分享

将字符串转换成System.Drawing.Color类型的方法

将字符串转换成System.Drawing.Color类型的方法,需要的朋友可以参考一下
收藏 0 赞 0 分享

C# 抓取网页内容的方法

C# 抓取网页内容的方法,需要的朋友可以参考一下
收藏 0 赞 0 分享

基于C#后台调用跨域MVC服务及带Cookie验证的实现

本篇文章介绍了,基于C#后台调用跨域MVC服务及带Cookie验证的实现。需要的朋友参考下
收藏 0 赞 0 分享

使用C#获取远程图片 Form用户名与密码Authorization认证的实现

本篇文章介绍了,使用C#获取远程图片 Form用户名与密码Authorization认证的实现。需要的朋友参考下
收藏 0 赞 0 分享

Winform跨线程操作的简单方法

线程间操作无效:从不是创建控件“label1”的线程访问它
收藏 0 赞 0 分享

C# WINFORM 强制让窗体获得焦点的方法代码

C# WINFORM 强制让窗体获得焦点的方法代码,需要的朋友可以参考一下
收藏 0 赞 0 分享

C#中方括号[]的语法及作用介绍

C#中方括号[]可用于数组,索引、属性,更重要的是用于外部DLL类库的引用。
收藏 0 赞 0 分享
查看更多