2011-09-16 6 views
1

최근에 내 객체에 이름의 의미를 쉽게 식별 할 수 있도록 많은 시간을 보냈습니다. 또한 다음과 같이 한 번에 객체를 사용할 수 있다는 것을 발견했습니다.명시 적으로 선언 된 객체보다 한 번에 시간 객체를 사용하지 않는 이유가 있습니까?

_ProfileList = (New RegistryManager).GetAllProfiles() 

명명 된 객체를 만드는 것과 반대입니다.

개체에 한 번만 액세스하려는 경우이 작업을 수행하지 않는 이유가 있습니까? 누구든지 위대 할 프로와 단점을 안다면.

PS : 그것은 VB.NET 코드입니다하지만 이름이없는 예

답변

1

그건 - 그것은 단지 실제로 변수 (에 저장되지는 ​​객체결코가있다 "이름"- 로컬 변수/필드 만 이름을 가짐). 오브젝트를 두 번 이상 필요로하지 않고 코어를 더 복잡하게 만들지 않는다면 실제 상황에는 별다른 단점이 없습니다. 객체가 IDisposable 또는 유사한 경우, 당신은 로컬 원하는 것 즉

using(var manager = new RegistryManager()) { 
    _ProfileList = manager.GetAllProfiles(); 
} 

그러나 그 이외의, 그것은 상관하지 않습니다. 당신이이 지역에 할당하여 바로 사용 할 경우 실제로, 나는 어떤

var manager = new RegistryManager(); 
_ProfileList = manager .GetAllProfiles(); 
번 (릴리스)를 컴파일 된 것을 의미한다 "해제"완전히 어쨌든를 변수를 제거하기 위해 구축 기대

_ProfileList = (new RegistryManager()).GetAllProfiles(); 

(내 예상).

+0

달콤한, 감사합니다, 특히 IDisposable와 로컬 사용에 대한 작은 선전. – deanvmc

1

객체를 제공하는 경우 중 하나 그것을 또는 C 번호는 잘 될 것입니다 - 변수는 않습니다.

은 객체를 생성하고 전적으로 다른 표현 이내에 사용하는 것이 절대적으로 괜찮습니다 - 나는 RegistryManager 같은 그것이 의존성에 전달되어야 같은데,이 같은 코드 내에서 생성 하지 것을 주장 거라고하지만, . 테스트가 더 어려워 질 것입니다.

이 좋은 곳의 좋은 예는 StringBuilder 것 : 명시 적입니다

string text = new StringBuilder().Append("Foo") 
           .Append(name) 
           .DoOtherAppending() 
           .ToString(); 
+0

나는 의존성이 있어야한다는 것에 동의한다. 불행하게도 나는 아키텍처에 대한 결정을 내리지 않는다. (나는 중학교 다.) 그래서 DI와 테스트에 대한 나의 '팬시 토크 (Fancy Talk)'는 눈에 띄지 않게되었다. – deanvmc

관련 문제