C#運算子過載和索引器
阿新 • • 發佈:2019-02-07
一、運算子過載
接著上一篇部落格的敘述,我們看到了運算子的過載,過載在上一篇部落格中講過了,其實就是對一個方法的不同情況的處理過程。 運算子的過載就是從新定義運算子的意義,總的來說就是讓運算子的作用與原來的作用有稍許的不同,但是表示的方法還是一樣的,需要注意的是,過載的邏輯運算子需要成對出現,如: ==和!= > 和 <= < 和 >= 等 舉個例子:private const double Epsilon=0.0000001; public static bool operator ==(vector lhs, vector rhs) { if (system.math.abs(lhs.x-rhs.x)<epsilon&&system.math.abs(lhs.y-rhs.y)<Epsilon&&system.math.abs(lhs.z-rhs.z)<Epsilon) return true; else return false; } public static bool operator !=(vector lhs,vector rhs) { return !(lhs==rhs); }
其中,lhs和rhs為操作符左右兩邊的運算元,而重新定義的正是兩個運算元之間的關係,注意是這裡是邏輯關係,不過具體的實現情況還是沒有太弄清楚,只是知道了他能重寫功能,並且只是在操作符的特徵下重寫,例如邏輯運算輸出的結果只能是1或0等。
二、索引器
索引器通俗的來說就是一個宣告物件的標號,以陣列為例子,他既可以用裡面所儲存的資料來表示,又可以用陣列的下標來表示這個物件,這就是索引器的作用。實際的用法就是:[訪問修飾符]資料型別 this [資料型別 識別符號]
{
get{};
set{};
}
其中get是用來獲取索引以檢索,set是用來獲取索引以新增。通過這個例子我們看出相簿(album)這個類有個索引,就是宣告的photo[index],其中的index代表的就是照片物件的序號,查詢照片的時候可以通過索引查,也可以通過名字查。這就是索引的作用。class Photo { string_title; public Photo(string title) { this._title=title; } public string Title { get { return _title; } } } class Album { Photo[] photos; public Album (int capacity) { photos =new Photo[capacity]; } public Photo this [index] { get { if (index<0||index>=photos.Length) { console.WriteLine("索引無效"); return null; } return photos[index]; } set { if(index<=0||index>=photos.Length) { console.writeLine ("索引無效"); return; } photos[index]=value; } } } static void Main(string[] args) { Album friends = new Album(3); Photo first =new Photo("Jenn"); Photo second=new Photo("Smith"); Photo third=new Photo("Mark"); friends[0]=frist; friends[1]=second; friends[2]=third; Photo obj1Photo =friends[2]; console.writeline(obj1Photo.Title); Photo obj2Photo =friends["Jenn"]; console.writeline(obj2Photo.Title); }