using System;2
using System.Collections.Generic;3
using System.Text;4

5
namespace ConsoleApplication16
{7
public abstract class Animal8
{9
protected string name;10

11
public string Name12
{13
get { return name; }14
set { name = value; }15
}16
public Animal()17
{18
name = "The animal with no name!";19
}20
public Animal(string newName)21
{22
name = newName;23
}24
public void Feed()25
{26
Console.WriteLine("{0}has been Fed",name);27
}28
}29
public class Cow : Animal30
{31
public void Milk()32
{33
Console.WriteLine("{0}has been milked",name);34
}35
public Cow(string newName)36
: base(newName)37
{ 38

39
}40
}41
public class Chicken : Animal42
{43
public void LayEgg()44
{45
Console.WriteLine("{0}has laid an egg",name);46
}47
public Chicken(string newName)48
: base(newName)49
{ 50
}51
}52

53
}54

using System;2
using System.Collections.Generic;3
using System.Text;4
using System.Collections;5

6
namespace ConsoleApplication17
{8
class Program9
{10
static void Main(string[] args)11
{12
Console.WriteLine("create an array type collection of animal "+"object and use it");13
Animal[] animalArray= new Animal[2];14
Cow mycow1 = new Cow("Ddirde");15
animalArray[0] = mycow1;16
animalArray[1] = new Chicken("ken");17
foreach (Animal myAnimal in animalArray)18
{19
Console.WriteLine("New{0}object added to Array collecton "+"NAME={1}",myAnimal.ToString(),myAnimal.Name);20
}21
Console.WriteLine("Array collection contains {0} object",animalArray.Length);22
animalArray[0].Feed();23
((Chicken)animalArray[1]).LayEgg();24
Console.WriteLine();25

26
Console.WriteLine("Create an arraylist type collection of Animal "+"object in use it!");27
ArrayList animalArrarylist = new ArrayList();28
Cow mycow2 = new Cow("Hayley");29
animalArrarylist.Add(mycow2);30
animalArrarylist.Add(new Chicken("roy"));31

32
foreach (Animal myanimal in animalArrarylist)33
{34
Console.WriteLine("new {0} object added to Arraylist collection ,"+"Name ={1}",myanimal.ToString(),myanimal.Name);35
}36
Console.WriteLine("arraylist contains {0} objects",animalArrarylist.Count);37
((Animal)animalArrarylist[0]).Feed();38
((Chicken)animalArrarylist[1]).LayEgg();39
Console.WriteLine();40

41
Console.WriteLine("additional manipulation of animallist: ");42
animalArrarylist.RemoveAt(0);43
((Animal)animalArrarylist[0]).Feed();44
animalArrarylist.AddRange(animalArray);45
((Chicken)animalArrarylist[2]).LayEgg();46
Console.WriteLine("the animal called {0} is at index {1}",mycow1.Name,animalArrarylist.IndexOf(mycow1));47
mycow1.Name = "jane";48
Console.WriteLine("the animal is now called {0} ",((Animal)animalArrarylist[1]).Name);49
}50
}51
}这个范例创建了两个对象集合,第一个集合使用System.Arrat类(着是一个简单的数组),第二个集合使用System.Arraylist类。这两个集合都是Animal对象,在Animal.cs中被定义。Animal类是抽象类,所以不能进行实例化。但通过多态性,可以使集合的项目成为派生于Animal类的cow和chicken的实例。
这些数组在program.cs的main()方法中创建好后,就可以显示其特性和功能。有几个处理操作可以应用到array和arraylist集合上,但是他们的语法略有区别,但是也有一些操作使用更高级的arraylist类型。
下面首先通过比较这两种集合的代码和结果,讨论一下这两种集合类似的操作。
首先集合的创建--对于简单的数组来说,必须用固定的大小来初始化数组,这样才能使用它。使用标准语法创建数组animalarray:
Animal[] animalArray= new Animal[2];另一方面,arraylist集合不需要初始化其大小,所以可以使用下面的代码创建列表animalArrayList:
ArrayList animalArrarylist = new ArrayList();
这个类还有另外两个构造函数可以使用,第一个构造函数把现有的集合作为参数,把现有的集合的内容复
制到新的实例中;而另外一个构造函数也通过一个参数设置集合的容量(capacity)。这个容量使用一个
int值指定,设置集合中可以包含的项目数。但是这并不是真实的容量,因为如果集合的项目个数超过了
这个值,容量就会自动增大一倍。
因为数组是引用类型的数组(例如Animal和Animal派生的对象),所以用一个长度初始化数组并没有初始
化他所包含的项目。要使用一个指定的项目还,该项目还需要初始化,即需要给这个项目赋初始化了的对
象:
Cow mycow1 = new Cow("Ddirde");2

3
animalArray[0] = mycow1;4

5
animalArray[1] = new Chicken("ken");6

7

这段代码以两种方式完成了该初始化任务:用现有的cow对象来赋值,或者通过创建新的chicken对象来赋值。主要区别是前者引用了数组的对象—我们在代码的后面使用了这种方式。
对于arraylist集合,它没有现成的项目,也没有null引用的项目。这样就不能以相同的方式给索引赋一些新实例。我们使用arraylist对象的add()方法添加新项目:
Cow mycow2 = new Cow("Hayley");2

3
animalArrarylist.Add(mycow2);4

5
animalArrarylist.Add(new Chicken("roy"));6

7

除了语法略有不同外,还可以用相同的方式把新对象或现有的对象添加到集合中。以这种方式添加完项目后,就可以使用与数组相同的语法来重写它们,例如:
animalArrayList[0]=new Cow(“
但不能在这个范例中这么做。
集合—无论是简单的数组,还是比较复杂的集合都用的不多,除非它们可以访问属于她们的项目。简单数组是强类型化的,可以之间访问它们所包含的项目类型。所以可以直接调用项目的方法:
animalArray[0].Feed();
数组的类型是抽象类型Animal,因此不能直接调用由派生类提供的方法。而必须使用数据类型转换:
((Chicken)animalArray[1]).LayEgg();
ArrayList集合是System.Object对象的集合(通过多态性赋给Animal对象),所以必须对所有的项目进行数据类型转换:
animalArrarylist.RemoveAt(0);2

3
(Animal)animalArrarylist[0]).Feed();4

5
((Chicken)animalArrarylist[1]).LayEgg();6

7

待续!!!


浙公网安备 33010602011771号