认真CS☀️用户定义的类型转换explicit、implicit & 运算符重载

发布于:2022-12-20 ⋅ 阅读:(126) ⋅ 点赞:(0)

在这里插入图片描述

 

using System;   //implicit隐式转换,需要时调用转换。explicit显示转换,需要时调用转换。
                //隐式转换简单漂亮,多用隐式转换。如果对象本身在转化时损失一些精信息,如精度,则用显示转化以提醒客户调用端。
class MyClass
{
    public static implicit operator MyClass(int z)    //将数值放入方法等的里储存起来。
    {
        MyClass b = new MyClass();
        b.TheValue = z;
        return b;
    }


    public static implicit operator int(MyClass x)   //将方法等内的数值输出
    {
        return x.TheValue;
    }


    public int _theValue;
    public int TheValue
    {
        get { return _theValue; }
        set { _theValue = value; }
    }
}


class program
{
    static void Main()
    {
        MyClass c = 500;   //500转化成MyClass型了,但c还是MyClass型!
        int d = c;
        Console.WriteLine("c={0}",c.TheValue);
        Console.WriteLine("d={0}",d);
    }

}

using System;   //运算符重载


class MyClass
{
    public int a1;
    int a2=10;


    int _theValue;
    public int TheValue
    {
        set
        {
            if (value < a2)
                _theValue = value;
            else
                _theValue = value < 100
                    ? 50
                    : 100;
        }
        get {return _theValue; }
    }
    public static MyClass operator -(MyClass x1)
    {
        MyClass M = new MyClass();
        M.a1 = 0;
        return M;
    }


    public static MyClass operator -(MyClass x2,int v2)
    {
        MyClass M = new MyClass();
        M.a1 = x2.TheValue - v2;
        return M;
    }
}


class program
{
    static void Main()
    {
        MyClass M1 = new MyClass();
        MyClass M2 = new MyClass();
        MyClass M3 = new MyClass();
        M1.TheValue = 30;
        M2.TheValue = 130;
        Console.WriteLine("M1={0},M2={1}",M1.TheValue, M2.TheValue);


        M3 = -M1;
        Console.WriteLine("M3={0}", M3.TheValue);


        int a3 = 60;
        M3 = M1 - a3;
        Console.WriteLine("M3={0}", M3.a1);   //此处要访问a1,所以a1要public


    }
}
/*实际上运算符重载是定义了一个操作方法,即先定义操作方法,便可在运算时直接运算类(不需要对其中的参数操作),
即可对类内部的数据进行运算。Console...时,还是是要写参数的。*/

 

 

大家还有什么问题,欢迎在下方留言!


 

在这里插入图片描述


如果你有 技术的问题 或 项目开发

都可以加下方联系方式

和我聊一聊你的故事🧡

 

本文含有隐藏内容,请 开通VIP 后查看