C#关于操作符的重载

1、操作符重载:
一元操作法重载:一个参数
二元操作符重载:两个参数
用户定义的数据类型转换:为了满足需求把一种类型转化为另一种类型
2、操作符的开始必须以public  static修饰
对双目运算的操作符必须同时重载,不能只重载一个:
true false、== !=、<|>、>=|<=、这些操作符必须同时重载,如果只重载其中的一个将会发生 编译错误
3、如果重新了Equal就要超重写GetHashCode,只写其中的一个将会发生 警告信息
4、c#中的操作符 一般在类中声明,如果在外面声明了,就不属于这个类,并且还会影响其他运算的操作。
5、操作符是public的,所有的操作符都是public的 .操作符是static的,所有的操作符都是static的
6、操作符 永远不具有多态性 ,而且不能使用virtual、abstract、override或者sealed修饰符。
7、用户自定义了 前置++/--操作符重载,就不用定义后置++/--了,编译器会 自动设置后置++/--操作符重载
6、给出下面的一个例子:
      namespace ConsoleApplication8

{

/// <summary>

/// 姓名类

/// </summary>

class Namer

{

private string FirstName;

private string LastName;

public Namer()

{

this.Init(null,null);

}

public Namer(string fn,string ln)

{

this.Init(fn,ln);

}

private void Init(string fn,string ln)

{

this.FirstName=fn;

this.LastName=ln;

}

/// <returns>如果姓名中姓或名有一个为空,就返回假</returns>

public static bool operator true(Namer n)

{

if(n.FirstName==null || n.LastName==null)

return false;

else

return true;

}

public static bool operator false(Namer n)

{

if(n.FirstName==null || n.LastName==null)

return false;

else

return true;

}

public static bool operator ==(Namer n1,Namer n2)

{

if(n1.FirstName==n2.FirstName && n1.LastName==n2.LastName)

return true;

else

return false;

}

public static bool operator !=(Namer n1,Namer n2)

{

if(n1.FirstName!=n2.FirstName || n1.LastName !=n2.LastName)

return true;

else

return false;

}

public static bool operator >(Namer n1,Namer n2)

{

return (n1.FirstName.CompareTo(n2.FirstName)>0 && n1.LastName.CompareTo(n2.LastName)>0);

}

public static bool operator <(Namer n1,Namer n2)

{

return (n1.FirstName.CompareTo(n2.FirstName)<0 && n1.LastName.CompareTo(n2.LastName)<0);

}

/// 重写方法,必须有,后面的111是乱加的,你也可以写其它的

public override int GetHashCode()

{

return base.GetHashCode()*111;

}

/// 重写方法,必须有

public override bool Equals(object obj)

{

return base.Equals (obj);

}

/// 重写方法,可以选择有

public override string ToString()

{

return "姓:"+this.FirstName+" 名:"+this.LastName;

}

public static void Main()

{

Namer n1=new Namer("li","zanhong");

Namer n2=new Namer("ahang","aan");

//Namer n2=new Namer("li","zanhong");

if(n1==n2)

Console.WriteLine("一样的名字");

else

Console.WriteLine("不一样的名字");

/

if(n1!=n2)

Console.WriteLine("不一样的名字成立");

else

Console.WriteLine("同样的名字成立");

/

if(n1>n2)

Console.WriteLine(n1.ToString()+">"+n2.ToString());

else if(n1<n2)

Console.WriteLine(n1.ToString()+"<"+n2.ToString());

else

Console.WriteLine("没有正确比较");

Console.ReadLine();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值