如何绑定两个自定义类的属性

语言C#, .netframe work框架

 class A
{
public int a{get;set}
}

class B
{
public int b{get;set;}
}

怎么把A的实例中的a属性和B的实例中的b属性绑定起来

A a=new A(); B b=new B(); b.b=a.a;

你这个是赋值,我想要绑定的效果
就是a.a = 1;以后不用写b.b= a.a;这句话,b.b自动变成1

你所说的“绑定”指的是什么意思?

public class A
{
public A() { }

    private int a;
    public int int_a
    {
        get { return a; }
        set
        {
            a = value;
            //给a赋值的同时,给b赋值,这样a变,b也一起变
            B class_b = B.getInstance();
            class_b.b = a;
        }
    }
}

public class B
{
    //单例模式
    private static B class_b = null;
    private B() { }

    public int b { get; set; }

    private static B class_bInit()
    {
        if (class_b == null)
            class_b = new B();
        return class_b;
    }
    //实例化类B的时候,调用该方法
    public static B getInstance()
    {
        return class_bInit();
    }
}

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Q696863
{

    public class SharedObj
    {
        public int value { get; set; }
    }
    public interface IShareable
    {
        SharedObj getshare();
        void bind(IShareable s);
        void unbind();
    }
    class A : IShareable
    {
        SharedObj shareobj = new SharedObj();

        public int a { get { return shareobj.value; } set { shareobj.value = value; } }

        SharedObj IShareable.getshare()
        {
            return shareobj;
        }

        void IShareable.bind(IShareable s)
        {
            shareobj = s.getshare();
        }

        void IShareable.unbind()
        {
            shareobj = new SharedObj() {  value = shareobj.value };
        }
    }

    class B : IShareable
    {
        SharedObj shareobj = new SharedObj();

        public int b { get { return shareobj.value; } set { shareobj.value = value; } }

        SharedObj IShareable.getshare()
        {
            return shareobj;
        }

        void IShareable.bind(IShareable s)
        {
            shareobj = s.getshare();
        }

        void IShareable.unbind()
        {
            shareobj = new SharedObj() { value = shareobj.value };
        }
    }

    public partial class Form1 : Form
    {
        A a = new A();
        B b = new B();

        public Form1()
        {
            InitializeComponent();
            button1.Click += new EventHandler(button1_Click);
            button2.Click += new EventHandler(button2_Click);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            (b as IShareable).unbind();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            (b as IShareable).bind(a);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            propertyGrid1.SelectedObject = a;
            propertyGrid2.SelectedObject = b;
        }
    }
}

图片说明

A 类中传入B类对象或者B类接口
public class A
{
private B m_b = null;

public A(B b)
{
    m_b = b;
}

private int m_i = 0;

public int I
{
    get { return m_i; }
    set
    {
        m_i = value;
        m_b.I = m_i;
    }
}

}

public class B
{
private int m_i = 0;

public int I
{
    get { return m_i; }
    set { m_i = value; }
}

}

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Q696863_con
{
    public class SharedObj
    {
        public int value { get; set; }
    }
    public interface IShareable
    {
        SharedObj getshare();
        void bind(IShareable s);
        void unbind();
    }
    class A : IShareable
    {
        SharedObj shareobj = new SharedObj();

        public int a { get { return shareobj.value; } set { shareobj.value = value; } }

        SharedObj IShareable.getshare()
        {
            return shareobj;
        }

        void IShareable.bind(IShareable s)
        {
            shareobj = s.getshare();
        }

        void IShareable.unbind()
        {
            shareobj = new SharedObj() { value = shareobj.value };
        }
    }

    class B : IShareable
    {
        SharedObj shareobj = new SharedObj();

        public int b { get { return shareobj.value; } set { shareobj.value = value; } }

        SharedObj IShareable.getshare()
        {
            return shareobj;
        }

        void IShareable.bind(IShareable s)
        {
            shareobj = s.getshare();
        }

        void IShareable.unbind()
        {
            shareobj = new SharedObj() { value = shareobj.value };
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            B b = new B();
            a.a = 123;
            b.b = 345;
            Console.WriteLine(b.b);
            a.a = 333; //更改了a
            Console.WriteLine(b.b); //没有作用到b上
            (b as IShareable).bind(a); //绑定一下
            a.a = 888; //再修改a
            Console.WriteLine(b.b); //现在作用到b了
        }
    }
}

可以试试把其中一个设置成ref参数,然后在set访问器中通过方法传给另一个。