在写这篇文档的时候参考了网上的资料,下边是参考资料的网址
http://www.cnblogs.com/allenlooplee/archive/2005/06/14/174427.aspx
http://it-zero.com/empolder/every.asp?id=153&class1=2&class2=12
http://club.yesky.com/bbs/jsp/view.jsp?articleID=1672664
http://www.cnblogs.com/whxleem/articles/23800.html
下边是关于水果栏问题的代码,是由本人在参考了网上的资料后自己编写的,其中用到了反射中的Invoke方法和哈希表的一些知识。
下边是源代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection.Emit;
using System.Reflection;
using System.Collections;
namespace re
{
class Program
{
static void
{
Fruits.ht.Add("Apple", Fruits.AppleList);//向水果栏中添加一个苹果列表
Fruits.AppleList.Add(new Apple());//向苹果列表中添加两个苹果
Fruits.AppleList.Add(new Apple());
Fruits.BananaList.Add(new Banana());//向香蕉列表中添加三个香蕉
Fruits.BananaList.Add(new Banana());
Fruits.BananaList.Add(new Banana());
Fruits.ht.Add("Banana", Fruits.BananaList);//在水果栏中添加一个香蕉列表
Fruits yan = new Fruits();
Banana banan=new Banana();//再次加入一个香蕉
banan.Add(banan);
yan.Invoke(banan.GetType(), "Cut");//调用香蕉的Cut方法水果栏中有几个香蕉就调用几次CUT方法
Apple apple = new Apple();
yan.Invoke(apple.GetType(), "Core");//调用苹果的Core方法水果栏中有几个苹果就调用几次Core方法
Watermelon watermelon = new Watermelon();//新添加一个西瓜列表
Fruits fruits = new Fruits();
fruits.Add(watermelon);//并添加一个西瓜
watermelon.Invoke(watermelon.GetType(), "Clear");
}
}
class Fruits
{
public static Hashtable ht = new Hashtable(200);//定义一个哈表来维护水果类
public static ArrayList AppleList = new ArrayList();//定义一个苹果种类的列表
public static ArrayList BananaList = new ArrayList();//定义一个香蕉种类的列表
public Fruits()
{
}
public virtual void Core()
{
}
public virtual void Cut()
{
}
public virtual void Clear()
{
}
public void Add(Fruits fruit)
{
if (!this.Contain(fruit.GetType()))
{
ArrayList fruitList = new ArrayList();//加一个水果筐
fruitList.Add(fruit);//在新加的水果筐中加入一个水果
ht.Add(fruit.ToString().Substring(3), fruitList);//加一个水果筐到哈希表中
}
else
{
((ArrayList)ht[fruit.GetType().ToString().Substring(3)]).Add(fruit);//向以有的水果栏中放入一个水果
}
}
public bool Contain(Type fruit)
{
foreach (DictionaryEntry de in ht)
{
if (fruit.ToString().Substring(3) == de.Key.ToString())//如果已经有了该种水果
{
return true;
}
}
return false;
}
public void Invoke(Type fruitType, string methodName)
{
ArrayList fruitList =(ArrayList) ht [fruitType.Name];
BindingFlags bindingFlags = BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.IgnoreCase |
BindingFlags.DeclaredOnly |
BindingFlags.InvokeMethod;
foreach (object obj in fruitList)//调用该类的每一个对象的方法
{
fruitType.InvokeMember(methodName, bindingFlags, null, obj, null);
}
}
}
class Banana : Fruits
{
public override void Cut()
{
Console.WriteLine("Cut Myself");
}
}
class Apple : Fruits
{
public override void Core()
{
Console.WriteLine("Core Myself");
}
}
class Watermelon : Fruits
{
public override void Clear()
{
Console.WriteLine("Clear Myself");
}
}
}
浙公网安备 33010602011771号