警告:下面的示例有点做作,但我正在尝试了解C#中的委托和事件。
下面的代码由两个类组成:MyClass类包含一个 ArrayList 作为属性、一个委托成员和事件处理程序成员。MainClass只有两个函数,一个是main (),另一个是委托调用的函数,称为theHandler。
我的意图是当我添加到 myClass 对象中实例化的 ArrayList 中时:事件处理程序调用theHandler函数并将添加的内容写入控制台的 do-while 循环中的 ClassObj。但是,它似乎没有调用 Handler 函数。
我知道 ArrayList 正在更新,当我使用(字符串)而不是 ArrayList 时,我能够让委托/事件进程正常工作。
public class myClass{
public delegate void classEventHandler(ArrayList anArray);
private ArrayList strArray = new ArrayList();
public event classEventHandler arrayChanged;
public ArrayList arrayVal{
get{
return strArray;
}
set{
this.strArray.Add(value);
this.arrayChanged(strArray);
}
}
}
class MainClass
{
public static void Main (string[] args)
{
myClass ClassObj = new myClass();
ClassObj.arrayChanged += theHandler;
string str;
do{
str = Console.ReadLine();
ClassObj.arrayVal.Add(str);
}while(!str.Equals("exit"));
Console.ReadLine();
}
public static void theHandler(ArrayList newArray){
foreach(object o in newArray){
Console.WriteLine("{0}", o.ToString());
}
}
}
我的猜测是它与 ArrayLists 被用作类属性有关,但我不确定。