语言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访问器中通过方法传给另一个。