发送方,如 C# 中的发件人

本文关键字: | 更新日期: 2023-09-27 18:35:59

private void RectangleTapped(object sender, TappedRoutedEventArgs e)
{
     RedRectangle.Fill.Opacity = 1.0;
     GreenRectangle.Fill.Opacity = 1.0;
     BlueRectangle.Fill.Opacity = 1.0;
     YellowRectangle.Fill.Opacity = 1.0;
     var rectangle =sender as Rectangle;
     if (rectangle != null)
     {
         rectangle.Fill.Opacity =0.25;            
     }
}

var rectangle=sender as Rectangle是什么意思?

此代码也适用于var Rectangle=sender as Rectangle

发送方,如 C# 中的发件人

事件的sender只是作为对象传递给事件处理程序。现在,当引发该事件时,您通常知道可以期待哪种类型的发送者(因为您自己设置了事件处理程序),但该方法仍然需要object类型。

现在,as是一个类型转换,它尝试将对象转换为该类型,但如果类型不兼容,则返回null。所以在这种情况下,你有这个:

var rectangle = sender as Rectangle;

有两种可能性:

  1. sender 是一种可以分配给 Rectangle 的类型,在这种情况下,rectangle将包含对同一对象的引用,但类型化为 Rectangle 而不仅仅是object
  2. sender属于其他类型,在这种情况下,rectangle将被null,这将在以下检查中捕获。

as运算符尝试将参数转换为请求的类型,如果转换/强制转换失败,则返回null。(MSDN)

因此,您提供的代码正在检查sender是否是Rectangle对象(或派生类型)。然后,它会在使用转换后的变量之前检查 null,这在使用 as 时始终是一种很好的做法。

请注意,第二个代码只是分配给不同的变量名,但强烈建议不要使用类名作为变量名。

你有一些非常非常基本的概念,你试图理解。 我将尝试通过一些澄清来分解这个问题,并补充您收到的两个特殊答案。

投:

强制转换的概念非常重要,因为此概念在修改数据时势在必行。 您的具体询问:

显式转换(强制转换

):显式转换需要强制转换运算符。当信息可能在 转化,或者当其他转化可能不成功时 原因。 典型示例包括数值转换为 精度较低或范围较小,并且转换了基类 实例到派生类。

在您的示例中,您实现as Rectangle . 为了简单起见,我将使用更简单的数据类型。 转换时as不会创建以下错误:

  • 无效的强制转换例外

相反,它在失败时返回null,这是一种静默失败的干净方法。 这满足了不希望异常中断用户流的几种情况下的特定需求。

例 (A):

int valid = 0;
string number = valid as string;

示例 (B):

string valid = 1;
int number = valid as string;

例 (C):

string valid = "valid";
int? number = valid as int?;

所有这三个示例都是有效的,但是在示例 (C) 中,您会注意到两个项目:

  • int? - 允许null int
  • 它也不会破坏您的应用程序,因为失败的强制转换将返回null

转换的另一种方法是应用 (int)(string) 将数据显式强制为该类型。 因此,它要么成功,要么引发异常。 例如:

例 (D):

string invalid = "Fail"
int? number = (int?)invalid;

这将导致引发无效强制转换异常示例 (C) 和示例 (D)铸件之间差异的两个简单比较。

希望这能为您提供更好的信息。

相关文章:
  • 没有找到相关文章