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中,上述代码有些省略了。。。
展开
 我来答
仵天菱C
推荐于2017-12-15 · TA获得超过233个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:179万
展开全部
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的值 真接调用相应的改变方法就行了
所以你写的这个类 要让属性在类外部也能改变其值 不然属性值的改变只在类内部并触发事件也就没什么意义了
ajax83316
2009-04-17 · TA获得超过466个赞
知道小有建树答主
回答量:485
采纳率:0%
帮助的人:298万
展开全部
属性那里 get的同时再写一个方法就好了吧。。判断一下get的值和原来值是不是一样,然后决定用不用,是这个意思吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuyu3sham
2009-04-17
知道答主
回答量:55
采纳率:0%
帮助的人:21.4万
展开全部
把那个方法家改成静态的就可以调用了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
功成有余香3912
2009-04-17 · TA获得超过130个赞
知道小有建树答主
回答量:581
采纳率:0%
帮助的人:278万
展开全部
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);
}
}

参考资料: dev.csdn.net

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式