Sto lavorando con un plattform .NET specifico per l'attività, che è precompilato e non OpenSource. Per alcune attività ho bisogno di estendere questa classe, ma non ereditando da essa. Voglio semplicemente aggiungere un metodo.Come si scrive un metodo di estensione per un tipo generico con vincoli sui parametri del tipo?
In un primo momento voglio visualizzare la dummycode classe esistente:
public class Matrix<T> where T : new() {
...
public T values[,];
...
}
desidero far giungere a questa classe nel seguente modo:
public static class MatrixExtension {
public static T getCalcResult<T>(this Matrix<T> mat) {
T result = 0;
...
return result;
}
}
Ho questa sintassi da molte google collegamenti quindi non ho idea se sia corretto. Il compilatore non mi dice alcun errore, ma alla fine non funziona. Alla fine voglio chiamare questa funzione nel modo seguente:
Matrix<int> m = new Matrix<int>();
...
int aNumber = m.getCalcResult();
Quindi qualcuno ha avuto un'idea? Grazie per l'aiuto!
saluti Nem
Perché pensi che non funziona? Fa un'eccezione? –
Questo è il modo corretto di usare un metodo di estensione, ma invece di 'T result = 0' dovresti avere' T result = default (T) 'perché T non è inizialmente vincolato a' int'.Oltre a questo, dovresti verificare di avere l'istruzione using per includere la tua classe MatrixExtension. Puoi sempre controllare chiamando 'MatrixExtension.getCalcResult (m)' direttamente per vedere se funziona. –
Almeno l'IDE mi obbliga a chiamare il metodo in questo modo: m.getCalcResult(); Ma quando provo a compilare questo ottengo un altro errore: > 'Matrix ' non contiene una definizione per 'GetValue' e nessun metodo di estensione 'GetValue' accettare un primo argomento di tipo 'Matrix ' potrebbe essere trovato (ti manca una direttiva using o un riferimento all'assembly?) In ogni modo questo modo di chiamare il metodo non ha senso perché il parametro generico T è già assegnato. –