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