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

---------------------- 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培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值