Heim  >  Artikel  >  Backend-Entwicklung  >  C#-Reflexion Reflexion

C#-Reflexion Reflexion

黄舟
黄舟Original
2017-02-06 17:16:361213Durchsuche

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");
        }
    }
}

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

C#-Reflexion Reflexion

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


Stellungnahme:
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
Vorheriger Artikel:Ein wenig Kenntnisse in C# (2)Nächster Artikel:Ein wenig Kenntnisse in C# (2)