e g:= 0; writeln(FFruitName+'投入'+FInput.ToString+'产出'+g.ToString); result:=g;
68: end; 69: 70: { TCitrusFruit } 71: function TCitrusFruit.gain: Integer; 72: var 73: g: Integer;
74: begin 75: 76: 77: g:=FInput*3 ; writeln(FFruitName+'投入'+FInput.ToString+'产出'+g.ToString); result:=g;
78: end; 79: 80: { TTropicalFruit } 81: function TTropicalFruit.gain: Integer; 82: var 83: g: Integer;
84: begin 85: 86: 87: g:=inherited gain ; writeln(FFruitName+'投入'+FInput.ToString+'产
出'+g.ToString); result:=g;
88: end; 89: 90: end.
现在轮到 C#程序员用 C#开发 Gardener 配件 (GardenerLib.dll) 的时候了。 这个 Gardener 配件显然包括了 TGardener 类, 不过 C#程序员更喜欢用 C#的习惯来命名一个不用 T 作前缀 的类 Gardener。当然 Gardener 类需要用到(关联)TFruit 类及其派生类,因此需要引用 Fruit 配件(fruitLib.dll) 。 创建 C#类库(Class Library)的工具很多,可以用微软的 Visual C#.NET 或 Borland 的 C# Builder。 通过这两个开发工具都可以方便地添加 fruitLib.dll 引用, 他们的界面分别如图 6 和图 7 所示,操作也很相似。 如果我们在 C#类库 GardenerLib 项目中察看 fruitLib.dll 引用中的类信息, 可以看到其中 可用的一些类和类成员,如图 8 所示(以微软的 Visual C#.NET 为例) 。
图 6 微软 Visual C#.NET 添加 fruitLib.dll 引用的界面
图 7 Borland 的 C# Builder 添加 fruitLib.dll 引用的界面
图 8 在 C#类库 GardenerLib 项目中察看 fruitLib.dll 引用中的类信息
示例程序 2 给出了 C# 类库 GardenerLib 中的 Gardener.cs
源代码。注意在代码第 2 行, using 了 Fruit,这样我们就可以在程序中直接使用这个 Fruit 配件(fruitLib.dll)中的类了。 但是,由于在创建类实例时不同语言上的差异,我们不能使用 Delphi 的构造函数(Create) , 而是要改用 C#的 new 来创建类的实例,如代码的第 23-27 行所示。 示例程序 2 C# 类库 GardenerLib 中的 Gardener.cs 源代码
1: using System; 2: using Fruit;//来自引用的 fruitLib.dll 3: 4: namespace GardenerLB 5: { 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: private void plant() { Console.WriteLine(""); fruits=new TFruit[5] ; } public Gardener(string n) { name="勤劳的园丁"+n; /// /// 园丁类 /// public class Gardener { public string name; private TFruit[] fruits;
23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: } } } }
fruits[0]=new TTropicalFruit("香蕉",1000); fruits[1]=new TBerry("葡萄",2000); fruits[2]=new TTropicalFruit("菠萝",2000); fruits[3]=new TBerry("草莓",1000); fruits[4]=new TCitrusFruit("橘子",100