title: Delegate Subtractive Assignment
body: <p>In C#, delegate behave more like a list of function pointers, so that we can call a list of methods with the same method signature via a delegate.</p>
  
  <p>After the initial assignment, we can add or subtract methods from a delegate using += (additive assignment) and -= (subtractive assignment). </p>
  
  <p>Say, I have two methods.</p>
  
  <pre><code>public static void Method1(string message){
    // ...
  }
  
  public static void Method2(string message){
    // ...
  }
  </code></pre>
  
  <p>Now, I declare a delegate type,</p>
  
  <pre><code>public delegate void Del(string message);
  </code></pre>
  
  <p>If I want to execute Method1, Method2 and again Method1 in order, I can create a delegate like this.</p>
  
  <pre><code>Del delList = Method1;
  delList += Method2;
  delList += Method1;
  </code></pre>
  
  <p>Then, later in the program, If I remove Method1 from it, which occurrence of Method1 is removed? Is there any rule governing that? </p>
  
  <p>I believe that the better and more readable way is to create a new delegate and add methods you want excute in order, instead of changing an existing one. I'm just curious about how <code>-=</code> operator is implemented for C# delegates.</p>