索引器是一种兼具属性与数组特征的表示法

sealed class PhoneBook
	{
        private int used;
        private Name[] names;
        private PhoneNumber[] phoneNumbers;

		public PhoneBook()
		{
			int initialSize = 0;
			this.used = 0;
			this.names = new Name[initialSize];
			this.phoneNumbers = new PhoneNumber[initialSize];
		}
		
		public void Add(Name name, PhoneNumber number)
		{
			enlargeIfFull();
			this.names[used] = name;
			this.phoneNumbers[used] = number;
			this.used++;
		}
		
		// write 1st indexer here
        public Name this[PhoneNumber number]
        {
            get
            {
                int i = Array.IndexOf(this.phoneNumbers, number);
                if (i != -1)
                {
                    return this.names[i];
                }
                else
                {
                    return new Name();
                }
            }
        }
		// write 2nd indexer here
        public PhoneNumber this[Name name]
        {
            get
            {
                int i = Array.IndexOf(this.names, name);
                if (i != -1)
                {
                    return this.phoneNumbers[i];
                }
                else
                {
                    return new PhoneNumber();
                }
            }
        }

		private void enlargeIfFull()
		{
			if (this.used == this.names.Length)
			{
				int bigger = used + 16;
				
				Name[] moreNames = new Name[bigger];
				this.names.CopyTo(moreNames, 0);
				
				PhoneNumber[] morePhoneNumbers = new PhoneNumber[bigger];
				this.phoneNumbers.CopyTo(morePhoneNumbers, 0);
						
				this.names = moreNames;
				this.phoneNumbers = morePhoneNumbers;
			}
		}

  

posted on 2014-12-23 19:43  小太  阅读(146)  评论(0编辑  收藏  举报