switch sume suma reste resta que punteros programa operaciones numeros multiplique multiplicacion divida con basicas c# types

sume - Restrinja el tipo para permitir operaciones de suma/resta(+/-) en C#



resta de n numeros en c++ (4)

es posible?

public interface Foo<TBar> where TBar : (can use the ''+'' and ''-'' operators)

Gracias.


No, no es posible.

En teoría, podría restringir la TBar de un tipo que implemente esos operadores, pero los operadores son estáticos, no se heredan.

Lo que significa que efectivamente restringirías tu tipo para que sea solo el tipo base, en cuyo caso podrías eliminar los genéricos por completo.

Y no, no puede restringir su parámetro genérico TBar para que sea "cualquier tipo que implemente esos operadores", simplemente no está disponible en el idioma.


Puede crear un tipo Foo que sobrecargue esos dos operadores y luego restringir su tipo genérico. Sin embargo, no puede restringir su parámetro genérico para requerir que cualquier tipo arbitrario sobrecargue a dichos operadores en una base ad hoc.


Puede sobrecargar a los operadores:

public static TBar operator +(TBar c1, TBar c2) { return ... // do the math }


Sí y No. Un parámetro genérico solo puede restringirse a

  • Implementar una interfaz
  • Tener un constructor accesible sin parámetros ( new() )
  • Tener un tipo de base particular
  • Ser una estructura / clase

El único de estos que es útil para los operadores + y - es el tipo base. Por lo tanto, si el tipo base contiene estos operadores, puede restringir su TBar para implementarlos también.

Sin embargo, esto no funciona en el sentido general. No importa qué tipo de base elija, no funcionará con los tipos que se usan más comúnmente con + y - . Es decir, int , double , string , etc ... porque se heredan de ValueType que no tiene esta restricción