title: more advantages or disadvantages to delegate members over classic functions?
body: <pre><code>class my_class
  {
      public int add_1(int a, int b) {return a + b;}
      public func&lt;int, int, int&gt; add_2 = (a, b) =&gt; {return a + b;}
  }
  </code></pre>
  
  <p>add_1 is a function whereas add_2 is a delegate. However in this context delegates can forfill a similar role.</p>
  
  <p>Due to precedent and the design of the language the default choice for C# methods should be functions.</p>
  
  <p>However both approaches have pros and cons so I've produced a list. Are there any more advanteges or disadvantages to either approach?</p>
  
  <p>Advantages to conventional methods.</p>
  
  <ul>
  <li>more conventional</li>
  <li>outside users of the function see named parameters - for the add_2 syntax arg_n and a type is generally not enough information.</li>
  <li>works better with intellisense - ty Minitech</li>
  <li>works with reflection - ty Minitech</li>
  <li>works with inheritance - ty Eric Lippert</li>
  <li>has a "this" - ty CodeInChaos</li>
  <li>lower overheads, speed and memory - ty Minitech and CodeInChaos</li>
  <li>don't need to think about public\private in respect to both changing and using the function. - ty CodeInChaos</li>
  <li>less dynamic, less is permitted that is not known at compile time - ty CodeInChaos</li>
  </ul>
  
  <p>Advantages to "field of delegate type" methods.</p>
  
  <ul>
  <li>more consistant, not member functions and data members, it's just all just data members.</li>
  <li>can outwardly look and behave like a variable.</li>
  <li>storing it in a container works well.</li>
  <li>multiple classes could use the same function as if it were each ones member function, this would be very generic, concise and have good code reuse.</li>
  <li>straightforward to use anywhere, for example as a local function.</li>
  <li>presumably works well when passed around with garbage collection.</li>
  <li>more dynamic, less must be known at compile time, for example there could be functions that configure the behaviour of objects at run time.</li>
  <li>as if encapsulating it's code, can be combined and reworked, <a href="http://msdn.microsoft.com/en-us/library/ms173175%28v=vs.80%29.aspx" rel="noreferrer">msdn.microsoft.com/en-us/library/ms173175%28v=vs.80%29.aspx</a></li>
  <li>outside users of the function see unnamed parameters - sometimes this is helpfull although it would be nice to be able to name them.</li>
  <li>can be more compact, in this simple example for example the return could be removed, if there were one parameter the brackets could also be removed.</li>
  <li>roll you'r own behaviours like inheritance - ty Eric Lippert</li>
  <li>other considerations such as functional, modular, distributed, (code writing, testing or reasoning about code) etc...</li>
  </ul>
  
  <p>Please don't vote to close, thats happened already and it got reopened. It's a valid question even if either you don't think the delegates approach has much practical use given how it conflicts with established coding style or you don't like the advanteges of delegates.</p>