C#练习笔记1:自定义的类型转换和操作符的重载

  本次主要学习了一下C#中自定义类型的转换,一些转换c#默认是不能够转换的,所以这个时候就需要用户自己来定义需要转换的方式,也就是自定义的类型转换方式,用户自定义类型转换这里实现了两种,一种是显式的转换,一种是隐式的转换,再就是操作符的重载了。

  涉及到的关键字主要有:implicit(隐式),explicit(显式),operator(操作符),在代码中我们还要注意另一些关键字,如static哪里

  下面是代码部分:

  

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

namespace OperatorClass
{
    class Program
    {
        static void Main(string[] args)
        {


            Console.WriteLine("隐式转换:");
            int testInt;

            //隐式转换
            TransformTypeInt test = new TransformTypeInt();
            //1.
            test = -200;
            Console.WriteLine(test.SourceInt);
            //2.
            test = 300;
            testInt = test;
            Console.WriteLine(testInt);
            Console.WriteLine();


            Console.WriteLine("显式转换:");
            //显式转换
            string testStr;

            ExplicitTrans str = new ExplicitTrans();
            //str = "HelloWorld";

            str = (ExplicitTrans)"HelloWorld";
            Console.WriteLine(str.SourceStr);

            testStr =(string)str;
            Console.WriteLine(testStr);
            Console.WriteLine();


            Console.WriteLine("操作符重写:");
            TransformTypeInt var1 = new TransformTypeInt();
            TransformTypeInt var2 = new TransformTypeInt();
            TransformTypeInt var = new TransformTypeInt();
            var1 = 63;
            var2 = 78;
            var = var1 + var2;
            Console.WriteLine(var.SourceInt);
            Console.ReadKey();


        }
    }

    /// <summary>
    /// 隐式转换类
    /// </summary>
    //从一种类型转换到另一种类型
    class TransformTypeInt
    {
        private int sourceInt=0;

        public int SourceInt
        {
            get
            {
                //返回一个大于零的数
                return sourceInt > 0 ? sourceInt :0;
            }
            set { sourceInt = value; }
        }

        /// <summary>
        /// 隐式的转换
        /// </summary>
        /// <param name="source"></param>
        //隐式转换,将TransformTypeInt转为int
        public static implicit operator int(TransformTypeInt source)
        {
            return source.SourceInt;
        }
        //隐式转换,将int转换为TransformTypeInt;
        public static implicit operator TransformTypeInt(int source)
        {
            TransformTypeInt tar = new TransformTypeInt();
            tar.SourceInt = source;
            return tar;
        }

        /// <summary>
        /// 重写+操作符,实现两个值追加,注意这里的static,public operator
        /// </summary>
        /// <param name="var1"></param>
        /// <param name="var2"></param>
        /// <returns></returns>
        public static TransformTypeInt operator +(TransformTypeInt var1,TransformTypeInt var2)
        {
            TransformTypeInt tar = new TransformTypeInt();
            string a = var1.SourceInt.ToString() + var2.SourceInt.ToString();
            tar.SourceInt = Convert.ToInt32(a);
            return tar;
        }
    }

    /// <summary>
    /// 显式转换
    /// </summary>
    class ExplicitTrans
    {
        string sourceStr;

        public string SourceStr
        {
            set { sourceStr = value; }
            get { return sourceStr; }
        }

        public static explicit operator string(ExplicitTrans source)
        {
            return source.SourceStr;
        }

        public static explicit operator ExplicitTrans(string source)
        {
            ExplicitTrans tar = new ExplicitTrans();
            tar.SourceStr = source;
            return tar;
        }

    }
}

   程序的执行结果附上一张经典的控制台截图(^-^)V

  

原文地址:https://www.cnblogs.com/springword/p/6179021.html