C#-Reflexion Reflexion

黄舟
Freigeben: 2017-02-06 17:16:36
Original
1221 Leute haben es durchsucht

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

  1. Generieren Sie zuerst das MysqlHelper-Projekt,

  2. Dann fügen Sie MysqlHelper hinzu die Client-Klasse .dll,

  3. 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.

C#-Reflexion Reflexion

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");
        }
    }
}
Nach dem Login kopieren

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");
        }
    }
}
Nach dem Login kopieren

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");
        }
    }
}
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

Laufergebnis

C#-Reflexion Reflexion

Das Obige ist der Inhalt der C#-Reflexion. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage