Winforms ^(对象句柄操作符)是如何工作的?
我可以通过删除文本框中的最后一个字符Winforms ^(对象句柄操作符)是如何工作的?,winforms,c++-cli,Winforms,C++ Cli,我可以通过删除文本框中的最后一个字符 textBox1->Text = textBox1->Text->Remove(textBox1->Text->Length - 1); 我想创建一个指向文本的引用或指针。但我不能这样做 String^ t = textBox1->Text; t = t->Remove(t->Length - 1); // Text doesn't change 注意:任何一项都不能编译: String* t = tex
textBox1->Text = textBox1->Text->Remove(textBox1->Text->Length - 1);
我想创建一个指向文本的引用或指针。但我不能这样做
String^ t = textBox1->Text;
t = t->Remove(t->Length - 1); // Text doesn't change
注意:任何一项都不能编译:
String* t = textBox1->Text; // error: an ordinary pointer to a
// C++/CLI ref class or interface class
// is not allowed
String& t = textBox1->Text; // error: an ordinary reference to a
// C++/CLI ref class or interface class
// is not allowed
String% t = textBox1->Text // error: a tracking reference to a
// System::String is not allowed
只需更改本地引用(指针thingy,handle,…)t
,以引用由Remove
返回的字符串
文本框字符串不会因此而改变
当你这样做的时候
textBox1->Text = t;
…您正在为属性文本
调用一个setter函数,该setter函数不仅更改文本框字符串数据,而且更新或至少使文本框显示无效
只需更改本地引用(指针thingy,handle,…)t
,以引用由Remove
返回的字符串
文本框字符串不会因此而改变
当你这样做的时候
textBox1->Text = t;
…您正在为属性
文本
调用一个setter函数,该setter函数不仅更改文本框字符串数据,而且更新或至少使文本框显示无效。在.NET中的字符串是不可变的。存储一个引用到TyBox控件,而不是.@ CyDyGr:只是出于好奇(我不熟悉C++ CLI),什么是“代码”> TrimBox x这里的可能类型?@ CODYGRY,但不<代码> T->移除< /Cord>创建一个新的字符串?@欢呼:St::Windows::窗体::这是System::Windows::Forms::Control的派生类。您正在查找引用。这在C++/CLI中是受支持的,它是String^%
。但是当您尝试使用它时,您会感到非常惊讶,在支持引用的语言中,属性是一个非常容易泄漏的抽象。C++之所以没有这些大的原因。如果需要额外级别的间接寻址,则需要使用委托。NET中的字符串是不可变的。存储一个引用到TyBox控件,而不是.@ CyDyGr:只是出于好奇(我不熟悉C++ CLI),什么是“代码”> TrimBox x这里的可能类型?@ CODYGRY,但不<代码> T->移除< /Cord>创建一个新的字符串?@欢呼:St::Windows::窗体::这是System::Windows::Forms::Control的派生类。您正在查找引用。这在C++/CLI中是受支持的,它是String^%
。但是当您尝试使用它时,您会感到非常惊讶,在支持引用的语言中,属性是一个非常容易泄漏的抽象。C++之所以没有这些大的原因。如果你需要一个额外的间接级别,那么你需要使用一个委托。但是为什么在我写t=[新字符串对象]
时不调用setter函数呢?@Pavel因为t
只是一个局部变量而TextBox::Text
是一个属性(引擎盖下的一对getter/setter)。但为什么在我编写t=[new String object]
时不调用setter函数?@Pavel,因为t
只是一个局部变量,而TextBox::Text
是一个属性(引擎盖下的一对getter/setter)。