【C#】 1. 创建Array数据类型

来源:互联网 发布:linux tesseract yum 编辑:程序博客网 时间:2024/06/06 06:32
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace UserDefinedDataEXP{    //Array<T>: containers for one-dimensional data of arbitrary type T. It can hold any data    //type and its main responsibility is to store and access one-dimensional data.    public class Array<T>    {        // 变量 m_arr 和 m_startIndex        protected T[] m_arr; // Standard C syntax        protected int m_startIndex; // User-definable start index        //构造器1:输入T[] source, int minIndex        public Array(T[] source, int minIndex)        {            m_startIndex = minIndex;            m_arr = new T[source.Length];            for (int i = 0; i < source.Length; i++)            {                if (source[i] is ICloneable)    //source[i],即T类型是否执行了ICloneable接口                    m_arr[i] = (T)(source[i] as ICloneable).Clone();                else                    m_arr[i] = source[i];            }        }        //构造器2:输入int len        public Array(int len)        {            m_startIndex = 0;             m_arr = new T[len];        }        //构造器3:输入T[] source        public Array(T[] source)         {            this.m_startIndex = 0;            this.m_arr = new T[source.Length];            for (int i = 0; i < source.Length; i++)            {                if (source[i] is ICloneable)    //source[i],即T类型是否执行了ICloneable接口                    m_arr[i] = (T)(source[i] as ICloneable).Clone();                else                    m_arr[i] = source[i];            }        }        //构造器4:输入int len, int minIndex        public Array(int len, int minIndex)        {            this.m_startIndex = minIndex;            this.m_arr = new T[len];        }        //构造器5:int len, int minIndex, T initvalue        public Array(int len, int minIndex, T initvalue)        {            this.m_startIndex = minIndex;            this.m_arr = new T[len];            for (int i = 0; i < len; i++)            {                m_arr[i] = initvalue;            }        }        //返回m_arr数组元素        public T this[int pos]        { // User-defined position            get            {                return m_arr[pos - m_startIndex];            }            set            {                m_arr[pos - m_startIndex] = value;            }        }        //MaxIndex属性        public int MaxIndex        {            get { return m_arr.Length+m_startIndex-1; }                    }                //MinIndex属性        public int MinIndex         {            get { return m_startIndex; }        }        //Print函数        public void print()        {            for (int i =m_startIndex; i < m_arr.Length+m_startIndex; i++)            {                Console.Write("{0}, ", this[i].ToString());            }            Console.WriteLine();               }    }    class Array    {        static void Main(string[] args)        {            //1.测试构造器4            int startIndex = -1;            Array<double> arr = new Array<double>(10, startIndex);            for (int j = arr.MinIndex; j <= arr.MaxIndex; j++)            {                arr[j] = (double)(j);            }            arr[arr.MinIndex] = 99.98;            arr.print();            // 2.测试构造器3            int size = 10;            int[] arr2 = new int[size]; // Store data in a contiguous block            // Initialize for            for (int j = 0; j < size; ++j)            {                arr2[j] = j + 1;            }            Array<int> arr3 = new Array<int>(arr2);            arr3[0] = 100000;   //与arr2不享用值            arr3.print();            Console.WriteLine(arr2[0]);                        //3.超出索引界限            try            {                Array<int> myArr = new                Array<int>(20);                myArr[10000] = 34;            }            catch (IndexOutOfRangeException e)            {                Console.WriteLine(e.Message);            }            //4.初始化            Array<int> arr4 = new Array<int>(10,0,4);            arr4.print();            Console.ReadLine();        }    }}


0 0
原创粉丝点击