gpt4 book ai didi

c# - 委托(delegate)细节

转载 作者:行者123 更新时间:2023-11-30 15:45:46 26 4
gpt4 key购买 nike

我在与我正在处理的项目的类(class)中遇到问题。该类是一个接受标签和值的 GUI 组件。这里的想法是,用户可以指定一个标签,然后从任何地方链接一个值(更具体地说,该值的 ToString 方法),以便每次更新该值时,GUI 组件也会更新。这是其设置方式的基础知识:

public delegate string GUIValue();

public class GUIComponent
{
GUIValue value = null; // The value linked in
string label = ""; // The label for the value
string text = ""; // The label and value appended together

public GUIComponent(string Text, GUIValue Value)
{
this.text = Text;
this.value += Value;
}

public void Update()
{
this.text = this.label + this.value();
}
}

然后我这样调用它

GUIComponent component = new GUIComponent("Label: ",
new GUIValue(this.attribute.ToString));

代码编译正确,组件确实显示,并显示赋予它的属性的初始值,但是,只要属性值更改,它就不会更新。

我的问题是,我是否一开始就正确设置了这个设置,如果是这样,为什么它不起作用。我最初的想法是它只接受 ToString 方法返回的第一个值,因为它不接受任何参数,但有人可以验证这一点吗?

最佳答案

这段代码:

new GUIValue(this.attribute.ToString)

不会导致每次属性改变时都调用方法。您必须存储委托(delegate)并在每次有人更改“属性”时调用它。像这样的东西:

private event GUIValue attributeChanged = () => this.attribute.ToString();

private String attribute;

// This is a property that sets the value of attribute
public String Attribute { get { return attribute; } set { attribute = value; attributeChanged(); } }

// Now you can initialize the component using:
// GUIComponent component = new GUIComponent("Label: ", this.attributeChanged);

关于c# - 委托(delegate)细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4901522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com