title: Is the "sender" in Button_Click(object sender... really the sender?
body: <p>Ted Faison in a <a href="http://www.dotnetrocks.com/default.aspx?showNum=355" rel="nofollow noreferrer">podcast on event-based software design</a> mentioned that "sender" and "self" objects in .NET, C++ and Java event statements such as:</p>
  
  <pre><code>private void Button_Click(object sender, RoutedEventArgs e)
  </code></pre>
  
  <p>are a misnomer since e.g. in the above example "sender" is not really the object which produced the event but a proxy, since you wouldn't want to couple your applications that tightly. </p>
  
  <p>Did I understand him incorrectly (since when I debug it, "sender" does indeed seem to be the original object).</p>
  
  <p>Or is it that common event patterns in these languages (e.g. a common click handler) are tightly coupled but they <em>should</em> be more decoupled, e.g. in composite applications. </p>
  
  <p>He also mentioned that e.g. you shouldn't make inherit from EventArgs since it leads to an explosion of classes, one per event, which only transport a few variables. Many times in his opinion, you can just send a string for instance. He mentioned that this opinion is the opposite of what Microsoft Patterns and Practices suggests.</p>
  
  <p>Any thoughts on these areas?</p>