문제

두 가지 방법이있는 자동 생성 클래스가 포함 된 DLL 어셈블리가 있다고 가정 해 봅시다.

public class AutoGeneratedClass
{
    public int DoSomething(bool forReal) { ??? }
    public void DoSomethingElse(string whatever) { ??? }
}

방법은 실제로 무엇이든 될 수 있습니다. 위는 단지 삽화 일뿐입니다.

어떤 종류의 코드를 생성해야합니까 ??? 위의 호출의 매개 변수를 자동으로 포장하고 다른 클래스의 단일 일반 메소드로 보내면 실제로 통화를 처리하고 결과를 반환 할 수 있습니까?

public class GenericClass
{
    public ??? GenericHandler(???) { ??? }
}

비슷한 일을 찾고있는 것 같아요 Expression<Func<...>> LINQ에서는 어디서나 파견 될 수있는 데이터 구조로 컴파일됩니다.

그러나 원래 방법 프로토 타입을 정상적이고 로컬로 구현 된 방법과 동일하게 유지하여자가 생성 클래스의 발신자를 더 현명하게 유지합니다.

이것이 달성 할 수 없다면 내 옵션은 무엇입니까?

고맙습니다!

도움이 되었습니까?

해결책

수업이 있어야합니까? 인터페이스를 사용하면 인생이 훨씬 쉬울 것입니다. 그러면 사용할 수 있습니다. System.Runtime.Remoting.Proxies.RealProxy 또는 주문에 새로운 유형을 만들 수 있습니다. 나는 믿는다 코뿔소 후자는 (도서관을 사용하여 무거운 리프팅을 수행) - 그리고 당신이 ~할 수 있다 Rhino.mocks가 어떻게 구현되는지 보는 것이 좋은 출발점 일 수 있습니다.

다른 팁

나는 당신의 모든 제한이 무엇인지 잘 모르기 때문에 여기서 어둠 속에서 찌르기를 할 것입니다. 이것은자가 생성 클래스의 일부 방법/부분 클래스에 좋은 사례처럼 들립니다. (참고 컴파일러를 통해이 제품을 실행하지 않았으므로 일부 정리가 필요할 것입니다.)

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal);
    public int DoSomething(bool forReal)
    {
        //some generated code against error conditions??
        return ProcessDoSomething(forReal)
    }

    .....
}

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal)
    {
        //call the generic handler...
    }
}

나는 여전히 Grokking Expressions를 연구하고 있기 때문에 일반 핸들러의 LINQ와 같은 표현 부분에서 멀리 떨어져있을 것입니다. 그러나 고려해야 할 것은 LINQ와 같은 표현식 경로를 내려 가면 제네릭 클래스를 유지하기가 얼마나 어렵고 쉽게 유지됩니까?

저의 경험은 꽤 많은 개발자가 대표와 람바 표현에 익숙하지 않다는 것입니다. 그들은 표현식을 사용하는 코드를 볼 때 문자 그대로 울부 짖습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top