Una cuestión conceptual:Sobrecarga del operador en C# - ¿A dónde debe ir el código de código real?
Estoy creando mi estructura personalizada, en la línea de un Vector3 (3 valores int) y estaba trabajando sobrecargando los operadores estándar (+, -, *, /, == etc ...)
Como estoy construyendo una biblioteca para uso externo, intento cumplir con las reglas de FxCop. Como tal, recomiendan tener métodos que realicen la misma función.
Por ejemplo. .Add(), .Subtract(), etc ...
Para ahorrar en la duplicación de código, uno de estos métodos (la sobrecarga del operador o el método real) va a llamar al otro.
Mi pregunta es, ¿cuál debería llamar a cuál?
¿Es (y esto no es más que un código de ejemplo):
A)
public static MyStruct operator +(MyStruct struc1, MyStruct struct2)
{
return struc1.Add(struct2);
}
public MyStruct Add(MyStruct other)
{
return new MyStruct (
this.X + other.X,
this.Y + other.Y,
this.Z + other.Z);
}
o:
B)
public static MyStruct operator +(MyStruct struc1, MyStruct struct2)
{
return new MyStruct (
struct1.X + struct2.X,
struct1.Y + struct2.Y,
struct1.Z + struct2.Z);
}
public MyStruct Add(MyStruct other)
{
return this + other;
}
Realmente no estoy seguro cualquiera es preferible, pero estoy buscando algunas opiniones :)
¿Por qué hizo que los métodos basados en instancias en lugar de estáticos con dos parámetros? ¿Es eso lo que FxCop recomienda? –