事件、委托,请帮帮忙!

forever803 2010-10-25 02:22:09
class A
{
......
int i;
......
}
class B
{
A a1;
public int i
{
get{return a.i;}
}
}
class C
{
A a2;
}
在B和C中的a1、a2是相同的引用,a2变换a1也会随之变换,a1变化B中的i也就变换,现在要求操作C,如果B中的i变化就输出,请问怎样实现这个功能。
...全文
261 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
forever803 2010-10-25
  • 打赏
  • 举报
回复
结贴,上面讲的是相当详细,但我没用上,用另种方法解决的,是重新设计B和C中的成员属性解决的。虽然这次没用上这个贴,不过以后肯定还会用到委托事件方面的知识,肯定能用到上面的知识,谢谢大家的支持。分不多,顶者有份!!!
flyerwing 2010-10-25
  • 打赏
  • 举报
回复
上面已经非常详细了,
如果还不会就没办法了,只能说暂时不适合委托,过些时候再反过来看.
zjx198934 2010-10-25
  • 打赏
  • 举报
回复
把 A 声明成全局变量 定义一个事件委托 再分别在B和C中添加两个方法 一个是用来改变A的方法1()此方法中A改变的话执行之前定义的事件 ) 一个是当A改变后执行的方法2 在主函数中把A和B中的方法2都绑定到之前定义的事件上 这样当任何一个类执行改变A的方法 其它类都会得到通知!
zhiZhuoBi 2010-10-25
  • 打赏
  • 举报
回复
什么是委托啊?
forever803 2010-10-25
  • 打赏
  • 举报
回复
累,还是搞不出来!
claymore1114 2010-10-25
  • 打赏
  • 举报
回复
多个,改成List, public static readonly List<A> a = new List<A>(); 或者 声明一个全局的变量 List<A>
forever803 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyq11 的回复:]
public class Person : INotifyPropertyChanged
{
private string firstNameValue;
public string FirstName{
get { return firstNameValue; }
set
{
firstNameValue=value;
NotifyPropertyCh……
[/Quote]
不会用你这个,如果我的不是string 类型的该怎么办啊?
forever803 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hyttplay 的回复:]
在 B 类 和C类 注册:

A a = new A();//实例化

a.DataChanged+=p_DataChanged;

private void p_DataChanged(object sender,EventArgs e)
{
Console.WriteLine(a.I);
}
[/Quote]
我现在操作的是C类中A的实例,A中申明事件是在是不方便,因为C和B中用的全是List<A>,而在B类中也找不到事件发生方法,用get,set属性就执行不到。困惑!!!
forever803 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 claymore1114 的回复:]
一个实例? 单一 模式??

C# code

class A
{
public static readonly A a = new A();
public int i;
}
class B
{
public A a1 = A.a;
public int i
……
[/Quote]
你好,不是单一模式,在B和C中都有List<A>,C中的List取出Index,在B中i=a1[index].i,如果index改变后,B中i就改变,要在B中知道这改变i这件事情。在题目我把实际问题稍微简化了。
wuyq11 2010-10-25
  • 打赏
  • 举报
回复
public class Person : INotifyPropertyChanged
{
private string firstNameValue;
public string FirstName{
get { return firstNameValue; }
set
{
firstNameValue=value;
NotifyPropertyChanged("FirstName");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
纵横宇宙 2010-10-25
  • 打赏
  • 举报
回复
在 B 类 和C类 注册:

A a = new A();//实例化

a.DataChanged+=p_DataChanged;

private void p_DataChanged(object sender,EventArgs e)
{
Console.WriteLine(a.I);
}
claymore1114 2010-10-25
  • 打赏
  • 举报
回复
一个实例? 单一 模式??

class A
{
public static readonly A a = new A();
public int i;
}
class B
{
public A a1 = A.a;
public int i
{
get { return a1.i; }
}
}
class C
{
public A a2 = A.a;
}

//调用
C c = new C();
c.a2.i = 4;
B b = new B();
Console.WriteLine(b.a1.i); //4
forever803 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hyttplay 的回复:]
在A类里面声明事件,把 i 封装为属性,当i被修改时,触发事件通知

B 和 C里面分别注册A类的事件

例如:


C# code
class A
{
public event EventHandle<EventArgs> DataChanged;
protected visual void OnDataChanged(EventArgs e)
{
……
[/Quote]
请问在B类中添加事件可以实现吗?应该怎么实现啊?现在我要A中申明事件有些困难。
纵横宇宙 2010-10-25
  • 打赏
  • 举报
回复
在A类里面声明事件,把 i 封装为属性,当i被修改时,触发事件通知

B 和 C里面分别注册A类的事件

例如:

class A
{
public event EventHandle<EventArgs> DataChanged;
protected visual void OnDataChanged(EventArgs e)
{
if(DataChanged!=null){DataChanged(this,e);}
}

private int i;
public int I{get{return i;}set{i=value;this.OnDataChanged(null);}}
}


forever803 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 rock870210 的回复:]
c.a2.i=100;
Response.write(b.i.toString());
[/Quote]
我是想用户只知道C的存在,并不知道B的存在,i值的变化通过在B类中添加委托事件怎么实现?是否还有不用委托事件就能实现这个功能的方法呢?
forever803 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rock870210 的回复:]
A a = new A();
a.i=10;
B b = new B();
b.a1=a;
C c = new C();
c.a2=a;
[/Quote]
现在是操作C的实例来改变B中的i,如果i有变化就给出提示,提示后可以继续操作C的实例,继续观察B中i值的变化
Rock870210 2010-10-25
  • 打赏
  • 举报
回复
c.a2.i=100;
Response.write(b.i.toString());
forever803 2010-10-25
  • 打赏
  • 举报
回复

下沉的速度是如此的快
Rock870210 2010-10-25
  • 打赏
  • 举报
回复
A a = new A();
a.i=10;
B b = new B();
b.a1=a;
C c = new C();
c.a2=a;

111,094

社区成员

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

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

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