문제

나는 Rhinomocks로 조롱하는 일을 해왔으며 조롱 방법을 가상으로 만들어야합니다. 현재 가상으로 표시되지 않은 조롱하려는 메소드가 포함 된 사용자 정의 프레임 워크를 제외하고는 괜찮습니다.

이러한 방법을 가상으로 만드는 데 문제가 없지만 찾아야 할 방법을 가상으로 만드는 데 어떤 잠재적 위험이 있는지 궁금해했습니다.

도움이 되었습니까?

해결책

실제로 메소드가 재정의되도록 설계되지 않았고 누군가가 그것을 무시하는 경우에 매우 문제가 될 수 있습니다. 특히, 생성자에서 가상 메소드를 호출하지 마십시오. 고려하다:

class Base {
    public Base() {
       InitializeComponent();
    }
    protected virtual void InitializeComponent() {
        ...
    }
}

class Derived : Base {
    private Button button1;
    public Derived() : base() {
        button1 = new Button();
    }
    protected override void InitializeComponent() {
        button1.Text = "I'm gonna throw a null reference exception"
    }
}

파생 클래스는 가상 메소드 호출이 자체 생성기의 한 줄이 실행되기 전에 초기화 성분 메소드가 호출되는 것을 알지 못할 수 있습니다.

다른 팁

  • 가상 메서드를 무시하는 사용자가있는 경우 코드를 깨지 않고 다시 밀봉 할 수 없습니다.
  • 생성자에서 호출하는 가상 메소드는 파생 구현으로 떨어질 수 있으며 기본 메소드를 호출하지 않고 생성자가 이에 의존하면 객체가 잘못된 상태에있을 수 있습니다.

Ayende는 가상 방법의 작동 방식을 잘 처리합니다.

http://ayende.com/blog/archive/2007/01/05/howvirtualmethodswork.aspx

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