Avant que la réflexion ne soit utilisée, la pratique courante pour les appels inter-projets consistait à ajouter des références au niveau du projet.
Exemple : Si la classe Client appelle la classe MysqlHelper
Générez d'abord le projet MysqlHelper,
Puis ajoutez MysqlHelper dans la classe Client .dll,
puis instanciez-la dans la méthode Client, puis appelez la méthode.
Après avoir utilisé la réflexion, vous pouvez la configurer et l'utiliser de manière plus flexible.
Comme indiqué ci-dessus, le client doit appeler l'interface de la base de données, nous ne savons pas quelle base de données coder en dur (MySQL, SQLServer, Oracle... )
Définissez d'abord l'interface. Supposons que l'interface n'ait qu'une seule méthode Query() pour implémenter cette interface. Ensuite, le type de base de données nouvellement ajouté n'affectera pas le projet d'origine, réalisant ainsi l'ouverture et la création. principe fermé (fermé aux modifications, fermé aux extensions ouvert).
Classe d'interface DbHelper.cs
using System; namespace IHelper { public class DbHelper { public DbHelper() { Console.WriteLine("This is DbHelper construction"); } public virtual void Query() { Console.WriteLine("This is query method"); } } }
OracleDbHelper.cs
using System; using IHelper; namespace OracleHelper{ public class OracleDbHelper : DbHelper { public override void Query() { base.Query(); Console.WriteLine("This is query from OracleDbHelper"); } } }
MySqlDbHelper.cs
using System; using IHelper; namespace MySqlHelper{ public class MySqlDbHelper :DbHelper { public override void Query() { base.Query(); Console.WriteLine("This is query method from MySqlDbHelper"); } } }
Program.cs côté client call :
Placez les fichiers dll et pdb générés par le projet de classe d'aide de la base de données dans le répertoire bin du client, puis ajoutez la configuration dans App.config, puis utilisez la classe Assembly sous Reflection pour l'implémenter.
Program.cs
static void Main(string[] args){ string config = ConfigurationSettings.AppSettings["DbHelper"]; Assembly assembly = Assembly.Load(config.Split(',')[0]); Type typeHelper = assembly.GetType(config.Split(',')[1]); Object oHelper = Activator.CreateInstance(typeHelper); DbHelper dbHelper = (DbHelper) oHelper; dbHelper.Query(); Console.Read(); }
Configuration de l'application client.config :
<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <!--<add key="DbHelper" value="MySqlHelper,MySqlHelper.MySqlDbHelper"/>--> <add key="DbHelper" value="OracleHelper,OracleHelper.OracleDbHelper"/> </appSettings></configuration>
Résultat d'exécution
Ce qui précède est le contenu de la réflexion C# Reflection. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !