[英]What does ((Control)name) mean?
我已经使用了这个((Control)name)
一段时间了,但是我不理解方括号的构造及其含义。
例如,当我循环浏览页面上的控件时,我会像这样:
foreach (Control ctrl in Booking_Quote.Controls)
{
if (ctrl is Panel)
{
foreach (Control tb in ctrl.Controls)
{
if (tb is TextBox)
{
((TextBox)tb).Text = "Hello world";
}
else
{
}
}
}
}
我想知道((TextBox)tb)
意思。
这是一种类型转换,让编译器知道tb
对象实际上是一个TextBox
对象。
它是演员。 在此代码中:
if (tb is TextBox)
{
((TextBox)tb).Text = "Hello world";
}
您正在将tb
强制转换为TextBox
类型,以访问Text
属性。 没有强制类型转换,它将保持Control
类型,并且Text
属性将对您不可用。
这意味着您要将对象投射到TextBox
(或Control
)
在您的示例中,您这样写:
if (tb is TextBox)
{
((TextBox)tb).Text = "Hello world";
}
如果tb
是TextBox
,则将对象转换为TextBox
可以访问其方法并根据需要设置值。
您可以执行显式转换,如果转换失败,则将引发异常,或者您可以使用as operator
转换对象,如果转换失败,则返回null
,如下所示:
(tb as TextBox).Text = "Hello world";
由于Control
可能没有Text属性,因此它首先通过以下行检查当前Control tb
是否为TextBox
if (tb is TextBox)
{
....
}
然后,在将Control tb
用作TextBox
,首先需要将其显式转换为TextBox
才能访问Text属性。
您可以通过在括号中的Type
对象之前添加变量来实现此目的,在本例中为(TextBox) tb
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.