Réflexion C# Réflexion

黄舟
Libérer: 2017-02-06 17:16:36
original
1226 Les gens l'ont consulté

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

  1. Générez d'abord le projet MysqlHelper,

  2. Puis ajoutez MysqlHelper dans la classe Client .dll,

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

Réflexion C# Réflexion

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");
        }
    }
}
Copier après la connexion

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");
        }
    }
}
Copier après la connexion

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");
        }
    }
}
Copier après la connexion

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();
}
Copier après la connexion

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>
Copier après la connexion

Résultat d'exécution

Réflexion C# Réflexion

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) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal