2015-02-04 2 views
2

MSpec이 정적 필드 만 필요하도록 만드는 이유는 무엇입니까? 직접 때문에 /이/정리 대표/MSpec에서 테스트중인 모든 필드가 정적 인 이유는 무엇입니까?

cannot access non static field in static context

+0

http://stackoverflow.com/a/18157580/43846 – stuartd

+0

두 명의 대표가 공용 대리인을 정의 함 void Establish(); 공개 대리자 void It(); void Method()와 같은 메소드 { } xx =() => a.State = "1"; yy =() => a.State = "2"; } "a"가 정적 일 필요는 없습니다. 질문 - 표면 아래에서 어떻게 mspec이 이것을 부과합니까? – hvd

답변

1

MSpec 컨텍스트 클래스를 인스턴스화하지 않고 오히려이 수립 호출 예를 들어, 코드는 여기에 오류를

public class When_not_enabled 
{ 
    private static ActionExecutingContext filterContext; 

    // On purpose I've made subject non static 
    private CompleteOrderGuardFilter subject; 

    Establish context =() => 
    { 
     // Here I get cannot access non static field in static context 
     subject = new CompleteOrderGuardFilter(null, false); 
     filterContext = new ActionExecutingContext(); 
    }; 
} 

오류가 발생합니다. 따라서 상태 (클래스 인스턴스)가 작성되지 않으며 전 세계에서 사용할 수있는 대리인간에 전달하려는 모든 정보가 필요합니다. 지. static.

+0

안녕하세요. 나는 그 필요성을 이해한다. 구현의 관점에서 컴파일러가 필드를 정적으로 강제하도록 어떻게 지시합니까? – hvd

+0

컴파일러는 정적 필드 자체에 대한 액세스를 강제 실행합니다. 이것은 C# 언어 디자인 때문입니다. –

관련 문제