1. 程式人生 > >C#運算子過載和索引器

C#運算子過載和索引器

一、運算子過載

        接著上一篇部落格的敘述,我們看到了運算子的過載,過載在上一篇部落格中講過了,其實就是對一個方法的不同情況的處理過程。         運算子的過載就是從新定義運算子的意義,總的來說就是讓運算子的作用與原來的作用有稍許的不同,但是表示的方法還是一樣的,需要注意的是,過載的邏輯運算子需要成對出現,如:          ==和!=             > 和  <=     < 和  >=     等 舉個例子:
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是用來獲取索引以新增。
下面照片的例子非常形象:
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);
}
        通過這個例子我們看出相簿(album)這個類有個索引,就是宣告的photo[index],其中的index代表的就是照片物件的序號,查詢照片的時候可以通過索引查,也可以通過名字查。這就是索引的作用。

三、小結

        通過對這兩個例子具體應用的總結,瞭解了前面學習的內容應用和另外的一種使用方法,除此之外就是用this來使用索引,更是很稀奇,所以看來面向物件的程式設計我們還有很多的東西要學習啊。