2011-09-16 6 views
1

最近、私のオブジェクトにはすべて意味がわかりやすい名前が付けられています。私はまた、次のようにオブジェクトを一度に使用できることも発見しました。明示的に宣言されたオブジェクトよりも1つの時間オブジェクトを使用しない理由がありますか

_ProfileList = (New RegistryManager).GetAllProfiles() 

名前付きオブジェクトを作成するのではなく、

オブジェクトに1回だけアクセスするだけの理由がありますか?誰でもプロとそれを知っているなら、それは素晴らしいだろう。

PS:それはVB.NETのコードですが、例を提供した場合、それまたはC#のいずれかが、罰金になります

答えて

1

が明示的されていること - それはちょうど(変数に格納されていない確かに、オブジェクト決しては、Aがあります"name" - ローカル変数/フィールドのみが名前を持ちます)。オブジェクトを複数回使用する必要がなく、コアをより複雑にすることができない場合は、実際の不都合はありません。オブジェクトがIDisposableまたは類似であれば、あなたはローカル、すなわち

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

それ以外をお勧めします、それは気にしないことに注意してください。あなたはがローカルに割り当てると、すぐにそれを使うのです場合は確かに、私は、任意のが一度(のリリースで)

var manager = new RegistryManager(); 
_ProfileList = manager .GetAllProfiles(); 
をコンパイルしたことを意味し、完全にとにかく変数を削除するために構築する「解放」期待します

および

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

は同じです(私の期待)。

+0

甘い、そのために、特にIDisposableで地元を使用することについての小さな宣伝をありがとう。 – deanvmc

1

オブジェクトは名前を持っていない - 変数が行います。

これは、オブジェクトを作成し、単に他の式の中でそれを使用するために絶対に大丈夫です - 私はRegistryManagerのようなものは、それが依存関係を渡す必要がありますように聞こえるが、このようなコード内で作成ない何かと主張していると思いますが、 。テストが難しくなります。

これが細かいところのより良い例は、StringBuilder次のようになります。

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

残念ながら私はアーキテクチャを決定することができません(私は中学生です)ので、DIとテストについての私の「ファンシートーク」は気付かれません。 – deanvmc