Fork me on GitHub

C#学习笔记(6)表达式与运算符

这一章的其他内容不过多赘述(跟C++几乎一致);

6.1运算符和重载

C#运算符被定义为使用预定义类型作为操作数来工作。如果面对一个用户定义类型,运算符完全不知道如何处理它。运算符重载允许你定义C#运算符应该如何操作自定义类型的操作数。

(1)运算符重载只能用于类和结构。

(2)为类或结构重载一个运算符x,可以声明一个名称为operator x的方法并实现它的行为(例如:operator+和operator-等)。

一元运算符的重载方法带一个单独的class或struct类型的参数。

二元运算符的重载方法带两个参数,其中至少有一个必须是class或struct类型。

    形如:

    public static  LimitedInt  operator-( LimitedIntx )//一元

    public static  LimitedInt  operator+( LimitedIntx , double y)//二元

运算符重载的方法声明需要:

(1)声明必须同时使用static和public的修饰符;

(2)运算符必须是要操作的类或结构的成员。

例如,下面的代码展示了类Limited Int的两个重载的运算符:加运算符和减运算符。你可以说它是负数而不是减法,因为运算符重载方法只有一个单独的参数,因此是一元的,而减法运算符是二元的。

public static  LimitedInt  operator    +      ( LimitedIntx , double y)//二元

(必需的)  (类型)( 关键字)(运算符)   (操作数)

代码展示:

复制代码
using System;
class LimitedInt
{
    const int MaxValue = 100;
    const int MinValue = 0;
    public static LimitedInt operator -(LimitedInt x)
    {
        LimitedInt li = new LimitedInt();
        li.TheValue = 0;
        return li;
    }
    public static LimitedInt  operator -(LimitedInt x,LimitedInt y)
    {
        LimitedInt li = new LimitedInt();
        li.TheValue = x.TheValue - y.TheValue;
        return li;
    }
    public static LimitedInt operator +(LimitedInt x, double y)
    {
        LimitedInt li = new LimitedInt();
        li.TheValue = x.TheValue + (int)y;
        return li;
    }
    private int _theValue = 0;
    public int TheValue
    {
        get { return _theValue; }
        set
        {
            if (value < MinValue)
                _theValue = 0;
            else
                _theValue = value > MaxValue ? MaxValue : value;
        }
    }
}

class Program
{
    static void Main()
    {
        LimitedInt li1 = new LimitedInt();
        LimitedInt li2 = new LimitedInt();
        LimitedInt li3 = new LimitedInt();
        li1.TheValue = 10;
        li2.TheValue = 26;
        Console.WriteLine($"li1:{li1.TheValue}, li 2:{li2.TheValue}");
        li3 = -li1;
        Console.WriteLine($"-{li1.TheValue}={li3.TheValue}");
        li3 = li2 - li1;
        Console.WriteLine($"{li2.TheValue}-{li1.TheValue}={li3.TheValue}");
        li3 = li1 - li2;
        Console.WriteLine($"{li1.TheValue}-{li2.TheValue}={li3.TheValue}");
    }
}
复制代码

代码运行结果:

 

 

posted @   衔清风与共  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示