Je préfère utiliser génériques par rapport à la méthode surchargeant. Lorsque la surcharge est nécessaire je préfère passer une instance d'une classe (ou d'une interface) ayant tous les paramètres, puis vérifier valeurs personnalisées par défaut pour chaque paramètre, si la valeur est la valeur par défaut cela signifie qu'aucune valeur n'a été donnée pour un tel paramètre .
Avec version 4.0 du Framework de Microsoft, il est plus facile d'utiliser les médicaments génériques parce que, il y a un mot-clé nommé dynamique par lequel vous pouvez appeler une méthode statique de méthodes génériques:
namespace Layer.Logic
{
public class EntityObjectCommands : LogicContextBase, IEntityObjectCommands
{
public Tresult Get<Tcommand, Tresult>(Tcommand command) where Tcommand : ICommandGet
{
Tresult result = default(Tresult);
DBEntityObjectCommands dbfactory = new DBEntityObjectCommands(GetDataServiceParam(dbserver));
result = dbfactory.Get<Tcommand, Tresult>(command);
return result;
}
}
}
namespace Layer.Data
{
public class DBEntityObjectCommands : IEntityObjectCommands
{
public Tresult Get<Tcommand, Tresult>(Tcommand command) where Tcommand : ICommandGet
{
Tresult result = default(Tresult);
OleDbCommandInfo commandInfo = DBCommandProvider<Tcommand>.Get(command);
//-- implement logic to use [commandInfo] ...........
return result;
}
}
public static class DBCommandProvider<Tcommand> where Tcommand : ICommand
{
public static OleDbCommandInfo Get(Tcommand command)
{
return DBCommands.Get((dynamic)command);
}
}
}
Pourquoi pas seulement cast au type qui correspond à la signature de la méthode? Ça va être aussi bavard. – cdhowie
Pourriez-vous nous dire ce qu'est UIP et nous montrer la méthode OnEnterTask que MSFT a écrit dans le code? –
un contrôleur peut être entré avec différents types d'arguments d'entrée et les appels à OnEnterTask sont très génériques. En raison du système de configuration de uip –