Aspetta, credo tu stia considerando l'esempio che ti ho introdotto come inadatto.
L'esempio corretto è questo:
Codice PHP:
using System;
namespace Application
{
public interface IDb
{
void connect();
void exec();
}
public class MySQL : IDb
{
public MySQL(){}
public void connect(){ Console.WriteLine("MySQL.connect"); }
public void exec(){ Console.WriteLine("MySQL.exec"); }
}
public class Access : IDb
{
public Access(){}
public void connect(){ Console.WriteLine("Access.connect"); }
public void exec(){ Console.WriteLine("Access.exec"); }
}
public class Test
{
public static void f(IDb db)
{
db.connect();
db.exec();
}
public static void Main()
{
MySQL a = new MySQL();
Access b = new Access();
f(a);
f(b);
}
}
}
Dove non hai una classe base. Hai tante classi quanti sono i db che devi gestire.
Ad esempio, supponiamo che la classe principale Test abbia un attributo dbhandler e ci siano due tasti e due relativi event handler (non ho visual studio davanti e non ricordo molto bene l'argomento event, quindi utilizzo pseudocodice):
Codice PHP:
using System;
namespace Application
{
public interface IDb
{
void connect();
void exec();
}
public class MySQL : IDb
{
public MySQL(){}
public void connect(){ Console.WriteLine("MySQL.connect"); }
public void exec(){ Console.WriteLine("MySQL.exec"); }
}
public class Access : IDb
{
public Access(){}
public void connect(){ Console.WriteLine("Access.connect"); }
public void exec(){ Console.WriteLine("Access.exec"); }
}
public class Postgres : IDb
{
public Postgres(){}
public void connect(){ Console.WriteLine("Postgres.connect"); }
public void exec(){ Console.WriteLine("Postgres.exec"); }
}
public class Test
{
private IDb dbhandler;
public static void f(IDb db)
{
db.connect();
db.exec();
}
public static void Main()
{
init();
buttonMySQL.clickeventhandler += btnMySQL.EventHandler();
buttonAccess.clickeventhandler += btnAccess.EventHandler();
buttonPostgres.clickeventhandler += btnPostgres.EventHandler();
buttonExec.clickeventhandler += btnExec.EventHandler();
}
btnMySQL.EventHandler()
{
dbhandler = new MySQL();
}
btnAccess.EventHandler()
{
dbhandler = new Access();
}
btnPostgres.EventHandler()
{
dbhandler= new Postgres();
}
btnExec.EventHandler()
{
f(dbhandler);
}
}
}