2016-11-09 91 views
0

这个+=运算符在这段代码中意味着什么,它是lambda? 我阅读MSDN文档的拉姆达,但没有发现关于这个+=运营商的任何事情,我会感激,如果有人向我解释在提供的C#代码中,+ =运算符是做什么的?

translateButton.Click += (object sender, EventArgs e) => 
{ 
    translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text); 
    if (String.IsNullOrWhiteSpace(translatedNumber)) 
    { 
     callButton.Text = "Call"; 
     callButton.Enabled = false; 
    } 
    else 
    { 
     callButton.Text = "Call " + translatedNumber; 
     callButton.Enabled = true; 
    } 
}; 
+0

Click是一个事件,(代表列表),并且您正在添加一个新事件。 '+ ='例如'x + = 2'等于'x = x + 2' –

+2

这与'Xamarin'无关。这只是'C#'的工作方式。 – VSG24

+0

@ VSG24这是一个xamarin.android代码 –

回答

3

作为运算+=/-=意味着

加/减右侧/从左侧和结果分配给左侧。

所以编写a += 5与编写a = a + 5相同。

但是,这段代码是关于事件和事件处理程序的。从事件处理此事件的列表在事件处理程序的情况下,+=/-=意味着

添加/删除以下委托/。

因此,您的示例代码为按钮的Click事件添加了新的事件处理程序。它的写法被称为内联实现。

请注意,在事件处理程序的情况下,通过

Event = Event + Handler; 

通常可以取代

Event += Handler; 

,因为没有办法“改为” Event“属性”在实施课外。

0

用+ =添加一个事件处理该事件。

你显示的代码也可以写成这样:

translateButton.Click += translateButton_Click; 

    private void translateButton_Click(object sender, EventArgs e) 
    { 
     translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text); 
     if (String.IsNullOrWhiteSpace(translatedNumber)) 
     { 
      callButton.Text = "Call"; 
      callButton.Enabled = false; 
     } 
     else 
     { 
      callButton.Text = "Call " + translatedNumber; 
      callButton.Enabled = true; 
     } 
    } 
+0

抱歉,但我不明白,你能解释一点吗? –

1

为了认购方法(匿名或命名),以该事件使用此语法:

translateButton.Click += (object sender, EventArgs e) => { /* .. Code*/ } 

或者

translateButton.Click += SomeMethodThatMatchesSignature; 

private void SomeMethodThatMatchesSignature(object sender, EventArgs e) 
{ 
    // .. Code 
} 

请注意,如果您+=两种方法,既要被执行。您可以使用-=语法删除一个。

在.NET Framework类库中,事件基于 EventHandler委托和EventArgs基类。

在其调用列表中使用多个方法的委托从MulticastDelegate派生出 。组播代表广泛用于 事件处理

阅读关于代表Here

Side-Note:这不是特定于Xamarin的意思!

0

它向Click事件添加处理程序。处理程序将按照添加的顺序执行。

您可以阅读文档here

1

+=添加AND赋值运算符,它将右操作数添加到左操作数并将结果赋给左操作数。

在你的情况下,你正在分配一个委托来处理你的事件。但事件不是委托实例。

在C#中分别使用eventName += delegateInstance;eventName -= delegateInstance;调用添加和删除方法,其中eventName可以使用引用(例如myForm.Click)或类型名称(例如MyClass.SomeEvent)进行限定。

简而言之,您正在使用按钮添加事件。因此TranslateButton = TranslateButton + Event将变为TranslateButton += Event