2012-03-13 2 views
2

정적 클래스가 있습니다. 클라이언트가 인스턴스 변수를 사용하도록 클래스를 비추거나 수정합니다.인스턴스를 정적으로 처리하면 어떻게 처리 할 수 ​​있습니까?

질문 : 이전 정적 클래스를 그대로두고 사용하도록 허용하고 (사용되지 않는 특성 사용) 새로운 비 정적 클래스 (동일한 이름, 동일한 메서드 이름)도 사용할 수있게하려면 어떻게해야합니까?

이것이 가능합니까?

+1

다른 네임 스페이스가 효과가 있습니까? –

+0

나는 그것이 까다 롭다는 것을 나는 알고있다, 그러나 나는 동일하게 남아 있고 싶으면. 내가 묻는 것은 가능하지 않습니다. 전화 할 때 차이점을 알 수 없다는 것은 짜증나게합니다. – dbobrowski

답변

2

이 사용할 수있는 여러 가지 방법이 있지만, 아무도 당신이 원하는 것을 정확히을하지 않는다 :

  1. 는 구현,이 부분 있도록 선택적으로 정상이 아닌 정적 클래스 만드는 static 수정을 제거하고, 두 번째 파일의 새 인스턴스 관련 코드. 그러나이 방법을 사용하면 클래스가 하나뿐이므로 전체 정적 클래스를 쓸모 없게 만들 수는 없습니다. 원래

로 새로운 새로운 네임 스페이스

  • 장소 새 프로젝트에서 새 클래스의 클래스,하지만 같은 공간에서 모든 기존의 정적 멤버가되지 않는 한 경우, 내가 갈 것
  • 장소 옵션 nbr의 경우. 1.

  • +0

    옵션 # 1은 원래 구현했지만 메서드 이름은 동일하므로 클라이언트는 이전의 정적 (현재는 부분) 클래스의 정적 메서드 만 볼 수 있으므로 새로운 기능이 숨겨집니다. – dbobrowski

    1

    나는 동일한 이름과 매개 변수를 유지할 수있을 것입니다 생각하지 않습니다하지만 당신이

    [Obsolete("This class is obsolete; use class B instead")] 
    

    비주얼 스튜디오들이 새로운 클래스를 이용해야한다고 사용자에게 암시합니다 할 수 .

    +0

    나는 이것을 할 것을 계획했다. – dbobrowski

    0

    동일한 클래스 이름과 같은 멤버가있을 수 없으므로 유형이 모호합니다. 이 작업은 자주 사용되지 않는 속성의 메시지 필드를 사용하여 대신 호출자에게 어떤 클래스 (이 경우에는 새 인스턴스 클래스)를 사용할지 알려줍니다.

    아마도 일부 복잡한 회선 인터페이스를 생각해 낼 수는 있지만, 가장 좋은 경우에도 발신자에게 명확하지 않은 경우에도 그들이 어떤 버전을 처리하고 있는지 알고 있어야합니다. 호출자는 instace 클래스와 정적 클래스를 다르게 처리해야하므로 사용중인 숨김으로 인해 문제가 발생할 수 있습니다. 당신이 할 수

    0

    한 가지는 다음과 같이 explicitly implemented interface을 통해 방법의 비 정적 버전을 구현하는 것입니다 : 이것은 컴파일하고 예상대로 비 정적 메서드 만 호출 할 수 있다는 점을 제외, 작동

    public interface ITest 
    { 
        string Foo(); 
    } 
    
    // your class 
    public class Test : ITest 
    { 
        //original, static version of Foo 
        public static string Foo() 
        { 
         return "foo"; 
        } 
    
        // Foo reimplemented as a non-static method 
        // note that you need to implement ITest explicitly 
        // for it to compile 
        string ITest.Foo() 
        { 
         return "foo"; 
        } 
    } 
    

    인터페이스를 통해, 즉

    관련 문제