直接说是什么事情吧,谁敢说比较了解啊.如果是找文章,看看这篇,MSDN中的帮助也不错.
鄙人写了一篇自认为对.net framework"事件"理解比较透彻的C#代码分析,请各位高手指教一二
http://expert.csdn.net/Expert/TopicView3.asp?id=1169376
鄙人写了一篇自认为对.net framework"事件"理解比较透彻的C#代码分析,请各位高手指教一二
http://expert.csdn.net/Expert/TopicView3.asp?id=1169376
{
delegate void ValueChangedHandler(object theobj); class ExampleA
{
private int v=0; public event ValueChangedHandler Changed; public int Value
{
get{return v;}
set
{
if(value!=v)
{
v=value;
if(Changed!=null)
Changed(this);
}
}
}
}
class App
{
[STAThread]
static void Main(string[] args)
{
ExampleA a=new ExampleA();
Console.WriteLine("Main:"+a.Value);
a.Changed+=new ValueChangedHandler(WhenChanged);
a.Value+=1;
}
static void WhenChanged(object obj)
{
Console.WriteLine("WhenChanged:"+((ExampleA)obj).Value);
}
}
}
{
delegate void ValueChangedHandler(object theobj); class ExampleB
{
private int v=0; //private
private event ValueChangedHandler prv_Changed;
public event ValueChangedHandler Changed
{
add
{
prv_Changed+=value;
}
remove
{
prv_Changed-=value;
}
} public int Value
{
get{return v;}
set
{
if(value!=v)
{
v=value;
if(prv_Changed!=null)
prv_Changed(this);
}
}
}
}
class App
{
[STAThread]
static void Main(string[] args)
{
ExampleB a=new ExampleB();
Console.WriteLine("Main:"+a.Value);
a.Changed+=new ValueChangedHandler(WhenChanged);
a.Value+=1;
}
static void WhenChanged(object obj)
{
Console.WriteLine("WhenChanged:"+((ExampleB)obj).Value);
}
}
}
{
delegate void ValueChangedHandler(object theobj); class ExampleC
{
private int v=0; //private
private event ValueChangedHandler prv_Changed;
public event ValueChangedHandler Changed
{
add
{
prv_Changed+=value;
}
remove
{
prv_Changed-=value;
}
}
virtual protected void OnChanged()
{
if(prv_Changed!=null)
prv_Changed(this);
} public int Value
{
get{return v;}
set
{
if(value!=v)
{
v=value;
OnChanged();
}
}
}
}
class App
{
[STAThread]
static void Main(string[] args)
{
ExampleC a=new ExampleC();
Console.WriteLine("Main:"+a.Value);
a.Changed+=new ValueChangedHandler(WhenChanged);
a.Value+=1;
}
static void WhenChanged(object obj)
{
Console.WriteLine("WhenChanged:"+((ExampleC)obj).Value);
}
}
}
{
delegate void ValueChangedHandler(object theobj); class ClassA
{
private int v=0;
public event ValueChangedHandler Changed;
public int Value
{
get{return v;}
set{
if(value!=v)
{
v=value;
if(Changed!=null)
Changed(this);
}
}
}
}
class ClassB
{
private ClassA a=new ClassA();
private event ValueChangedHandler prv_Changed;
public event ValueChangedHandler Changed
{
add
{
if(prv_Changed==null)
a.Changed+=new ValueChangedHandler(WhenAChanged);
prv_Changed+=value;
}
remove
{
prv_Changed-=value;
if(prv_Changed==null)
a.Changed-=new ValueChangedHandler(WhenAChanged);
}
}
public int Value
{
get{return a.Value+100;}
set{a.Value=value-100;}
}
private void WhenAChanged(object thea)
{
Console.WriteLine("WhenAChanged:"+a.Value);
prv_Changed(this);
}
}
class App
{
[STAThread]
static void Main(string[] args)
{
ClassB b=new ClassB();
b.Value++;
Console.WriteLine("Main:"+b.Value);
b.Changed+=new ValueChangedHandler(WhenChanged);
b.Value++;
}
static void WhenChanged(object obj)
{
Console.WriteLine("WhenBChanged:"+((ClassB)obj).Value);
}
}
}
{
delegate void ValueChangedHandler(object theobj); class ClassA
{
private int v=0;
public event ValueChangedHandler Changed;
virtual public int Value
{
get{return v;}
set{
if(value!=v)
{
v=value;
OnChanged();
}
}
}
virtual protected void OnChanged()
{
if(Changed!=null)
Changed(this);
}
}
class ClassB : ClassA
{
override public int Value
{
get{return base.Value+100;}
set{base.Value=value-100;}
}
override protected void OnChanged()
{
Console.WriteLine("ClassBOnChanged:"+this.Value);
base.OnChanged();
}
}
class App
{
[STAThread]
static void Main(string[] args)
{
ClassB b=new ClassB();
b.Value++;
Console.WriteLine("Main:"+b.Value);
b.Changed+=new ValueChangedHandler(WhenChanged);
b.Value++;
}
static void WhenChanged(object obj)
{
Console.WriteLine("WhenBChanged:"+((ClassB)obj).Value);
}
}
}
{
delegate void ValueChangedHandler(object theobj); class ClassA
{
private int v=0;
virtual public event ValueChangedHandler Changed;
virtual public int Value
{
get{return v;}
set{
if(value!=v)
{
v=value;
OnChanged();
}
}
}
virtual protected void OnChanged()
{
if(Changed!=null)
Changed(this);
}
}
class ClassB : ClassA
{
override public event ValueChangedHandler Changed
{
add
{
Console.WriteLine("Attached a Handler");
base.Changed+=value;
}
remove
{
Console.WriteLine("Detached a Handler");
base.Changed-=value;
}
}
override public int Value
{
get{return base.Value+100;}
set{base.Value=value-100;}
}
override protected void OnChanged()
{
Console.WriteLine("ClassBOnChanged:"+this.Value);
base.OnChanged();
}
}
class App
{
[STAThread]
static void Main(string[] args)
{
ClassB b=new ClassB();
b.Value++;
Console.WriteLine("Main:"+b.Value);
b.Changed+=new ValueChangedHandler(WhenChanged);
b.Value++;
b.Changed-=new ValueChangedHandler(WhenChanged);
b.Value--;
}
static void WhenChanged(object obj)
{
Console.WriteLine("WhenBChanged:"+((ClassB)obj).Value);
}
}
}