explicit 和 implicit 的用法

explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换

explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)

implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)

隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace implicit_explicit
{
    class Program
    {
        static void Main(string[] args)
        {  
            TesImplicit t = new TesImplicit();
            User u = new User() { Id = 1, Name = "lichaoqiang" };
            Console.WriteLine("隐式转换-----------------------------------------------------------------");
            Customer c = u;
            Console.WriteLine(c.CustomerId+"="+c.CustomerName);

 
            #region 2>显示转换
            Customer customer = u;
            VIP v = (VIP)customer;
            Console.WriteLine("显示转换-----------------------------------------------------------------");
            t.GetVIPInfo(v);
            #endregion
 
            Console.ReadLine();
        }
    }


    /// <summary>
    /// test case
    /// </summary>
    public class TesImplicit
    {
        /// <summary>
        /// get the customer infomation
        /// </summary>
        /// <param name="customer"></param>
        public void GetCusterInfo(Customer customer)
        {
            Console.WriteLine("Customer:" + customer.CustomerName);
        }

        public void GetVIPInfo(VIP vip)
        {
            Console.WriteLine("VIP:" + vip.VName);
        }
    }
    /// <summary>
    /// 
    /// </summary>
    public class User
    {
        /// <summary>
        /// 
        /// </summary>
        public long Id { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 隐式转换
        /// </summary>
        /// <param name="u"></param>
        /// <returns></returns>
        public static implicit operator Customer(User u)
        {
            return new Customer()
            {
                CustomerId = u.Id,
                CustomerName = u.Name
            };
        }
    
    }

    /// <summary>
    /// 
    /// </summary>
    public class Customer
    {
        /// <summary>
        /// 
        /// </summary>
        public long CustomerId { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string CustomerName { get; set; }

        /// <summary>
        /// 显示转换
        /// </summary>
        /// <param name="c"></param>
        /// <returns></returns>
        public static explicit operator VIP(Customer c)
        {
            return new VIP()
            {
                VID = c.CustomerId,
                VName = c.CustomerName
            };
        }
    }

    /// <summary>
    /// 
    /// </summary>
    public class VIP
    {
        /// <summary>
        /// 
        /// </summary>
        public long VID { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string VName { get; set; }
    }
}

 

posted @ 2017-02-20 10:09  甜菜波波  阅读(975)  评论(0编辑  收藏  举报