2.8C#函数成员之运算符(Operator)

运算符声明

所有运算符都必须声明为 public 和 static

public static 返回类型 operator 运算符名()
{
    //运算符体
}
public static bool operator ==(List<T> a, List<T> b) 
{
    return Equals(a, b);
}
public static bool operator !=(List<T> a, List<T> b)
{
    return !Equals(a, b);
}
//Expression-bodied表达式声明法
public static Complex operator +(Complex a, Complex b) => a.Add(b);

隐式和显式运算符

implicit 或 explicit 关键字分别用于定义隐式转换或显式转换,定义转换的类型必须是该转换的源类型或目标类型,可用两种类型中的任何一种类型来定义两种用户定义类型之间的转换。

using System;

public readonly struct Digit
{
    private readonly byte digit;

    public Digit(byte digit)
    {
        if (digit > 9)
        {
            throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
        }
        this.digit = digit;
    }

    public static implicit operator byte(Digit d) => d.digit;
    public static explicit operator Digit(byte b) => new Digit(b);

    public override string ToString() => $"{digit}";
}

public static class UserDefinedConversions
{
    public static void Main()
    {
        var d = new Digit(7);

        byte number = d;
        Console.WriteLine(number);  // output: 7

        Digit digit = (Digit)number;
        Console.WriteLine(digit);  // output: 7
    }
}

重载

C#内置大部分运算符支持重载,用户自定义运算符支持重载。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/11387.html

(0)
上一篇 2021年2月7日 17:15
下一篇 2021年2月9日 20:05

相关推荐

  • 3.7C#引用类型之数组(Array)

    数组(Array)是一种数据结构,可以用一个统一的数组名和不同的下标(或称索引,index)来确定数组中唯一的元素。根据数组的维度,可以将其分为一维数组、多维数组和交错数组。 数组中的元素是有序的,包含 Length 个元素的数组从 0 索引到 Length-1。 数组中的元素必须属于同一个类型,而且可以随时替换元素。…

    C#语言教程 2021年3月7日
    05530
  • 5.2C#异步编程场景

    C#异步编程场景分为 I/O 绑定(例如从网络请求数据、访问数据库或读取和写入到文件系统)和 CPU 绑定(例如执行成本高昂的计算)。 I/O 绑定场景:从 Web 服务下载数据 对于 I/O 绑定代码,等待一个在 async 方法中返回 Task 或 Task<…

    C#语言教程 2021年5月2日
    02620
  • 3.13C#语言的泛型(Generic)

    1.泛型类 类型参数跟在类名后面。 2.泛型接口 类型参数跟在接口名后面。 3.泛型方法 类型参数跟在方法名后面。 方法调用时,可以根据实参推断出类型参数的类型,无需显式指定。 4.构造(Constructed)类型 封闭式构造(closed constructed)类型:指定类型参数,例如,Node<int&g…

    C#语言教程 2021年3月13日
    01750

发表回复

登录后才能评论