---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
1、逻辑运算符|,&,!也可以重载,从而应用与自定义的类的运算,就像其默认的功能,从而返回一个bool 类型的值,我们也可以定义它返回其他类型的值,但是,它们的返回值最好还是定义个bool类型的值,以防造成混乱。
2、重载关系运算符,并且在结束后返回一个bool类型的值。
需要注意的是,有的运算符是需要成对重载的,例如>与<,>=与<=,==与!=等等,不然在编译的时候,会报错。
假设下面的例子是:两个公司,通过重载运算符,得出是否应该合并,当人数小于一定数量的时候,判断bool 值得出的是真还是假,从而判断该公司是否应该合并。
这样的好处就是,我们不必知道每个班级的人数,从而判断出是否应该合并。
3、对于运算符的重载,当我们使用的时候,要注意两点:
(1)维持运算符的原始意义,就是按照运算符的功能,重载后的功能是一样的,不然会对系统的构架有不良的影响,从而影响系统整个性能。
(2)有些运算符是不能够重载的例如:=,&&,||等。
下面是重载逻辑运算符:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _04
{
class Program
{
static void Main(string[] args)
{
int stu;
stu = 10;
bool flag;
bool huo;
bool fei;
Company c = new Company();
Company csum = new Company();
Company csub = new Company();
Company zero = new Company();
zero = zero - 30;
Console.WriteLine(c.stu);
csum = csum + stu;
Console.WriteLine(csum.stu);
csub = csub - stu;
Console.WriteLine(csub.stu);
flag = csum & csub;
if (flag == true)
{
Console.WriteLine("两公司可以合并");
}
if (flag == false)
{
Console.WriteLine("两公司不可以合并");
}
huo = zero | c;
if (huo == true)
{
Console.WriteLine("两公司可以合并");
}
if (huo == false)
{
Console.WriteLine("两公司不可以合并");
}
fei = !zero;
if(fei==true )
{
Console .WriteLine ("公司没有人,必须撤销!");
}
else
{
Console .WriteLine ("公司还有人,不能撤销");
}
Console.ReadKey();
}
}
class Company
{
public int stu;
public Company()
{
stu = 30;
}
public static Company operator +(Company c, int sum)
{
int stu;
stu = c.stu + sum;
Company myc = new Company();
myc.stu = stu;
return myc;
}
public static Company operator -(Company c, int sub)
{
int stu;
stu = c.stu - sub;
Company myc = new Company();
myc.stu = stu;
return myc;
}
public static bool operator &(Company c1, Company c2)
{
bool flag;
if (c1.stu + c2.stu >= 50)
{
flag = false;
}
else
{
flag = true;
}
return flag;
}
public static bool operator |(Company c1, Company c2)
{
bool flag;
if (c1.stu == 0 || c2.stu ==0)
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
public static bool operator !(Company c)
{
bool flag;
if (c.stu == 0)
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
}
}
下面的例子是重载关系运算符,这是就需要上面提到的内容,需要成对出现,不能只重载一种运算符。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _01
{
class Program
{
static void Main(string[] args)
{
int com;
bool flag;
Company c = new Company();
Company csum = new Company();
Company csub = new Company();
com = 20;
Console.WriteLine(c.total);
csum = csum + com;
Console.WriteLine(csum.total);
csub = csub - com;
Console.WriteLine(csub.total);
flag = csum > csub;
if (flag == true)
{
Console.WriteLine("csum公司人数大于csub公司人数");
}
else
{
Console.WriteLine("csum公司人数小于csub公司人数");
}
flag = csub<csum;
if (flag == true)
{
Console.WriteLine("csub公司人数小于csum公司人数");
}
else
{
Console.WriteLine("csub公司人数大于csum公司人数");
}
Company c1 = new Company();
Company c2 = new Company();
flag=c1.Equals(c1);
com = c1.GetHashCode();
Console.WriteLine(com);
Console.WriteLine(flag);
Console.ReadKey();
}
}
class Company
{
public int total;
public Company()
{
total = 30;
}
public static Company operator +(Company c, int num)
{
Company myc = new Company();
myc = c;
myc.total = c.total + num;
return myc;
}
public static Company operator -(Company c, int sub)
{
Company myc = new Company();
myc = c;
myc.total = c.total - sub;
return myc;
}
public static bool operator >(Company c1, Company c2)
{
bool flag;
if (c1.total > c2.total )
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
public static bool operator <(Company c1, Company c2)
{
bool flag;
if (c1.total < c2.total)
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------