閱讀38 返回首頁    go 技術社區[雲棲]


C#——運算符重載和索引器

       一、什麼是運算符?

       所謂運算符重載,就是對已有的運算符重新進行定義,賦予其另一種功能,以適應不同的數據類型。自定義類的賦值運算符重載函數的作用與內置賦值運算符的作用類似,但是要要注意的是,它與拷貝構造函數與析構函數一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定默認的賦值運算符重載函數,那麼係統將會自動提供一個賦值運算符重載函數。

       下麵是個小例子:

namespace 運算符重載
{
    class Program
    {
        static void Main(string[] args)
        {
            Vector vect1 ,vect2,vect3;
            vect1 = new Vector(1.0, 4.0, 3.0);
            vect2 = new Vector(vect1);
            vect3 = vect1 + vect2;
            Console.WriteLine(vect3.ToString());
        }
    }
    class Vector
    {
        private double x, y, z;
        public double X
        {
            get { return x; }
            set { x = value; }
        }
        public double Y
        {
            get { return y; }
            set { y = value; }
        }
        public double Z
        {
            get { return z; }
            set { z = value; }
        }
        public Vector ()
        {
            x = 0;
            y = 0;
            z = 0;
        }
        public Vector (Vector rhs)
        {
            x = rhs.x;
            y = rhs.y;
            z = rhs.z;
        }
        public Vector (double x,double y,double z)
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }
        public override string ToString()
        {
            return "X的坐標是:" + X +"Y的坐標是:" + Y+ "Z的坐標是:" + Z;
        }
        public static Vector operator +(Vector lhs,Vector rhs)
        {
            Vector result = new Vector(lhs);
            result.x += rhs.x;
            result.y += rhs.y;
            result.z += rhs.z;
            return result;
        }
    }
}
       二、什麼是索引器?

       所謂的索引器,在語法上方便創建客戶端應用程序可將其作為數組訪問的類、結構或接口。類似與屬性對類中成員變量起到了保護作用,體現了麵向對象的一種屬性——封裝。經常是用是在主要用於封裝內部集合或數組的類型中實現的。

       下麵是一個示例,希望通過這個例子能更好的了解什麼是索引。

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Ablum MyAblum1 = new Ablum(2);
            Photo first = new Photo("小李");
            Photo second = new Photo("小石");
            MyAblum1[0] = first;
            MyAblum1[1] = second;
            Photo testPhots = MyAblum1[0];
            Console .WriteLine(testPhots.Title );

            Photo testPhotos = MyAblum1["小石"];
            Console.WriteLine(testPhotos.Title);
        }
    }
    class Photo
    {
        private string PhotoTitle;
        public Photo()
        {
            PhotoTitle = "lee";
            
        }
        public Photo (string title)
        {
            PhotoTitle = title;
        }
        public string Title
        {
            get { return PhotoTitle; }
        }
    }
    class Ablum
    {
        Photo[] photos;
        public Ablum ()
        {
            photos = new Photo[3];
        }
        public Ablum (int Capacity)
        {
            photos = new Photo[Capacity];
        }
        public Photo this [int 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 ;
            }
        }
        public Photo this [string title]
        {
            get
            {
                foreach (Photo p in photos )
                {
                    if (p.Title == title)
                        return p;
                }
                Console.WriteLine("找不到");
                return null;
            }
        }
    }
}

最後更新:2017-04-03 12:54:02

  上一篇:go gnuradio中讀取vector_sink數據
  下一篇:go 使用Style自定義ListView快速滑動圖標