C#学习笔记——运算符重载、接口篇

本文详细介绍了C#中的运算符重载,包括可重载与不可重载的运算符,以及转换运算符的使用。同时,讨论了接口的使用,包括is和as运算符,重载接口方法以及显示接口实现,强调了接口在多继承和契约式编程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、运算符重载

  • 重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。 与其他函数一样,重载运算符有返回类型和参数列表。
  • 语法:
    public   ~  static   ~  返回值类型   ~  operator   ~  一元运算符   ~  (参数类型   ~   参数名)
    public   ~  static   ~  返回值类型   ~  operator   ~  二元运算符   ~  (参数1类型   ~   参数1名,参数2类型   ~   参数2名)

1、可重载和不可重载运算符

在这里插入图片描述

using System;

namespace Day10
{
   
    public class Fraction
    {
   
        private int num1;
        private int num2;

        public Fraction (int num1,int num2)
        {
   
            this.num1 = num1;
            this.num2 = num2;
        }

        public static Fraction operator +(Fraction f1,Fraction f2)//重载+法
        {
   
            return new Fraction(f1.num1 + f2.num1, f1.num2 + f2.num2);
        }

        public static bool operator ==(Fraction f1,Fraction f2)
        {
   
            if (f1.num1 == f2.num1 && f1.num2 == f2.num2)
                return true;
            return false;
        }

        //委托给==
        public static bool operator !=(Fraction f1,Fraction f2)
        {
   
            return !(f1 == f2);
        }

        //判断是否为同一类型,再执行委托
        public override bool Equals(object obj)
        {
   
            if (!(obj is Fraction))  //检查对象运行时类型
                return false;
            return this == (Fraction)obj;//比较this == obj ,比较前先将obj强制转换为Fraction
        }

        public override string ToString()//复写Tostring
        {
   
            return String.Format("({0},{1})", num1, num2);
        }
    }

    public  class Tester
    {
   
        public void Run()
        {
   
            Fraction f1 = new Fraction(3, 4);
            Console.WriteLine("f1:{0}",f1.ToString());
            Fraction f2 = new Fraction(5, 6);
            Console.WriteLine("f2:{0}",f2.ToString());
            Fraction f3 = f1 + f2;
            Console.WriteLine("f3:{0}",f3.ToString());
            Fraction f4 = new Fraction(8, 10);
            if(f1==f2)
                Console.WriteLine("f1:{0}==f2:{1}",f1.ToString(),f2.ToString());
            else
                Console.WriteLine("f1:{0}!=f2:{1}", f1.ToString(), f2.ToString());
            if(f4.Equals(f3))
                Console.WriteLine("f4:{0}Equalsf3:{1}",f4.ToString(),f3.ToString());
        }
    }

    class Program
    {
   
        static void Main(string[] args)
        {
   
            Tester t = new Tester();
            t.Run();
        }
    }
}

注意:
1、如果重载了等于(==)运算符,那么也必须重载不等(!=)运算符,类似地有小于(<)和大于(>)必须成对,小于等于(<=)和大于等于(>=)必须成对。
2、如果重载了等于运算符,那么建议也要重载Equals()方法。
3、比较运算符必须返回bool类型的值,这是与其他算术运算符的根本区别。
4、运算符只能采用值参数,不能采用ref 或out 参数。

2、转换运算符

  • implicit 和 explicit通常叫作转换运算符,当转换能够成功并且不会发生信息丢失时,使用关键字implicit;如果存在丢失信息的风险,则需要使用关键字explicit。
  • 语法:
    public   ~  static   ~  implicit   ~  operator   ~  转换运算符的目标类型   ~  (参数输入类型   ~   参数名)
    public
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪 ~smart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值