Bevor die Reflexion zum Einsatz kam, bestand die gängige Praxis bei projektübergreifenden Anrufen darin, Referenzen auf Projektebene hinzuzufügen.
Beispiel: Wenn die Client-Klasse die MysqlHelper-Klasse aufruft
Generieren Sie zuerst das MysqlHelper-Projekt,
Dann fügen Sie MysqlHelper hinzu die Client-Klasse .dll,
und instanziieren Sie sie dann in der Client-Methode und rufen Sie dann die Methode auf.
Nachdem Sie Reflection verwendet haben, können Sie es flexibler konfigurieren und verwenden.
Wie oben gezeigt, muss der Client die Datenbankschnittstelle aufrufen. In der Datenbank wissen wir nicht, welche Datenbank fest codiert werden soll (MySQL, SQLServer, Oracle...). )
Definieren Sie zuerst die Schnittstelle. Es wird davon ausgegangen, dass die Schnittstelle nur eine Methode Query() hat. Dann hat der neu hinzugefügte DB-Typ keine Auswirkungen auf das ursprüngliche Projekt, wodurch die offene und geschlossenes Prinzip (geschlossen gegenüber Änderungen, geschlossen gegenüber Erweiterungen).
Schnittstellenklasse 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"); } } }
Client-seitiges Program.cs Aufruf:
Legen Sie die vom Datenbankhilfeklassenprojekt generierten DLL- und PDF-Dateien in das Bin-Verzeichnis des Clients, fügen Sie dann die Konfiguration in App.config hinzu und implementieren Sie sie dann mit der Assembly-Klasse unter Reflection.
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(); }
Client App.config-Konfiguration:
<?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>
Laufergebnis
Das Obige ist der Inhalt der C#-Reflexion. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!