2009-05-28 3 views
2

C#에서 SqlConnection 및 AdomdConnection 개체로 작업하고 있습니다.두 개의 유사한 클래스 함수를 C#의 한 클래스로 래핑 할 수 있습니까?

SqlConnection은 DbConnection, ICloneable에서 생성됩니다.

AdomdConnection은 다음과 같이 구성됩니다. 구성 요소, IDbConnection, IDisposable, ICloneable.

일반적인 인터페이스 나 클래스 유형을 사용하여 전달할 수 있기를 기대했지만 공통된 유형을 공유하지 않기 때문에 옵션으로 보이지 않습니다.

그들은 둘 다 비슷한 메소드를 가지고 있습니다.하지만 둘 중 하나를 호출하기 위해 로직을 작성하려고합니다. 그 중 하나를 자신의 클래스로 랩핑 한 다음 그 클래스를 호출하여 기본 유형.

public class ConnectionWrapper 
{ 
    protected object _Conn; 

    public ConnectionWrapper(object Conn) 
    { 
     _Conn = Conn; 
    } 

    public void Open() 
    { 
     if(_Conn is SqlConnection) { ((SqlConnection)_Conn).Open(); } 
     else if(_Conn is AdomdConnection) { ((AdomdConnection)_Conn).Open(); } 
    } 
} 

하지만 도움이되지만 그것을 할 수있는 더 좋은 방법은 없는지 궁금 할 수 없습니다

처음에, 나는 이런 식으로 뭔가를 사용할 수 있다고 생각.

더 읽기 쉬운 방법이 될 TypeMap 클래스를 보았습니다 (298976 참고).하지만 리턴 값을 사용하는 방법을 알 수는 없지만 더 좋은 방법이 있는지 궁금해합니다. 그것을하기 위해.

+0

당신이 제네릭으로 해결할 수있는 일처럼 보이는 오브젝트를 모두 처리 할 수있는 구현합니다. – workmad3

+0

하지만 두 연결 클래스가 이미 동일한 인터페이스를 구현할 필요는 없습니다. –

답변

11

IDbConnection 두 가지 유형에 공통적으로 사용하십시오.

SqlConnectionDbConnection에서 상속되며, 차례로 IDbConnection 인터페이스를 구현합니다. 이 인터페이스는 AdomdConnection에서도 구현됩니다. DbConnection, ICloneable :

따라서 당신은

+0

육체 목표에 OP에 대한 올바른 답을 얻으려면 SqlConnection은 IDbConnection을 구현하는 추상 클래스 인 DBConnection을 상속받습니다. –

+0

답장을 보내 주셔서 감사합니다. 그냥 지나칠 수있는 공통 인터페이스가 없지만 일반적인 방법이 있다면 어떻게 감쌀 수 있을까요? –

+0

질문에 표시 한 것과 같은 방식으로 많이 감쌀 것입니다. –

2

도록 SqlConnection이로 구성되는 두 가지 유형을 대표하는 IDbConnection 인터페이스를 사용할 수 있습니다.

예, 그것이

하지만 DBConnection 자체가 확장 Component, IDbConnection, IDisposable

그래서 당신이 IDbConnection

관련 문제