c#中怎样实现当一个类实例的属性值改变时,触发事件调用另一个方法?
自定义了一个类TempClass,有两个属性publicstringa{get{return_a;}}publicstringb{get{return_b;}}priva...
自定义了一个类TempClass,有两个属性
public string a
{
get { return _a; }
}
public string b
{
get { return _b; }
}
private void m()
{
_a="1111";
_b="2222";
}
现在实例化类TempClass TC=new TempClass();
怎样实现当实例TC中的属性a或者b值改变时,触发一个事件,事件中调用另一个方法?这个方法不在类TempClass中,上述代码有些省略了。。。 展开
public string a
{
get { return _a; }
}
public string b
{
get { return _b; }
}
private void m()
{
_a="1111";
_b="2222";
}
现在实例化类TempClass TC=new TempClass();
怎样实现当实例TC中的属性a或者b值改变时,触发一个事件,事件中调用另一个方法?这个方法不在类TempClass中,上述代码有些省略了。。。 展开
4个回答
展开全部
using System;
namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
people p = new people("Name1");
p.PropertyChanged += new EventHandler(p_PropertyChanged);//注册事件处理函数
p.Name = "Name2";
Console.ReadKey();
}
static void p_PropertyChanged(object sender, EventArgs e)//事件的处理函数
{
Console.WriteLine("NamePropertyChanged:"+(sender as people).Name);
}
}
class people
{
public event EventHandler PropertyChanged;
private string name=String .Empty;
public people(string name)
{
this.name = name;
}
public string Name
{
get { return name; }
set
{
name = value;
this.OnPropertyChanged(new EventArgs());//每次改变Name值调用方法;
}
}
private void OnPropertyChanged(EventArgs eventArgs)
{
if (this.PropertyChanged != null)//判断事件是否有处理函数
{
this.PropertyChanged(this, eventArgs);
}
}
}
}
//请参考
从你写的程序来看 从类的外部是不可能改变属性的值了,因为你的这两个属性都是只读的, 只能在类的内部改变_a _b的值
那样你写这个类的时候 你应该很清楚哪里改变了_a _b的值 真接调用相应的改变方法就行了
所以你写的这个类 要让属性在类外部也能改变其值 不然属性值的改变只在类内部并触发事件也就没什么意义了
namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
people p = new people("Name1");
p.PropertyChanged += new EventHandler(p_PropertyChanged);//注册事件处理函数
p.Name = "Name2";
Console.ReadKey();
}
static void p_PropertyChanged(object sender, EventArgs e)//事件的处理函数
{
Console.WriteLine("NamePropertyChanged:"+(sender as people).Name);
}
}
class people
{
public event EventHandler PropertyChanged;
private string name=String .Empty;
public people(string name)
{
this.name = name;
}
public string Name
{
get { return name; }
set
{
name = value;
this.OnPropertyChanged(new EventArgs());//每次改变Name值调用方法;
}
}
private void OnPropertyChanged(EventArgs eventArgs)
{
if (this.PropertyChanged != null)//判断事件是否有处理函数
{
this.PropertyChanged(this, eventArgs);
}
}
}
}
//请参考
从你写的程序来看 从类的外部是不可能改变属性的值了,因为你的这两个属性都是只读的, 只能在类的内部改变_a _b的值
那样你写这个类的时候 你应该很清楚哪里改变了_a _b的值 真接调用相应的改变方法就行了
所以你写的这个类 要让属性在类外部也能改变其值 不然属性值的改变只在类内部并触发事件也就没什么意义了
展开全部
属性那里 get的同时再写一个方法就好了吧。。判断一下get的值和原来值是不是一样,然后决定用不用,是这个意思吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把那个方法家改成静态的就可以调用了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
using System;
class UserInputMonitor
{
public delegate void UserRequest(object sender,EventArgs e); //定义委托
public event UserRequest OnUserRequest; //此委托类型类型的事件
public void Run()
{
bool finished=false;
do
{
if (//此处改为监视属性值的代码)
{ OnUserRequest(this,new EventArgs()); }
}
while(!finished);
}
}
public class Client
{
public static void Main()
{
UserInputMonitor monitor=new UserInputMonitor();
new Client(monitor);
monitor.Run();
}
private void ShowMessage(object sender,EventArgs e)
{ Console.WriteLine("HaHa!!"); }
Client(UserInputMonitor m)
{
m.OnUserRequest+=new UserInputMonitor.UserRequest(this.ShowMessage);
}
}
class UserInputMonitor
{
public delegate void UserRequest(object sender,EventArgs e); //定义委托
public event UserRequest OnUserRequest; //此委托类型类型的事件
public void Run()
{
bool finished=false;
do
{
if (//此处改为监视属性值的代码)
{ OnUserRequest(this,new EventArgs()); }
}
while(!finished);
}
}
public class Client
{
public static void Main()
{
UserInputMonitor monitor=new UserInputMonitor();
new Client(monitor);
monitor.Run();
}
private void ShowMessage(object sender,EventArgs e)
{ Console.WriteLine("HaHa!!"); }
Client(UserInputMonitor m)
{
m.OnUserRequest+=new UserInputMonitor.UserRequest(this.ShowMessage);
}
}
参考资料: dev.csdn.net
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询