2013-08-23 3 views
0

오브젝트 유형에 따라 인터페이스를 유추 할 수있는 방법이 있습니까? , 내가하고 싶은 무엇컴파일 타임에 유형별로 인터페이스 반입

public interface IPerson 
{ 
    string FirstName 
    { get; set; } 

    string LastName 
    { get; set; } 
} 

는 일반적인 프록시 공장을 만들 수있다 : 내가 좋아하는 것

public class Person 
{ 
    public string FirstName 
    { get; set; } 

    public string LastName 
    { get; set; } 
} 

이 인터페이스를 추론 할 수 있도록 : 예를 들어 나는 다음과 같은 객체가 있다면 reflection.emit을 사용하면 컴파일 타임에 유추 된 인터페이스를 준수합니다. 나는 대신 모든 객체의 속성을 가진 동적 객체를 반환 할 수 있다는 것을 알고 있지만, 런타임과 컴파일시 모두 처리됩니다.

편집

내가 달성하기 위해 노력하고있어에 대한 조금 더 설명. 이 같은 서명 뭔가 방법이있는 프록시 클래스를 만들려면 :

public T GetProxyFor<U>(U SomeObject); 

사용자가 GetProxyFor (사람들을)를 호출하고, 사람들의 속성이 객체를 구현하는 것 PeopleProxy 개체를 다시 얻을 수 있습니다 그 방법 (또는 다른 객체). 그런 식으로이 코드를 사용하는 사람은 PeopleProxy.LastName을 호출 할 수 있으며 성공적으로 컴파일되지만 PersonProxy.Age를 호출하면 존재하지 않기 때문에 컴파일 할 때 오류가 발생합니다.

나는 Reflection과 방출에 상당히 익숙하다. 그래서 내가 원하는 것은 가능하지 않을 수도있다.

+4

목표는 무엇입니까? 해당 인터페이스를 코드 파일로 생성하는 코드 생성기를 작성하려고합니까? 아니면 실행중인 코드 내부에서 인터페이스를 구현하려고합니까? 또는 다른 것? –

+1

나는 이것을 위해 T4를 추천한다. –

+0

@JoeEnos, 원래 게시물에 수정 사항을 추가하여 제 질문에 대해 자세히 설명했습니다. – divinebovine

답변

1

기본적으로 컴파일 타임에 인터페이스를 만드는 일부 코드를 실행하는 것이 좋습니다.

옵션은 다음과 같습니다 T4와 같은

  1. 사용 뭔가. 이를 사용하여 컴파일 타임에 일부 입력을 기반으로 C# 코드를 생성 할 수 있습니다.
  2. F # 유형 공급자를 사용하십시오. 이는 기본적으로 정확히 원하는 것입니다 : 컴파일시 코드를 실행하고 GetProxyFor()을 호출하는 코드를 작성할 때 바로 인터페이스를 생성 할 수 있습니다. 그러나 C#에서는 이와 비슷한 점이 없으므로 F #으로 전환해야합니다 (최소한 GetProxyFor()을 사용하는 코드의 경우).
  3. 이 질문의 근원적 인 문제에 대해 생각해보고 다른 방식으로 해결하십시오.
관련 문제