C# 반사 반사

黄舟
黄舟원래의
2017-02-06 17:16:361256검색

리플렉션을 사용하기 전에는 프로젝트 간 호출의 일반적인 관행은 프로젝트 수준에서 참조를 추가하는 것이었습니다.

예: Client 클래스가 MysqlHelper 클래스를 호출하는 경우

  1. 먼저 MysqlHelper 프로젝트를 생성하고

  2. MysqlHelper를 추가합니다. Client 클래스 .dll,

  3. 을 Client 메서드에서 인스턴스화하고 메서드를 호출합니다.

Reflection을 사용한 후에는 보다 유연하게 구성하여 사용할 수 있습니다.

C# 반사 반사

위와 같이 클라이언트는 데이터베이스 인터페이스를 호출해야 하는데, 데이터베이스에서는 어떤 데이터베이스를 하드코딩할지 알 수 없습니다(MySQL, SQLServer, Oracle... )

먼저 인터페이스를 정의합니다. 인터페이스에 Query() 메서드가 하나만 있다고 가정합니다. 그러면 새로 추가된 DB 유형이 원본 프로젝트에 영향을 미치지 않으므로 개방형 및 폐쇄형 원칙(수정 폐쇄형, 확장 폐쇄형).

인터페이스 클래스 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 호출:
호출 데이터베이스 도움말 클래스 프로젝트에서 생성된 dll 및 pdb 파일을 클라이언트 bin 디렉터리에 배치한 다음 App.config에 구성을 추가한 다음 Reflection 아래의 Assembly 클래스를 사용하여 구현합니다.

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

클라이언트 App.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>

실행 결과

C# 반사 반사

위 내용은 C# Reflection 반영 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.