2010-05-20 5 views
4

두 경우의 차이점은 무엇입니까? 첫째, 연결을 열고 매개 변수로 내 메서드에 전달하면 메서드에서 직접 연결을 여는 것과 비교할 수 있습니까?이 두 C# 방법의 차이점

cnn.open() 
func(cnn,param1,param2); 

대 당신이 한 경우보다 다른 게시 한 코드에서 아무 차이가 없습니다

func(cnn, param1,param2) 
{ 
    cnn.open(); 
    //open connection here 
} 
+5

을 사용해야 호출자 함수에서 호출되는 이상한 찾고 C# 메서드 선언을 본 적이있다. –

+2

아마도 그가하고 싶은 일에 대한 의사 코드 일뿐입니다. –

답변

2

, 당신의 전화 기능은 다른에, 연결을 닫기/열기 돌볼 필요가 당신을 그 기능이 그 일을 할 것으로 기대한다.

+1

두 시나리오에서 호출되는 메서드의 기대치에는 큰 차이가 있습니다. –

+0

- 메서드 서명에서 무엇을 할 것인가가 끔찍하게 분명하지는 않습니다 - 메서드는 연결이 열려 있는지 확인하고, 연결을 열고 닫지 않고 그냥 사용하는 것이 좋습니다. 아무런 차이가 없다고 말할 때 일반적인 기능적 관점에서 말합니다. – Paddy

0

차이점은 두 번째 방법은 연결을 여는 것입니다.

첫 번째 방법에서는 리소스 정리에 신경 쓰지 않고 연결 만 사용하면됩니다.

0

기능상의 차이는 없지만 연결을 열고 닫는 선은 일반적으로 가능한 한 서로 가깝게 있어야하므로 동일한 방법이어야합니다.

0

차이점은 연결 및 성능을 사용하는 방법에 있습니다. 당신이 전화하는 경우

func(param1, param2) { 
    Connection c = .... 
    c.Open(...); 
    ... 
    c.Close(); 
} 

: 함수가 한 번 오프 호출이며 다른 함수를 호출하지 않거나 연결과 다른 작업을 수행하지 않는 경우, 함수의 두 번째 버전도 감소 될 수있다 연결에 대한 많은 함수, 심지어 연결에서 함수를 여러 번 호출하는 경우 또는 연결의 생성 및 구성이 코드의 상위 계층에있는 경우에는 함수의 첫 번째 버전을 사용해야합니다. 연결이 열려 있지 않으면 예외입니다.

0

글쎄, 나는 당신이 상황을 설명하고 어떤 경우에 사용해야하는지에 대한 권고를 요청해야하는 대신 다른 것을 요구해서는 안된다고 생각한다.

어쨌든, 모두가 말했듯이 케이스 2에서 연결 개체와 그 수명주기가 호출 수신자 기능 내에 캡슐화됩니다. 이 기능 밖의 데이터베이스 조작이 바람직하지 않은 경우에 권장됩니다. 당신이 다른 데이터베이스 활동이있는 경우

그렇지 않으면 호출자 함수 또는 (FUNC 이외의) 다른 기능으로이 기능 범위와 같은 측면을 수행 할 수는 다음의 사례 1.