运算符重载
基本概念
- 我们可以重定义或重载 C# 中内置的运算符
- 可以使用用户自定义类型的运算符
- 重载运算符是具有 特殊名称的函数 ,是通过关键字 ** operator **后跟运算符的符号来定义的
- 与其他函数一样,重载运算符有****返回类型和参数列表
- 使用 operator 关键字来声明运算符。 运算符声明必须符合以下规则
- 同时包含 public 和 static 修饰符
- 一元运算符有一个输入参数,二元运算符有两个输入参数
- **语法示例: 正面的class 表示用户自定义的类,以下是重载 + **
public static Class operator+ (Class a, Class b)
使用案例
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Car car1 = new Car();
car1.length=2;
car1.speed = 120;
Car car2 = new Car();
car2.length = 3;
car2.speed = 90;
// 将两个car对象相加
Car c3 = car1 + car2;
Console.WriteLine(c3); // output: length:5,speed:210
}
}
public class Car
{
///
/// 长度
///
public int length;
///
/// 速度
///
public int speed;
// 重载 对象的 +
public static Car operator +(Car c1, Car c2)
{
Car c3 = new Car();
c3.length = c1.length + c2.length;
c3.speed = c1.speed + c2.speed;
return c3;
}
// 重写tostring方法,方便打印对象信息
public override string ToString()
{
return string.Format("length:{0},speed:{1}", this.length, this.speed);
}
}
}
**如果不使用重载也想要达成以上效果,作法如下:
**
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Car car1 = new Car();
car1.length=2;
car1.speed = 120;
Car car2 = new Car();
car2.length = 3;
car2.speed = 90;
// 将两个car对象相加
Car car3 = new Car();
car3.length = car1.length + car2.length;
car3.speed = car1.speed + car2.speed;
Console.WriteLine(car3); // output: length:5,speed:210
}
}
public class Car
{
///
/// 长度
///
public int length;
///
/// 速度
///
public int speed;
// 重载 对象的 +
public static Car operator +(Car c1, Car c2)
{
Car c3 = new Car();
c3.length = c1.length + c2.length;
c3.speed = c1.speed + c2.speed;
return c3;
}
// 重写tostring方法,方便打印对象信息
public override string ToString()
{
return string.Format("length:{0},speed:{1}", this.length, this.speed);
}
}
}
可以看到效果,如果不重载运算符,则需要在外面调用时 自己去计算,以上只有一处调用,是否重载无所谓,但是如果 调用的地方多了,每个调用的地方都得写此逻辑就太麻烦了,所以用好运算符重载还是很好用的
重载多个运算符实现
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Car car1 = new Car();
car1.length = 2;
car1.speed = 120;
// 利用重载的 true/false 运算符
if (car1)
{
Console.WriteLine(car1); // output: length:2,speed:120
}
Car car2 = new Car();
car2.length = 3;
car2.speed = 90;
// 将两个car对象相加
Car c3 = car1 + car2;
Console.WriteLine(c3); // output: length:5,speed:210
// 相减
c3 = car1 - car2;
Console.WriteLine(c3); // output: length:-1,speed:30
// 比较
if (car1 != car2)
{
Console.WriteLine("我们不相等");
}
}
}
public class Car
{
///
/// 长度
///
public int length;
///
/// 速度
///
public int speed;
// 重载 对象的 +
public static Car operator +(Car c1, Car c2)
{
Car c3 = new Car();
c3.length = c1.length + c2.length;
c3.speed = c1.speed + c2.speed;
return c3;
}
// 重载 对象的 -
public static Car operator -(Car c1, Car c2)
{
Car c3 = new Car();
c3.length = c1.length - c2.length;
c3.speed = c1.speed - c2.speed;
return c3;
}
// 重载 对象的 ==, 注 == 和 != 是一对的,重写了一个,两个就都必须重写
public static bool operator ==(Car c1, Car c2)
{
return c1.length == c2.length && c1.speed == c2.speed;
}
// 重载 对象的 !=
public static bool operator !=(Car c1, Car c2)
{
return c1.length != c2.length || c1.speed != c2.speed;
}
// 重载 对象的 true, true和false也是一对
public static bool operator true(Car c1)
{
return c1.length != 0 || c1.speed != 0;
}
// 重载 对象的 false
public static bool operator false(Car c1)
{
return c1.length == 0 && c1.speed == 0;
}
// 重写tostring方法,方便打印对象信息
public override string ToString()
{
return string.Format("length:{0},speed:{1}", this.length, this.speed);
}
}
}
可重载和不可重载的运算****符
可被重载的 | 不可被重载的 |
---|---|
+, -, !, ~, ++, --,*, /, % | &&, |
==, !=, <, >, <=, >= | =, ., ?:, ->, new, is, sizeof, typeof |
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
函数
+关注
关注
3文章
4303浏览量
62411 -
运算符
+关注
关注
0文章
172浏览量
11062 -
重载
+关注
关注
0文章
7浏览量
2759
发布评论请先 登录
相关推荐
C++重载运算符和重载函数详解
在计算机程序设计中,运算符重载(英语:operator overloading)是多态的一种。这里,运算符(比如+,=或==)被当作多态函数,它们的行为随着其参数类型的不同而不同。运算符
发表于 09-20 17:14
•1790次阅读
田洪川VS2005视频教程:重载方法以及运算符重载
本系列VS2005现在共分为9个小节,分别为VS2005软件前期准备工作,包括软件安装、VS工作环境配置、创建项目程序及基本功能、工具使用;第二部分,将讲解VS课程编程语言C#基本的语法、对象创建及使用、事件驱动编程与回送、类关系及类事件、VS2005控件介绍及相关使用方法、数据库连接与读取方法、XML格式概述及数据存取、文件管理系统应用等等...
发表于 09-26 19:10
•569次阅读
C++程序设计教程之运算符重载的详细资料说明
本文档详细介绍的是C++程序设计教程之运算符重载的详细资料说明主要内容包括了:1. 什么是运算符重载,2. 运算符
发表于 03-14 16:04
•4次下载
评论