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变化就输出,请问怎样实现这个功能。

解决方案 »

  1.   

    A a = new A();
    a.i=10;
    B b = new B();
    b.a1=a;
    C c = new C();
    c.a2=a;
      

  2.   

    c.a2.i=100;
    Response.write(b.i.toString());
      

  3.   

    现在是操作C的实例来改变B中的i,如果i有变化就给出提示,提示后可以继续操作C的实例,继续观察B中i值的变化
      

  4.   

    我是想用户只知道C的存在,并不知道B的存在,i值的变化通过在B类中添加委托事件怎么实现?是否还有不用委托事件就能实现这个功能的方法呢?
      

  5.   

    在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);}}
    }
      

  6.   

    一个实例? 单一 模式?? 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
      

  7.   

    在 B 类 和C类 注册:A a = new A();//实例化a.DataChanged+=p_DataChanged;private void p_DataChanged(object sender,EventArgs e)
    {
      Console.WriteLine(a.I);
    }
      

  8.   

    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));
      }
      }   
    }
      

  9.   

    你好,不是单一模式,在B和C中都有List<A>,C中的List取出Index,在B中i=a1[index].i,如果index改变后,B中i就改变,要在B中知道这改变i这件事情。在题目我把实际问题稍微简化了。
      

  10.   

    我现在操作的是C类中A的实例,A中申明事件是在是不方便,因为C和B中用的全是List<A>,而在B类中也找不到事件发生方法,用get,set属性就执行不到。困惑!!!
      

  11.   

    不会用你这个,如果我的不是string 类型的该怎么办啊?
      

  12.   

    多个,改成List, public static readonly List<A> a = new List<A>(); 或者 声明一个全局的变量 List<A> 
      

  13.   

    把 A 声明成全局变量  定义一个事件委托   再分别在B和C中添加两个方法  一个是用来改变A的方法1()此方法中A改变的话执行之前定义的事件 )  一个是当A改变后执行的方法2   在主函数中把A和B中的方法2都绑定到之前定义的事件上     这样当任何一个类执行改变A的方法 其它类都会得到通知!