VB6에는 프로 시저가 끝난 후 값을 유지하는 로컬 정적 변수가 있습니다. 공용 vars를 사용하는 것과 같지만 로컬 블록을 사용합니다. 예를 들어 :VB6의 C#에서 정적 인 정적?
sub count()
static x as integer
x = x + 1
end sub
전화 (10) 후, x는 10이 될 것이다 나는 .NET (심지어 자바)에서 같은 일을 검색 할 시도했지만 아무도 없었다. 왜? 그것은 어떤 식 으로든 OOP 모델을 깨뜨릴 수 있으며 그것을 에뮬레이션 할 수있는 방법입니다. 요청에 따라
private static int x;
public [static] void Foo() {
x++;
}
폐쇄 예 :
using System;
class Program {
private static readonly Action incrementCount;
private static readonly Func<int> getCount;
static Program() {
int x = 0;
incrementCount =() => x++;
getCount =() => x;
}
public void Foo() {
incrementCount();
incrementCount();
Console.WriteLine(getCount());
}
static void Main() {
// show it working from an instance
new Program().Foo();
}
}
정적 생성자를 사용하여 클로저를 사용하여 델리게이트 필드를 초기화하면 정적 필드와 달리 변수에 대한 액세스가 약간 더 가까워집니다 (클래스에서 리플렉션 또는 다른 클래스 메서드에서 볼 수 없음) –
@Ben - 재미있는 접근 방식이지만 추가 복잡성이 많습니다. 사람들이 캡처 된 변수를 이해하도록하는 것이 가장 좋은 방법입니다. -p –
그래, 알 겠어. 왜? * 왜? 그것은 어떤면에서 OOP를 깨뜨릴 수 있습니까? – blez