2017-03-08 17 views
-1

문제가있는 타사 어셈블리를 사용하고 있습니다. 컴파일러에서 메소드를 사용해서는 안되지만 런타임은 괜찮습니다. 개발자에게 경고 할 수있는 방법이 있습니까? 더 이상 사용되지 않는 속성과 비슷하지만 다른 어셈블리에 사용됩니다. 가상이 아니기 때문에 메서드를 재정의 할 수 없습니다.다른 어셈블리에서 메서드 사용 금지

+0

@HimBromBeere 그는 액세스 권한이없는 제 3 자의 어셈블리에서 쓸모없는 메서드를 표시 할 방법을 묻습니다. 내가 알기에 그렇게 할 방법이 없다. – InBetween

+1

그럼 대답 할 수 있습니다 : http://stackoverflow.com/questions/8316869/add-an-attribute-to-another-assemblys-class – HimBromBeere

답변

0

이것이 가능하다는 것을 알 수있는 유일한 방법은 자체 어셈블리에서 API를 래핑하고 개발자가 제공된 어셈블리 대신 어셈블리를 사용하도록하는 것입니다.

using MyAPI; 

public class MyWrapper 
{ 
    private MyAPI _api; 

    public MyWrapper() 
    { 
     _api = new MyAPI(); //Especially if you want to do some inits 
    } 

    public void APIMethod() 
    { 
     _api.APIMethod(); 
    } 
} 

내, 그것은 개발자는 단지 새로운 클래스와 객체의 인스턴스를 교체하거나 더 건방지게, 클래스에게 같은 일을 호출하고 네임 스페이스를 변경할 수 있습니다 같은 방법으로 이름을 사용.

그런 다음 문제가되는 메서드를 생략하거나 더 이상 사용하지 않는 것으로 표시 할 수 있습니다.

API를 변경하면 다시 생성 할 수 있도록 T4 템플릿을 사용하여 코드를 생성 할 수도 있습니다. 이 유용 https://msdn.microsoft.com/en-us/library/dd820614.aspx

희망 - 당신이 반사를 사용하는 경우, 당신도 T4에 n 간단한 정보를 위해 T4 ...

를 작성해야하지 않을 수 있습니다.

+0

만약 내가 감쌌다면, 나는 또 다른 문제를 하나씩 만 거래하고있을 것이다. 메소드의 클래스를 상속 (랩핑되지 않은) 한 다음 메소드를 섀도 잉한 클래스를 작성한 경우의 문제점은 무엇입니까? 너무 문제가 있습니까? – BSalita

+0

어떤 종류의 포워딩 도움말이 있습니까? – BSalita

+0

@BSalita 한 가지 문제를 다른 것에 대해 거래하는 것이 무슨 뜻인지 확신하지 못합니다.이 작업을 통해 원하는 것을 얻을 수 있으며 리플렉션과 코드 생성을 사용하면 단 한 번만 수행하면됩니다. 숨기려는 메서드가 가상이 아니라고 지적했기 때문에 재정의 할 수 없습니다. 따라서 운이 없으면 두려워합니다. – Rendition