zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    把自己活成AI
    cmd 中文显示错误,解决办法
    直流通路,交流通路的理解 三极管
    欧拉公式的理解
    从一个量分别和两个量成正比,怎么推理出和他们乘积成正比?
    细说python类3——类的创建过程
    delphi 基础之二 面向对象概念初步
    delphi 基础之一 数据类型和基本语法
    delphi的多线程编程
    Delphi初学者应小心的六大陷阱
  • 原文地址:https://www.cnblogs.com/springword/p/6179021.html
Copyright © 2011-2022 走看看