2010-05-11 3 views
1

'SetData'메서드를 사용하여 스레드와 값을 연결하는 방법을 찾고 있지 않습니다.호출하는 메서드의 범위와 관련된 속성은 어떻게 설정합니까?

호출하는 메소드의 범위에서만 존재하는 일종의 데이터를 저장해야하며 직접 부모이거나 스택에서 호출되는 다른 호출이 될 수 있습니다. 예 이 경우

void SomeMethod() 
{ 
    string someInfo = "someInfo"; 
    SomeOtherMethod(); 
    object data = GetDataOnCurrentScope("someKey"); 
} 

void SomeOtherMethod() 
{ 
    SetDataOnParentScope("someKey", somevalue); 
} 

'someInfo의 로컬 변수'것으로 someMethod '복귀 후에 사라지는 것 "someKey"키 데이터 세트 모두. 이게 가능한가? 이것은 스택의 규칙에 어긋나지 만 누군가가 아이디어를 가지고 있는지를 아는 사람은 ...

obs : 현재 컴파일러가 모든 것을 시작할 때마다 사전에 참조를 선언하는 것이 유일한 방법이라고 생각합니다. 메서드의 호출 스택. 이 사전은 메서드가 반환 될 때 가비지 수집에 적합합니다.

+0

여러 메서드를 중첩시킬 수있는 값을 반환하는 것과 관련된 문제가 있으며 하나 이상의 다른 수준 (호출 스택 위아래 모두)에서 값을 사용해야 할 필요가 있습니까? – Ragoczy

+0

그런 식으로하지 말고, 나는 방법 차단에 그것을 사용해야한다. –

답변

1

개인적으로 당신이 제공하는 예를 통해 나는 이것이 어떻게 유용 할지를 보지 못한다. 구현의 관점에서 보았을 때 왕실의 PITA가 될 것이다.

여기서 설명하는 것은 값을 반환하는 함수입니다. 따라서 반환 유형을 사용하지 않고 디자인 방식대로 사용하는 것이 어떻습니까?

+0

'SomeMethod'가 객체에 데이터베이스 연결 열기를 요청하면, AOP에서 유용 할 것이다. 하나는 데이터베이스 열기 메소드를 인터셉트하고 연관된 트랜잭션을 설정한다. 미리 정의 된 차단 점을 설정할 필요없이 'SomeMethod'의 호출 범위. –

0

한 가지 방법으로 범위를 지정하고 다른 방법으로 범위를 지정하려면 일반적으로 첫 번째 방법으로 개체를 만들고 두 번째 방법으로 개체를 매개 변수로 전달하거나 두 번째 방법으로 첫 번째 방법에서 필요한 개체를 반환하게합니다. . 먼저 개체를 필요로하는 사람에 따라 다릅니다.

+0

댓글 위 읽기 –

관련 문제