静态对象解除及关联事件的问题

xoaoz 2012-05-02 04:09:26


public class Employee : System.ComponentModel.INotifyPropertyChanged
{
private string _name;
public string Name
{
get{return _name;}
set{if(_name != value){
_name =value;
SendPropertyChanged("Name:"+value);
}}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected virtual void SendPropertyChanged(String propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}

public class ClassTest
{
public ClassTest()
{
Gloal.Em.PropertyChanged -= Employee_PropertyChanged;
Gloal.Em.PropertyChanged += Employee_PropertyChanged;
}
private void Employee_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
Console.WriteLine(e.PropertyName);
}
}

public class Gloal
{
public static Employee Em;
}

static class Program
{
[STAThread]
static void Main(string[] args)
{
Gloal.Em = new Employee{Name = "a"};

ClassTest t = new ClassTest();
Gloal.Em.Name = "b";

ClassTest t1 = new ClassTest();
Gloal.Em.Name = "c";

ClassTest t2 = new ClassTest();
ClassTest t12 = new ClassTest();
Gloal.Em.Name = "d";
}



输出结果:
Name:b
Name:c
Name:c
Name:d
Name:d
Name:d
Name:d

-= 为啥不起作用呢?
...全文
167 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xboxeer 2012-05-02
  • 打赏
  • 举报
回复

public ClassTest()
{
Gloal.Em.PropertyChanged -= Employee_PropertyChanged;
Gloal.Em.PropertyChanged += Employee_PropertyChanged;
}
private void Employee_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
Console.WriteLine(e.PropertyName);
}

=》

public ClassTest()
{

Gloal.Em.PropertyChanged += Employee_PropertyChanged;
}
private void Employee_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
Console.WriteLine(e.PropertyName);
Gloal.Em.PropertyChanged -= Employee_PropertyChanged;
}

说实话这样子在一个实例构造函数里面去改变一个静态变量 我觉得出问题很正常~
xoaoz 2012-05-02
  • 打赏
  • 举报
回复
减完了,又加上了,就是想确保只关联一次。

Gloal.Em.Name = "d"的时候,触发了4次!
ohkuy 2012-05-02
  • 打赏
  • 举报
回复
SendPropertyChanged("Name:"+value);
改为:
SendPropertyChanged("Name:");
试试~~
bdmh 2012-05-02
  • 打赏
  • 举报
回复
Gloal.Em.PropertyChanged -= Employee_PropertyChanged;
Gloal.Em.PropertyChanged += Employee_PropertyChanged;
你减完了,又加上了

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧