当前位置: 移动技术网 > IT编程>开发语言>c# > C#用户定义类型转换详解

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

2019年07月18日  | 移动技术网IT编程  | 我要评论
c#用户定义类型转换 •用于自定义类和结构能够进行隐式转换和显示转换.例如:将一个自定义类类型转换成整型,浮点型等,反之亦然. c#提供隐式转换和显式转换

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网