Я предпочитаю использовать генерики против перегрузки метода .Когда требуется перегрузка, я предпочитаю передавать экземпляр класса (или интерфейса), имеющий все параметры, а затем проверять настроенные по умолчанию значения для каждого параметра, если значение является значением по умолчанию, это означает, что значение не былодля такого параметра.
С версией 4.0 Microsoft Framework проще использовать дженерики, потому что есть некое ключевое слово с именем dynamic , с помощью которого можно вызватьстатический метод из универсальных методов:
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 );
}
}
}