String ^% text = button->Text ;
text = "something" ;
应该更改按钮的文本,但事实并非如此。
String ^% text = button->Text ;
text = "something" ;
应该更改按钮的文本,但事实并非如此。
这不起作用,代码只更新对象。它没有比这更进一步,还更新了 TextBox::Text 属性。这不仅仅是因为这是一个字符串,正如重复链接中所暗示的那样,它也不适用于简单的值类型属性。
这是因为属性不是值,您无法创建对它们的引用。当您使用它们时,它们看起来就像语法中的值。但肯定不是当你声明它们时,请注意你必须如何编写一个 get 和一个 set 方法。因此,要更新 TextBox 中显示的文本,您必须调用属性的 set 方法。这不仅仅是一个简单的变量赋值,它是一个方法调用。直观上可能很明显,请注意分配 Text 属性是如何产生很多副作用的。你可以在屏幕上看到它。
要间接调用一个方法,你需要另一辆车,你需要一个委托。非常类似于 C 中的函数指针。任何有关 .NET 编程的介绍性书籍都会解释它们。您可以声明自己的委托类型,但更喜欢 .NET 框架中内置的通用委托类型。添加对 System.Core 的引用,以便您可以使用通用 Action<> 委托类型。您需要首先编写一个分配 Text 属性的方法:
private:
void updateTextBox(String^ text) {
textBox1->Text = text;
}
这将使用如下示例方法进行更新:
void Test(Action<String^>^ updater) {
updater("foo");
}
并注意此方法如何更新任何文本框,您传递的委托对象决定哪个。您可以使用如下代码创建委托变量:
Test(gcnew Action<String^>(this, &Form1::updateTextBox));