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();

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章