黑马程序员 小知识—学习用户自定义转换

原创 2013年12月05日 20:28:32
---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

我们之前接触到的类型转制有数值间的转换、装箱与拆箱、有继承关系的转换。 除了这些标准转换,我们不可以为类和结构定义隐式和显式转换。

用户自定义转换的语法:
1.除了implicit和explicit关键字之外,隐式和显示转换的声明语法是一样的。
2.需要public和static修饰符。
例如,下面代码给出了一个转换语法的事例,它转换一个Person类型的对象为int。
public static implicit operator int(Person p)
{
    teturn p.Age;
}

用户自定义转换的约束:
1.只可以为类和结构定义用户自定义转换。
2.不能重定义标准隐式转换或显示转换。
3.对于源类型S和目标类型T,如下的命题是为真的。
 1).S和T必须是不同类型。
 2).S和T不能通过继承关联。也就是说,S不能继承自T,而T也不能从S继承。
 3).S和T都不能是接口类型或object类型。
 4).转换运算符必须是S或T的成员。
4.对于相同的源和目标类型,我们不能声明两个转换,一个是隐式转换面另外一个显示转换。

用户自定义转换的示例。如下代码定义了一个叫做Person的类,它包含了人的名字和年龄。这个类还定义了两个隐式转换,第一个将int转换为Person对象。第二个将Person对象转换为int值,目标int的值是人的年龄。
    class Person
    {
        public string Name { set; get; }
        public int Age { set; get; }

        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }

        public static explicit operator int(Person p)
        {
            return p.Age;
        }

        public static implicit operator Person(int i)
        {
           return new Person("匿名", i);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p1 = 20;
            Console.WriteLine("Person Info:{0},{1}", p1.Name, p1.Age);

            Person p2 = new Person("美女", 18);
            int age = (int)p2;
            Console.WriteLine("Age Info:{0}", age);

            Console.ReadKey();
        }
    }

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

黑马程序员—OC学习笔记—多个参数方法,匿名类,自定义对象初始化方法

———–Java培训、Android培训、IOS培训、.Net培训、期待与您交流!———— 本节内容,OC多个参数方法,匿名类,自定义对象初始化方法...

黑马程序员_学习日记40_605基础加强(自定义泛型、装拆箱、foreach、文件操作、字符串与byte数组转换)

1、 自定义泛型 l        泛型的目的也是为了代码重用(算法重用) classMyListGeneric {         T[] arr = new T[100];     ...

黑马程序员Java知识回顾之集合_泛型自定义

------------------ ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ---------------------- 泛型推断: 取类型的最小公倍数; ...

黑马程序员—字节流、自定义缓冲区、异常信息处理

黑马程序员——字节流、自定义缓冲区、异常信息处理 1、字节流 字节流的两个基类是InputStream和OutputStream, 相应的缓冲区是BufferedInputStream和Buff...

黑马程序员—java基础学习--GUI( 图形用户界面 )

图形用户界面是为了开发便捷,通过图形化的处理方式而省去了更多繁碎代码的麻烦,通过图形界面更能简单直观的做出自己想要的界面与风格,同时也为程序员节约了不少的时间和精力。今天,一起走入GUI,了解图形用户...

黑马程序员java学习—GUI(图形用户界面)

一、概述: GUI:Graphical User Interface(图形用户接口)。 用图形的方式,来显示计算机操作的界面,这样更方便更直观。  CLI:Command line User...

黑马程序员—OC学习日记.OC基础知识

一、OC简介 1.c语言基础上,增加了一层最小的面向对象语法 2.完全兼容C语言 3.可以在OC代码中混入C语言代码,甚至是C++代码 4.可以使用OC代码开发Mac OS X...

黑马程序员—JAVA基本知识学习

------- android培训、java培训、期待与您交流! ---------- Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition...

黑马程序员————OC基础学习重要小知识点总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1、首先,什么是Objective-C?     Objective-C是一门基于C语言...

黑马程序员—jquery学习知识小结(1)

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- jQuery 语法实例  $...
  • Cuinan7
  • Cuinan7
  • 2012年04月23日 09:40
  • 171
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员 小知识—学习用户自定义转换
举报原因:
原因补充:

(最多只允许输入30个字)