title: Arithmetic Operators vs Methods in Class Design Guidelines
body: <p>I have many math types like Point3, and I am running into the dilemma of implementing operators, instance and static methods for arithmetic.</p>
  
  <p>So say the type is <code>Point3</code>. Where a, b, c is a <code>Point3</code>, I sure wanna be able to say:</p>
  
  <pre><code>c = a + b;
  </code></pre>
  
  <p>But should I also implement:</p>
  
  <pre><code>c = Point3.Add (a, b);
  </code></pre>
  
  <p>And this:</p>
  
  <pre><code>c = a.Add (b);
  </code></pre>
  
  <p>To me #3 is useless and less readable than #1. And #2 seems like pointless unless you have an interface for Add, Subtract, Multiply, Divide, etc.</p>
  
  <p>What do you recommend? Is there any problem or drawback with just having the operators (+, -, *, /)? Would this impede the generics arithmetic (I know it doesn't support it directly, but maybe having static methods would be useful in a workaround)?</p>
  
  <p>Would a guidelines for this matter whether it's a class or a struct?</p>
  
  <p>EDIT: Also for #3, I forgot to mention that this is for an immutable type, so returns a new Point3, instead of changing a.</p>