首页 >后端开发 >C#.Net教程 >C# 中的运算符重载

C# 中的运算符重载

王林
王林原创
2024-09-03 15:13:441118浏览

重载可以定义为定义和实现多态性技术的过程,它允许程序中的变量或对象在代码执行期间呈现各种其他形式。当方法属性与参数类型不相似、执行顺序不同、存在多个具有相同名称和不同属性的方法等时,可以使用这一技术。这可以在一个程序中的不同方法中实现,例如不同数量的参数、不同类型的参数、不同的参数顺序、可选参数和命名参数。

C# 中的各种运算符重载

C# 中有多个运算符。

  1. 我们可以重载所有二元运算符,即 +、-、*、/、%、&、|、>。
  2. 我们可以重载所有一元运算符,即 ++、–、true、false、+、-、~。
  3. 一些运算符如 &&、||、[] 、() 不能重载。
  4. 我们可以成对重载关系运算符。它们是 ==、=、、= 等
  5. 我们可以重载复合运算符,因为它们已经相对于二元运算符重载了。

这些是一些我们可以重载的预定义运算符。

语法:

下面是实现运算符重载的语法:

public static classname  operator op (parameters)
{
// Code
}

对于一元运算符

public static classname operator op (t)
{
// Code
}

对于二元运算符

public static classname operator op (t1, t2)
{
// Code
}

Operator 是用于实现运算符重载的关键字。运算符重载的返回类型永远不能为 void。在运算符重载中,始终优先考虑用户定义的实现而不是预定义的实现。在重载中,重载的方法应该有不同类型的参数,不同的参数数量以及参数的顺序应该不同。因此运算符重载方法与任何其他方法相同。在用户定义的实现中,语法和优先级无法修改。在二元运算符中,.operator 的左边是成员,右边的对象称为参数。

C# 中运算符重载的示例

以下示例展示了如何在 C# 中实现运算符重载概念:

示例#1

使用一元运算符重载运算符。 在此示例中,一元运算符用于重载。 – 运算符用于调用重载方法的名为Example 的类中。  正如下面的代码中提到的,编译器将其视为operator-(obj);.

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OperatorOverloading
{
class Example
{
public int val1, val2;
public Example(int no1, int no2)
{
val1 = no1;
val2 = no2;
}
public Example()
{
}
public static Example operator -(Example eg1)
{
eg1.val1 = -eg1.val1;
eg1.val1 = -eg1.val1;
return eg1;
}
public void Print()
{
Console.WriteLine("value1 =" + val1);
Console.WriteLine("value2 =" + val2);
Console.Read();
}
class Program
{
static void Main(string[] args)
{
Example eg = new Example(30, -60);
eg.Print();
Example eg1 = new Example();
eg1 = -eg;
eg1.Print();
Console.Read();
}
}
}
}

输出:

C# 中的运算符重载

示例#2

使用二元运算符重载运算符。 在这个例子中,二元运算符用于展示如何实现运算符重载。 + 运算符用于添加对象。操作员接收一个参数。在代码中,num 是名为Example 的类的对象,该对象将被传递到该类。在重载中,运算符的左边是成员,右边的对象称为参数。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OperatorOverloading
{
class Example
{
public int num;
public Example()
{
num = 0;
}
public Example(int n)
{
num = n;
}
public static Example operator +(Example e1, Example e2)
{
Example e3 = new Example();
e3.num = e1.num + e2.num;
return e3;
}
public void display()
{
Console.WriteLine("{0}", num);
}
}
class Program
{
static void Main(string[] args)
{
Example num = new Example(200);
Example num1 = new Example(300);
Example num2 = new Example();
num2 = num + num1;
num.display();
num1.display();
num2.display();
Console.Read();
}
}
}

输出:

C# 中的运算符重载

示例 #3

运算符重载和继承。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OperatorOverloading
{
class Example
{
public int num;
public Example()
{
num = 0;
}
public Example(int n)
{
num = n;
}
public static Example operator +(Example e1, Example e2)
{
Example e3 = new Example();
e3.num = e1.num + e2.num;
return e3;
}
public void display()
{
Console.WriteLine("{0}", num);
}
}
class Example1 : Example
{
private double a;
private double b;
public Example1(double x, double y)
{
a = x;
b = y;
}
public Example1()
{
}
public void Show()
{
Console.WriteLine("{0} {1}", a, b);
}
}
class Program
{
static void Main(string[] args)
{
Example1 num = new Example1(20.0,2.3);
num.Show();
Example1 num1 = new Example1(3.0,3.1);
num1.Show();
Example1 num2 = new Example1();
//num2 = num + num1;
//num2.Show();
Console.Read();
}
}
}

输出:

C# 中的运算符重载

重载运算符也可以继承到派生类。因为不可能在派生类中声明运算符来隐藏基类声明的运算符。

示例#4

使用相等运算符重载运算符。在此示例中,使用相等运算符显示了运算符重载。相等运算符用于我们想要进行比较的地方。我们可以重载类中的方法来进行比较。在此代码中,对象 e1 和 e2 的值相同。但他们的参考文献不同。对象值的比较是基于引用的。对于 e2 和 e3,它指的是同一个对象。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OperatorOverloading
{
class Example
{
private int a;
private int b;
public Example()
{
}
public Example(int x, int y)
{
a = x;
b = y;
}
public void Display()
{
Console.WriteLine("{0} {1}", a, b);
}
}
class Program
{
public static void Main()
{
Example e1 = new Example(30, 20);
e1.Display();
Example e2 = new Example(30, 20);
e2.Display();
Example e3 = e2;
e3.Display();
if (e1.Equals(e2))
Console.WriteLine("equal");
else
Console.WriteLine("not equal");
if (e2.Equals(e3))
Console.WriteLine("equal");
Console.ReadLine();
}
}
}

输出:

C# 中的运算符重载

结论

运算符重载是一个重要的概念。它提供了操作符在多个操作中的可重用性。在 C# 中,我们只能重载一组已定义的参数。并非所有 .Net 语言都支持运算符重载。因此在 C# 中,它在用户定义的实现方面提供了额外的功能。

以上是C# 中的运算符重载的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:Method Overriding in C#下一篇:C# Functions