2013-03-22 2 views
0

출하 (내부적으로 배송되었지만) 된 라이브러리가 있으며 라이브러리 내의 공용 클래스의 이름을 바꾸고 싶습니다.출하 된 라이브러리의 공용 클래스 이름 바꾸기

는 내가하고 싶은 것은

  • 클라이언트 코드를 작업에

    • 클라이언트 코드가 유지되었는지 확인하는 방법입니다

    • 인가 클래스 이름의 사용에 컴파일에 중단 경고를 가져옵니다 거기에 어떤 방법으로 클래스의 별칭을 지정할 수있는 방법이 있습니다.

    • 앞으로이 문제를 피할 수있는 방법이 있습니까? (클래스의 이름이 정확하고 철자가 맞는지 확인하는 것 외에는 다른 방법이 있습니까?) public 생성자를 유지하고 싶습니다. 인터페이스로 작업해도 모든 문제가 해결되지는 않습니다.
  • 답변

    3

    당신은 '클래스에 공용 별명을 제공 할 수 있습니다,하지만 당신은 이름을 바꾼 클래스의 전용 인스턴스 등 모든 공용 속성, 메서드를 전달하고 사용되지 않는 속성을 가진 클래스를 장식 할 수 있습니다

    [Obsolete("Please use LatestGreatest instead.")] 
    public class OldSchool 
    { 
        private LatestGreatest _Target; 
    
        public OldSchool() 
        { 
         _Target = new LatestGreatest(); 
        } 
    
        public void DoSomething() 
        { 
         _Target.DoSomething(); 
        } 
    
        [Obsolete("Please use LatestGreatest.DoItInSomeOtherWay()")] 
        public void DoTheOldWay() 
        { 
         _Target.DoItInSomeOtherWay(); 
        } 
    } 
    
    public class LatestGreatest 
    { 
        public void DoSomething() 
        { 
         Console.WriteLine("I'm so fresh and cool."); 
        } 
    
        public void DoItInSomeOtherWay() 
        { 
         Console.WriteLine("Let's do it..."); 
        } 
    } 
    

    오래된 수업의 공개면의 크기에 따라이 작업은 상당히 지루할 수 있지만 할 수있는 작업은 없습니다.

    +0

    필자의 경우 인터페이스가 변경되지 않았으므로 클래스 이름에만 공개 DoTheOldWay() 또는 DoItInSomeOtherWay()가 적용됩니다. – Martijn

    +0

    클래스 이름 만 있고 문제가있는 경우 클래스의 이름을 바꾸고 원래 이름으로 이름이 지정된 하위 클래스를 만들 수 있습니다. 이 하위 클래스는 기본 클래스 생성자를 호출하는 생성자를 정의하고 ObsoleteAttribute로 장식해야합니다 (이 답변 에서처럼). 새 클래스를 사용하는 코드는 이전 클래스의 인스턴스를 허용합니다. 슬프게도, 그것은 다른 방향으로 돌아 가지 않을 것입니다. – Palec

    관련 문제