创建对另一个对象的引用

时间:2015-06-04 16:00:23

标签: c#

我想创建一个存储对另一个对象的引用的对象。我有这样的代码:

org.eclipse.rcptt.tesla.swt

如果我点击button2 - 我可以看到" 1"在我的标签。但是,如果我点击button2然后按钮1 - 我仍然会看到" 1"。我应该如何改变我的代码,以便我能够看到" 7"在那种情况下?

2 个答案:

答案 0 :(得分:3)

当您创建store对象时,您正在评估test变量的,并存储该值而不是测试变量。如果您希望稍后有一种方法可以将变量评估为其值,则可以使用lambda来关闭变量,因为C#中的闭包关闭变量,而不是

public partial class Form1 : Form
{
    int test = 1;
    Store<string> store;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        store = new Store<string>(() => test.ToString());
    }

    private void button1_Click(object sender, EventArgs e)
    {
        test = 7;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        label1.Text = store.GetValue();
    }
}

public class Store<T>
{
    private Func<T> function;

    public Store(Func<T> function)
    {
        this.function = function;
    }

    public T GetValue()
    {
        return function();
    }
}

请注意,我对符合标准C#约定的项目名称进行了一些更改,而不是让Store公开显示生成器函数的字段,我提供的功能可以让您获得价值,我也使它成为通用的,而不是使用object,因为这既避免了装箱,又防止了转换从商店返回的对象的需要。

答案 1 :(得分:-1)

只需稍加改动,就可以了。 Form1的属性和构造函数:

public Form1()
{
    st = new store(test);
}
private int testPrivate { get; set; }

public int test
{
    get { return testPrivate; }
    set
    {
        testPrivate = value;
        st.o = value;
    }
}

public store st { get; set; }

商店类:

public class store
{
    public object o { get; set; }

    public store(object obj)
    {
        o = obj;
    }
}