사실을 엔진에서 논리적으로 모델링하는 방법과 .NET 코드에서 개체를 모델링하는 방법 사이에는 임피던스 불일치가 있습니다.이 중 하나의 영향은 정적 메서드를 호출하는 문제입니다. Xiao Han이 설명한 것처럼 StaticSupport 플래그를 설정하면 엔진은 정적 메서드를 내장 함수 또는 술어처럼 취급하여 동작을 변경합니다. 그러나 기본적으로 엔진은 정적 메서드를 사실의 동작으로 처리합니다. 물리적으로 사실은 엔진의 작업 메모리에있는 객체이며, 각 메소드는 메소드가 사용되기 전에 엔진에 선언되어야합니다. 따라서 DateTime에서 정적 Now 속성 getter를 호출하려면 먼저 엔진에 DateTime 개체를 어설 션해야합니다. 물론 DateTime은 값 유형 (구조)이지만 규칙 세트를 실행할 때 하나의 사실을 Object 또는 사실 집합으로 Object 배열로 선언하기 때문에 문제가되지 않습니다. .NET은 자동으로이 방식으로 전달 된 DateTime (내부적으로 객체로 랩핑 함)을 자동으로 상자에 넣습니다.
정적 메서드 (또는이 경우에는 속성 메서드, 실제로는 메서드 인)를 호출하기 위해 엔진에 개체를 지정해야한다는 사실이 미친 듯이 보입니다. 그 대상. 엔진이 기본적으로 정적 메소드를 내장 함수로 처리하도록 빌드 된 경우라면 더 좋을 것입니다. 그러나 그것은 사실이 아닙니다. 또한 Microsoft가 StaticSupport 플래그를 개별 규칙 세트 또는 개별 규칙 수준으로 구현 한 경우 훨씬 더 효과적이었을 것입니다. 이 방법으로 레지스트리 (컴퓨터 수준)에서 구현하거나 .config 파일 (응용 프로그램 수준, 사용)에서 구성하는 것은 실제 문제를 일으킬 수 있습니다. 이는 규칙 집합의 반대 값을 사용하도록 작성된 규칙 집합을 손상시킬 수 있기 때문입니다. 깃발.
정적 지원도 '2'로 설정할 수 있다는 점을 명심해야합니다. 이 경우 매개 변수없이 정적 메서드를 호출하거나 상수 값으로 만 호출하고 조건의 조건 자나 다른 함수의 인수로 호출하는 경우 엔진은 정적 멤버를 한 번만 캐시하고 결과를 캐시합니다.