1. 程式人生 > >自定義隱式轉換 public static implicit operator 和顯式轉換

自定義隱式轉換 public static implicit operator 和顯式轉換

例子:對使用者user中,使用者名稱first name和last name進行轉換成合成一個限定長度為10個字元新name。

自定義隱式轉換:

namespace transduction
{
    public partial class transductionForm : Form
    {
        public transductionForm()
        {
            InitializeComponent();
        }

        private void btnDisplay_Click(object sender, EventArgs e)
        {
            User user = new User() { FirstName = textBox1.Text, LastName = textBox2.Text };
            LimitedName limitedName = user;//將user轉換為limitedName
            string lName = limitedName;//將limitedName轉換為字串型
            listBox1.Items.Add(lName);
        }
    }
    class LimitedName
    {
        const int MaxNameLength = 10;//名字最長為10個字元
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value.Length < 10 ? value : value.Substring(0, 10); }
        }
        public static implicit operator LimitedName(User user)// public static implicit operator是必須的,名稱LimitedName為目標型別,引數User為源資料。
        {
            LimitedName ln = new LimitedName();//建立目標例項
            ln.Name = user.FirstName + user.LastName;//將源資料賦於目標例項
            return ln;
        }
        public static implicit operator string(LimitedName ln)// 
        {

            return ln.Name;//返回目標例項的資料。
        }
    }
    class User
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

自定義顯式轉換:

將上面程式中的用explicit替換implicit,

 LimitedName limitedName =(LimitedName ) user;//在user增加顯式轉換型別