When you add two shorts together, they can add up to more than the allowed value of a short, but an OK value for an int. This is pretty much what Eric Lippert says in his answer here.
Aside: Why is that not the case for adding two ints returning a long? Eric addresses that too:
In a world where integer arithmetic wraps around it is much more sensible to do all the calculations in int, a type which is likely to have enough range for typical calculations to not overflow.
Because of that, the + operator defined on adding two shorts returns an int.
This is why you are getting the compile time error - you are returning an int where you are specifying a short return type`.
You can explicitly cast the result to short if you know that the addition will always result in a short:
static short Sum(short a, short b)
{
return (short)(a + b);
}