Estoy trabajando con una plataforma .NET plataforma específica, que está precompilada y no OpenSource. Para algunas tareas, necesito extender esta clase, pero no heredando de ella. Simplemente quiero agregar un método.¿Cómo escribo un método de extensión para un tipo genérico con restricciones en los parámetros de tipo?
Al principio yo quiero mostrar una clase existente dummycode:
public class Matrix<T> where T : new() {
...
public T values[,];
...
}
quiero extender esta clase de la siguiente manera:
public static class MatrixExtension {
public static T getCalcResult<T>(this Matrix<T> mat) {
T result = 0;
...
return result;
}
}
Tengo esta sintaxis de muchos google enlaces así que no tengo idea si es correcto. El compilador no me dice ningún error, pero al final no funciona. Al final quiero llamar a esta función de la siguiente manera:
Matrix<int> m = new Matrix<int>();
...
int aNumber = m.getCalcResult();
Así Alguien tiene una idea? ¡Gracias por tu ayuda!
Saludos Nem
¿Por qué cree que no funciona? ¿Lanza una excepción? –
Esta es la forma correcta de usar un método de extensión, pero en lugar de 'T result = 0' debe tener' T result = default (T) 'porque T no está inicialmente limitado a' int'.Aparte de eso, debe verificar que tenga la instrucción de uso para incluir su clase MatrixExtension. Siempre puede verificar llamando a 'MatrixExtension.getCalcResult (m)' directamente para ver si está funcionando. –
Al menos el IDE me obliga a llamar al método de esta manera: m.getCalcResult(); Pero cuando intento compilar este consigo otro error: > 'Matrix ' no contiene una definición para 'GetValue' y ningún método de extensión 'GetValue' aceptar un primer argumento de tipo 'Matrix ' podría ser encontrado (¿falta una directiva de uso o una referencia de ensamblado?) Por cierto, esta forma de llamar al método no tiene sentido porque el Parámetro T genérico ya está asignado. –