■41366 / ) |
Re[4]: C#における値渡しと参照渡しのコーディングについて |
□投稿者/ simano (12回)-(2009/09/18(Fri) 14:49:15)
|
■No41356 (渋木宏明(ひどり) さん) に返信 >> data.MyClass = MyClass; // Class(プロパティ)を設定。値は「参照渡し」される。 >> data.MyStruct = MyStruct; // Struct(プロパティ)を設定。値は「値渡し」される。 > > 微妙に違います。 > 弁士さんの解説を読み直してみてください。
確かに、微妙に違ってますね;すみません。 ですが、「参照渡しを行いたい需要もある」、 という点では変わらないのではないでしょうか。 コーディングの癖を直せばいいといえばそれまでなのですが。
>>■ネットワーク通信などで、エラー検出とデータの読み込みを同時に行いたい場合 >>C#には検査例外がないという理由から、 >>エラー結果を検出する手段として、メソッドの戻り値を使うことが一般的なようです。 > > なことないです。 > 標準クラスライブラリに含まれているクラス/コンポーネントの類は、通信エラーを例外で表現しています。 > >> public bool ReadSQLInfo(MySQLInfo info) > > こんな書き方(成否を bool で返す)しません。 > ReadSQLInfo は、MySQLInfo のインスタンスを返すように設計します。 >
勉強不足ですみません。 ネットワーク通信の結果を例外のみに任せるべきということですね。 ただ、それは、検査例外がない言語では、扱いにくいのでは?と考えた結果が上記の処理でした。
例えば、サーバと通信して、「実データ」と「結果値」を受ける仕様になっているとします。 「結果値」が「クライアントから受けた値が不正です」だった場合の処理を書いてみました。 ---------- public MyData GetFromServer(int arg) { // 略 try { // サーバとのソケット通信。引数に"arg"を渡す。 } catch (Exception e) { throw; }
MyData data = new MyData(); data = Server_DataBytes_Value; // サーバの返した実データを渡す。
int val = Server_Return_Value; // サーバの返した結果値を渡す。 if (val == ILLEGAL_ARG) // 「クライアントから受けた値が不正です」などのエラー値。 { throw new MyServerException(val); // 自作の例外クラス } } ----------
上記の場合、通信を行っているクラスがアプリケーションの直下にあればいいですが、 dllだったら例外のパターンを把握するのも一苦労だと思います。 後でいつのまにか例外の種類が変わってたらcatchできません。
そこで、「結果値」は、戻り値として返す処理が適切なのかなと思いました。
論点がずれてしまいました…; 例外処理については、自分の中でまだ未消化でして、思慮が浅いのだと思います。 上記の考え違いがありましたら、ご指摘願えないでしょうか。
>Java や C++ を、C 言語的な目線で習得したような印象を受けます。
いえ、C言語はほとんどやってません。 それだけに、Javaに似てるのかと思ったら、内実はC言語の流れなのか…?等々悩んでるうちに、 だんだん変な方向に突き進んでいるのかもしれません;
|
|