2009-07-03 4 views
0

아래의 설정 및 코드 스 니펫이 있으면 다른 것을 사용하는 이유는 무엇입니까? 나는 그들 중 하나를 사용하여 몇 가지 주장을 가지고 있지만 다른 사람들이 생각하는 것에 대해 궁금합니다.객체 참조 유지

설정

public class Foo 
{ 
    public void Bar() 
    { 
    } 
} 

코드 조각 하나

var foo = new Foo(); 
foo.Bar(); 

발췌문 두

new Foo().Bar(); 

답변

9

첫 번째 버전은 Bar()에 전화하기 전에 디버거에서 foo을 쉽게 검사 할 수 있음을 의미합니다.

첫 번째 버전은 또한 당신이 개체와 이름을 연결을 의미합니다 (실제로 물론 변수의 이름, 그러나 정신 협회 분명히있다) 시간에 유용 할 수 있습니다 :

var customersWithBadDebt = (some big long expression) 
customersWithBadDebt.HitWithBaseballBat(); 

보다 명확는

(some big long expression).HitWithBaseballBat(); 

이러한 이유 중 어느 것도 적용되지 않으면 1 행 버전의 코스로 자유롭게 이동하십시오. 개인적인 취향은 각 특정 상황에 적용됩니다.

+0

정말 좋은 점. –

3

당신은 단순히 아마 것이라고 전화를하고 이상을 푸 인스턴스를 사용하지 않을 경우 두 번째 질문을 찾으십시오. 그러나 전화가 오지 않는 한 실용적인 차이점을 발견 할 수 없습니다. 극단적으로 자주 발생합니다 (하지만 그 구조로 인해 나를 공격하지는 않습니다). 그것은 내가 모든 객체 참조가 필요하지 않습니다 꽤 명확한 것을 만들면서

+0

이 부분은 내가 누락 된 요소 중 하나입니다. 기능상의 차이점이 있습니까? GC가 다른 GC를 제거하는 데 더 쉬운 시간을 갖고 있습니까? –

+0

각 경우에 방출되는 일리노이를 조사하는 것이 좋습니다. – AakashM

+0

GC가 상대방보다 처리하기가 더 어려울 것으로 의심됩니다. 아마도 첫 번째 예제에서 저장 한 참조로 무엇을 선택 하느냐에 달려 있습니다. –

0

나는 두 번째를 선호한다.

0

는 내가 인스턴스 방법으로이있는을위한 당신의 동기에 의문을 것입니다. 객체를 하나만 호출하고 나중에 버리면 새 객체로 옮길 수 있습니다. 클래스 종속성을 매개 변수로 사용하는 정적 메서드가 있어야합니다 (정적은 무시하지만). 더 재미있는 문제로 연결 무엇

: 당신은 모든 내부 상태에 의존하지 않는 경우에, 당신은 단지 함수이다 따라서 나는 당신이 아닌 자신의 클래스에 일부 개체에 속하는 말하고 싶지만.

+0

이 예제에서는 XmlSerializer를 사용하여 클래스의 구조가 이미 설정되어있는 것으로 나타났습니다. 다른 사람들의 취향이 무엇인지 알기 위해 노력했습니다. –

0

스 니펫 번호 1을 입력하십시오. 당신이 클래스 푸 바을 가질려고하는 경우에

() 다음 BAR2()가 쉬울 것이다.

foo를 볼 수 있기 때문에 쉽게 디버깅 할 수 있습니다. 스 니펫으로 볼 수없는 내용 2