C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: インスタンス作成時のnew演算子の有無について


(過去ログ 107 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■63714 / inTopicNo.1)  インスタンス作成時のnew演算子の有無について
  
□投稿者/ 悩み多きランナー (7回)-(2012/09/30(Sun) 15:57:17)

分類:[C#] 

お世話になります。

C#にてDB接続やコマンド作成時にインスタンスの生成を行いますが
下記のインスタンス作成ではnew演算子がある場合とない場合があります。

// SqlConnection の新しいインスタンスを生成する (stConnectionStringには接続文字列を指定)
System.Data.SqlClient.SqlConnection SqlConnection = (new System.Data.SqlClient.SqlConnection(stConnectionString);

// SqlConnection から SqlCommand のインスタンスを生成する
System.Data.SqlClient.SqlCommand SqlCommand = SqlConnection.CreateCommand();

前者ではnew演算子が付いていますが後者ではnew演算子が付いていません。
同じインスタンス生成においてnew演算子がある場合とない場合の違いについて教えていただければと思います。

よろしくお願い致します。

引用返信 編集キー/
■63717 / inTopicNo.2)  Re[1]: インスタンス作成時のnew演算子の有無について
□投稿者/ Azulean (43回)-(2012/09/30(Sun) 18:54:44)
これって、DB の話じゃなくて、インスタンス生成一般の話ですよね?

No63714 (悩み多きランナー さん) に返信
> 前者ではnew演算子が付いていますが後者ではnew演算子が付いていません。
> 同じインスタンス生成においてnew演算子がある場合とない場合の違いについて教えていただければと思います。

そのクラスの設計によります。
どちらの場合も、どこかで new されていますが、それを自分で明示的に使うか、隠蔽されているかの違いになります。
(CreateCommand の中で new されて、プロパティやフィールドをセットした上で返しているはず)

パターンとしては、自分で new するしか作りようがないもの、どちらの方法も用意しているもの、インスタンス生成を隠蔽しているもののそれぞれがありえます。
どちらを採用するかはそのクラスの性質やクラス設計者の思想によります。


作ったインスタンスのイベントにイベントハンドラを SqlConnection 側が持ちたいとか、生成したインスタンスを SqlConnection 側が管理して切断時にまとめて Dispose したいとか、そういったニーズがあるなら、私は隠蔽を考えます。
(new でもできるけど、SqlCommand 側が sqlConnection に登録する形になるので私は選ばないかなぁ)

ほかにも考え方として、いくつかの Command があって、CreateAddCommand, CreateDeleteCommand などで提供し、そのクラスの生成方法はできるだけ見せない方がユーザーの使い勝手がよいという場面もあるかもしれません。
引用返信 編集キー/
■63718 / inTopicNo.3)  Re[2]: インスタンス作成時のnew演算子の有無について
□投稿者/ Azulean (44回)-(2012/09/30(Sun) 18:56:14)
一般論じゃなくて、使いたいクラスの生成方法がわからない系の質問の場合は、MSDN でそのクラスのメンバー一覧を見てみましょう。
あるいはクラスの説明のサンプルコードを読むとか、ほかのサイトのサンプルを読んでみるとか。
引用返信 編集キー/
■63720 / inTopicNo.4)  Re[3]: インスタンス作成時のnew演算子の有無について
□投稿者/ 悩み多きランナー (8回)-(2012/09/30(Sun) 19:54:51)
Azuleanさん

お世話になります。

回答ありがとうございます。一般論で気になっていた質問でしたが、クラスの設計によってある場合とない場合があるんですね。
勉強になりました。ありがとうざいます。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -