¿Por qué C# requiere que las sobrecargas del operador sean métodos estáticos en lugar de funciones de miembro (como C++)? (Quizás más específicamente: ¿cuál fue la motivación de diseño para esta decisión?)¿Por qué las sobrecargas del operador C# deben ser estáticas?
Respuesta
Eche un vistazo a this post.
Un par de razones, la principal parece ser para preservar la simetría del operador (de modo que el lado izquierdo de una operación binaria no recibe un tratamiento especial, como responsable del envío de la operación).
responden en absoluto detalle aquí:
También hay otro punto sutil sobre los tipos de valores y operadores de instancia. operadores estáticas hacen que este tipo de código posible:
class Blah {
int m_iVal;
public static Blah operator+ (Blah l, int intVal)
{
if(l == null)
l = new Blah();
l.m_iVal += intVal;
return l;
}
}
//main
Blah b = null;
b = b + 5;
Así puede invocar el operador, a pesar de que la referencia es nula. Este no sería el caso para los operadores de ejemplo.
Quizás es mejor pensar por qué los métodos no deberían ser estáticos. No hay necesidad de estado y por lo tanto esto.
Puede que no exista un beneficio estatal, pero tener una sobrecarga de operador virtual sería genial. La cosa de estado no es la razón por la cual no está disponible en C#. –
- 1. ¿Por qué las uniones anónimas globales deben declararse como estáticas?
- 2. ¿Deben reemplazarse las variables estáticas por enumeraciones?
- 3. ¿Por qué las variables pasadas a ejecutable deben ser definitivas?
- 4. Sobrecargas de reflexión y operador en C#
- 5. LINQ y del operador sobrecargas dinámicas
- 6. C++ múltiples sobrecargas de operador para el mismo operador
- 7. Usando C/Pthreads: ¿las variables compartidas deben ser volátiles?
- 8. ¿Por qué los métodos parciales deben ser anulados?
- 9. ¿Por qué las funciones de devolución de llamada deben ser estáticas cuando se declaran en la clase
- 10. ¿Por qué Attributes.IsDefined() faltan sobrecargas?
- 11. clases estáticas deben derivarse de objeto (C#)
- 12. ¿Por qué deben definirse los métodos de extensión C# en clases estáticas?
- 13. ¿Las implementaciones IDisposable.Dispose() deben ser idempotentes?
- 14. Sólo las variables deben ser pasados por referencia - socket_select()
- 15. normas estrictas: Sólo las variables deben ser pasados por referencia
- 16. ¿Por qué las estructuras estáticas no están permitidas en C#?
- 17. ¿Las llaves JSON deben ser únicas?
- 18. ¿Por qué variables estáticas necesitan ser declarados dos veces en C++
- 19. java @SafeVarargs por qué los métodos privados deben ser finales
- 20. En Java, ¿por qué deben equals() y hashCode() ser consistentes?
- 21. ¿Dónde se puede encontrar una lista de sobrecargas del operador?
- 22. ¿Por qué Android prefiere las clases estáticas
- 23. ¿Qué tipos de sobrecargas de operador admite Delphi?
- 24. Creando un contenedor 'cosa' en C++ para mantener las funciones estáticas. ¿Qué debería ser "cosa"?
- 25. ¿Por qué C# no tiene bibliotecas estáticas de estilo C++?
- 26. ¿Por qué los métodos estáticos deben ser incluidos en una clase?
- 27. Miembro Las variables de una interfaz deben ser definitivas ... ¿Por qué?
- 28. ¿Por qué mis variables locales deben ser finales para ser accesibles desde una clase anónima?
- 29. Las claves foráneas deben ser Index en mySQL?
- 30. ¿por qué las constantes de Java se declaran estáticas?
C++ permite que los operadores sean funciones libres (es decir, no miembros). Pero C# decidió poner una prohibición de los estalinianos a las funciones gratuitas, por lo que debe poner estática allí. –