トップページ⇒tech
1001コメント299KB

C#, C♯, C#相談室 Part42

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/08/26(日) 12:42:25
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part41
http://pc11.2ch.net/test/read.cgi/tech/1184840053/

過去スレは>>2-5あたり。
0609デフォルトの名無しさん2007/09/15(土) 00:32:42
staticでも適切なコード書けばスレッドセーフなんです
0610デフォルトの名無しさん2007/09/15(土) 00:33:44
>>608
なんでそんなに必死なの?
0611デフォルトの名無しさん2007/09/15(土) 00:35:04
そもそもstaticだろうがインスタンスだろうが、
単一のメソッドで処理が完結するような場合など
状態情報を維持する必要がないようなメソッドは
最初からスレッドセーフだ。

っていうか複数スレッドで競合する部分がそもそもないし。
0612デフォルトの名無しさん2007/09/15(土) 00:35:40
>>610おまえ>>598だろw
0613デフォルトの名無しさん2007/09/15(土) 00:37:06
>>610
「素人」って言葉が痛かったとかw
0614デフォルトの名無しさん2007/09/15(土) 00:38:37
>>612
俺は607と610だけですがなにか?
0615デフォルトの名無しさん2007/09/15(土) 00:44:07
とりあえずvolatile知らない奴はレスするなよ
0616デフォルトの名無しさん2007/09/15(土) 00:56:33
>>609
適切なコードを書かなければスレッドセーフじゃないんでしょ。
だから適切なコードは何で適切じゃないコードはなんなの?
ASP.NETはstaticなメソッドなんか書いたら、その中で使われる変数とか
他のセッションからでも共用されちゃうでしょ?
0617デフォルトの名無しさん2007/09/15(土) 01:01:26
>ASP.NETはstaticなメソッドなんか書いたら、その中で使われる変数とか
>他のセッションからでも共用されちゃうでしょ?

どんな変数使う気だ?
これはそもそもObjectDataSourceみたいなやつの
メソッドの話だよな?
0618デフォルトの名無しさん2007/09/15(土) 01:03:30
適切なコード書かなきゃインスタンスメソッドでも
スレッドセーフにはならんだろ
0619デフォルトの名無しさん2007/09/15(土) 01:47:23
いっつも本題から外れていくな…
なぜstaticなの?
0620デフォルトの名無しさん2007/09/15(土) 01:55:40
staticで困らんからだろ。
インスタンスにする必要もないからだろ。
0621デフォルトの名無しさん2007/09/15(土) 01:57:27
例えばMathクラスのメンバが全部インスタンスメソッドだったらどう思うよ。
そこまで極端じゃないにせよ、
0622デフォルトの名無しさん2007/09/15(土) 01:59:04
すまん>>621の続き
特にObjectDataSourceの使い方じゃ本質的にはそれと変わらんてこと。

Mathのメソッドがstaticだからって、スレッドセーフなのかとか、
ロックされててパフォーマンスが悪いんじゃないかとkじゃ思うかね?
0623デフォルトの名無しさん2007/09/15(土) 03:44:25
思いません先生!!
0624デフォルトの名無しさん2007/09/15(土) 05:14:29
asp.net使ったこと無いからよくわからないが、インスタンス化するとメモリー消費量がバカにならないから
スタティックで済むならスタティックで書けってことじゃね
0625デフォルトの名無しさん2007/09/15(土) 05:34:47
フィールドに一切アクセスしないprivateメソッドを書くとき、staticにしたほうがメモリを節約できるかも、という考えが脳裏をよぎることもある。
0626デフォルトの名無しさん2007/09/15(土) 07:13:43
ObjectDataSourceが呼び出すSelectMethod/UpdateMethod/InsertMethod/DeleteMethodは
基本的にステートレスで作れってこと。ステートレスなら基本的にスレッドは気にしなくてよい。
staticを使わない場合はメソッドを呼び出すごとにインスタンスを作って終わると破棄する
SingleCallモデルになっている。
一般的にはSingletonが用いられるケースなんだろうけどMSはなぜかあまり使いたがらないね。
0627デフォルトの名無しさん2007/09/15(土) 10:27:36
>>625
どんな理屈だw
0628デフォルトの名無しさん2007/09/15(土) 11:04:58
>>627
C++のメンバ関数の実装を想像して、thisポインタの分が節約できるかも、と考えたが
CLRだと変わらないんだっけ?
0629デフォルトの名無しさん2007/09/15(土) 11:04:59
>>625
普通にFxCopとかでstaticにしろやって言われるやん
0630デフォルトの名無しさん2007/09/15(土) 11:13:16
>>626
ファクトリとか指定できるようになってたらSingletonにしたりとかもっといろいろできるんだけど、
フレームワーク側で勝手にシングルトンはできてもあまりうれしくもないと思う。
0631デフォルトの名無しさん2007/09/15(土) 12:31:17
object obj = new object();
の時、下の2つは何が違うんですか?
function(obj);
function(ref obj);

参照型の場合refありもなしも変わらないんですか?
0632デフォルトの名無しさん2007/09/15(土) 12:35:12
void function( object obj )
{
 obj = new NewObject();// このメソッド内でしか意味がない
}

void fuction2( ref object obj )
{
 obj = new NewObject();
}

object obj = new object();
function(obj);   //何もおこらず
function2(ref obj); //objはもう昔のobjじゃないわ
0633デフォルトの名無しさん2007/09/15(土) 12:35:14
呼び出し先で obj に代入したときの動作
06346312007/09/15(土) 12:41:52
なるほど。ありがとうございます。
関数内でnewしない場合は関係ないんですね。

関数内で参照先の値を変更するだけで、newしない場合も
コード的には明示的にrefをつけといた方がいいんですかね?
もしくは参照型を引数にとる関数で引数にrefをつける=関数内で新たにnewしちゃう関数なんだぜ!
て意味合いがあるんですか?
0635デフォルトの名無しさん2007/09/15(土) 12:43:58
標準のクラスライブラリに ref つきのメソッドがどれほどある?
0636デフォルトの名無しさん2007/09/15(土) 12:44:31
void fun01(int x) { x = 2; }
void fun02(ref int x) { x = 2; }

int foo = 1:
fun01(foo);    // foo の値は 1 のまま
foo02(ref foo);   // foo の値は 2 に変わる
0637デフォルトの名無しさん2007/09/15(土) 12:45:22
たしかに。。
ではrefなしで行きたいと思います。
ありがとうございました〜
0638デフォルトの名無しさん2007/09/15(土) 12:55:03
refなんてめったに使わん。
フレームワークなど基盤部分で値型を扱う際に、
内部的に使うことはあるかもしれんが。

0639デフォルトの名無しさん2007/09/15(土) 13:03:27
必要もないのに使うべきでないのは確かだが、
教条主義的に否定する馬鹿にはならないで欲しいな。
この業界そういう馬鹿が案外多いから
0640デフォルトの名無しさん2007/09/15(土) 13:10:37
も一個質問なんですけど、
privateな関数で、メンバ変数、メンバ関数に一切アクセスしない場合
private staticにしたほうがいいんですか?
staticつきでも、なしでも動作は同じなんですけど。呼び出し方が変わるくらいで。
0641デフォルトの名無しさん2007/09/15(土) 13:13:05
うん
0642デフォルトの名無しさん2007/09/15(土) 13:13:18
>>639
気をつけます!
(といっても趣味なので話す相手もいませんが。。)
0643デフォルトの名無しさん2007/09/15(土) 13:17:45
>>641
なるほど。どうもです
06447622007/09/15(土) 13:49:15
>>638
XNA Frameworkなんかパフォーマンス目的でrefやoutだらけだよ
void Matrix.Multiply (ref Matrix matrix1, ref Matrix matrix2, out Matrix result)
みたいに
0645デフォルトの名無しさん2007/09/15(土) 13:50:46
>>639
その気持ち自体はとってもよく分かるんだが、
現実は結構加減が難しくない?
自分がレビューとかできる範囲ならまだいいんだけどね〜
0646デフォルトの名無しさん2007/09/15(土) 13:53:37
>>644
実質同じこといってるような気がする。
0647デフォルトの名無しさん2007/09/15(土) 15:53:53
荒れてるねw
0648デフォルトの名無しさん2007/09/15(土) 22:31:15
ム板でスレ違いと言われたのでここにて質問させて下さい。

.NETからoracleに接続をする、つまりDB接続文字列が分かりません。

String sConnectionString = "Provider=MSDAORA;User ID=sys;password=test_pass ; Data Source =ORCL10GR2;Persist Security Info=False";

恐らく
1)Provide
2)Data Source
の部分が怪しいと思うのですが、この部分はどうすれば適切なDB接続
文字列を見つける事が出来るでしょうか?

以上 どなたかoracleに詳しい方お教え願います。
0649デフォルトの名無しさん2007/09/15(土) 22:41:23
>648
スレ違い。
0650デフォルトの名無しさん2007/09/15(土) 22:46:15
ですねw
0651デフォルトの名無しさん2007/09/15(土) 22:59:31
>>648
VS2005のメニューで「ツール」→「データベースの接続」でデータベースに接続できるなら、
サーバーエクスプローラ上の接続済みデータベースのプロパティに接続文字列が表示されるけど、
それでも駄目かな(実際にOracle使っていないので保証できないけど)?
0652デフォルトの名無しさん2007/09/15(土) 23:44:37
>>648
ttp://www.connectionstrings.com/
0653デフォルトの名無しさん2007/09/15(土) 23:50:45
>>652 なんかよさげなサイトだな。
0654デフォルトの名無しさん2007/09/16(日) 00:06:38
>>651
Oracle10g Express Editionに接続をしようと
>>651さんのおっしゃる手順にて試した上でプロパティにて確認を行い、
テスト接続を行ったところ正常に接続は出来ました。
しかしながら、自動生成された接続文字列をコードの中に次の様に指定して
いるのですが接続が出来ません。

string constr1 = "Data Source=127.0.0.1;Persist Security Info=True;User ID=test_user;Unicode=True";
OracleConnection con = new OracleConnection(constr1);
con.Open(); //←この部分でエラーが発生します。

06556542007/09/16(日) 00:07:49
>>652
そんな便利なサイトがあったんですね。ありがとうございます。
そちらも参考にしつつ試してみます。
06566542007/09/16(日) 00:14:08
因みに>>651の手順で作成されたServer Explorer上の表示は次の
状態なのです。しかしながらOracle10g Express EditionのWEB上から
createしたテーブルが見えません。(TB_TESTテーブル)
>>651の手順で「正常に接続が出来ました。」というガイダンスが
表示されたのですがそもそも接続先が違っているのでしょうか?
【VS2005 Server Explorer状況】
Data Connections
127.0.0.1.TEST_USER
Tables
WWV_FLOW_DUAL100(FLOWS_020100)
WWWV_FLOW_FIELD_TEMPLATES(FLOWS_020100)
WWWV_FLOW_LIST_OF_VALUES_DATA(FLOWS_020100)
  ・
  ・
  ・
  (TB_TESTテーブル が本来見えるハズなのに見えません。)
0657デフォルトの名無しさん2007/09/16(日) 00:34:24
だからスレ違いだと何度・・・
06586512007/09/16(日) 00:35:39
>>656
さっきも書きましたが、Oracleを使っていないので、
Oracleのスレに書き込んだほうがいいですよ
(ここまでくると完全にスレ違いですし^^;)。

作成した側で作成したテーブルが見えているなら、
>>654さんの言うとおり、参照先(インスタンスもしくはデータベース)が違うのでしょう。
OracleのVS2005アドオンツールを使って、
VS2005上で直接テーブル設計するのもいいかもしれません。
http://www.oracle.com/technology/tech/dotnet/tools/index.html
065965672007/09/16(日) 00:44:37
>>658
色々試してみましたところ何とか接続する事は出来ました。
ありがとうございます。

0660デフォルトの名無しさん2007/09/16(日) 03:32:41
VC#で作成したアプリを別PCで使用する場合はEXEをコピーすればいいのですか?
0661デフォルトの名無しさん2007/09/16(日) 07:59:10
他のファイルを参照したりしてなければ
06625122007/09/16(日) 09:06:24
>>632
function(obj); の場合、メソッド内にObjectのコピーが作成されるのでしょうか?
0663デフォルトの名無しさん2007/09/16(日) 09:08:14
Objectの実体の住所を書いた紙を書き写す感じ
0664デフォルトの名無しさん2007/09/16(日) 10:17:43
>>662
「値渡し」と「参照渡し」を調べてみるといいよ。
こういうプログラミング概念は、
他の言語でも使われているので、
理解しておいても損はない。

ちなみに、function(obj)が値渡し、
function(ref obj)が参照渡し(・・・だったはず)
0665デフォルトの名無しさん2007/09/16(日) 10:50:29
>>664
「値渡し」と「参照渡し」を調べてみるといいよ。
こういうプログラミング概念は、
他の言語でも使われているので、
理解しておいても損はない。
0666デフォルトの名無しさん2007/09/16(日) 13:50:18
参照の値渡し/参照の参照渡しとでも言えばいいの?w
0667デフォルトの名無しさん2007/09/16(日) 13:57:31
>>666
「値渡し」と「参照渡し」を調べてみるといいよ。
こういうプログラミング概念は、
他の言語でも使われているので、
理解しておいても損はない。
0668デフォルトの名無しさん2007/09/16(日) 14:10:06
参照型の値渡し、参照型の参照渡しと言うべきだな
0669デフォルトの名無しさん2007/09/16(日) 14:13:19
>>668
「値渡し」と「参照渡し」を調べてみるといいよ。
こういうプログラミング概念は、
他の言語でも使われているので、
理解しておいても損はない。
0670デフォルトの名無しさん2007/09/16(日) 14:15:23
参照型のインスタンスへの参照を格納する変数への参照の値渡し ならどうだ(ref object)
0671デフォルトの名無しさん2007/09/16(日) 14:16:42
>>670
「値渡し」と「参照渡し」を調べてみるといいよ。
こういうプログラミング概念は、
他の言語でも使われているので、
理解しておいても損はない。
0672デフォルトの名無しさん2007/09/16(日) 14:22:24
こんちたびなし
0673デフォルトの名無しさん2007/09/16(日) 14:22:46
コピペ君って馬鹿だな、まで読んだ。
繰言クンも馬鹿だな、まで読んだ。
0674デフォルトの名無しさん2007/09/16(日) 14:24:54
>>673

>>673
0675デフォルトの名無しさん2007/09/16(日) 14:34:26
C#相談室
0676デフォルトの名無しさん2007/09/16(日) 15:07:38
♯
0677デフォルトの名無しさん2007/09/16(日) 15:18:59
C#で月を表す定数を使用したいのですがCalendarクラスに見つかりません。
JavaでいうCalendar.JANUARYのような定数はC#ではどこにおいてあるのでしょうか?
0678デフォルトの名無しさん2007/09/16(日) 15:30:51
俺の部屋のベッドの下
0679デフォルトの名無しさん2007/09/16(日) 15:42:32
.NETはグローバリゼーションを考えてるから、一年が12ヶ月と決め付けてはいないんだ
0680デフォルトの名無しさん2007/09/16(日) 15:44:17
>>677
intの1 ~ 12でいいよ。
0681デフォルトの名無しさん2007/09/16(日) 15:45:25
Javaは月が0-11だから、こういうのがないとつらいのか。
.NETは1-12だからそのまま使え。
06826772007/09/16(日) 15:53:45
工工エエエエ(´Д`)エエエエ工工
enum自作します・・・
0683デフォルトの名無しさん2007/09/16(日) 15:59:26
おれ英語表記だとJanから順番に唱えないと自身持って数字に変換できないわw
0684デフォルトの名無しさん2007/09/16(日) 16:03:03
定数にした方が見やすいような場面が思いつかない
0685デフォルトの名無しさん2007/09/16(日) 16:04:06
でもあちこちで例外処理するよりはenumのほうがいいんじゃまいか?
0686デフォルトの名無しさん2007/09/16(日) 16:12:24
どんな処理にそれが必要なんだろう
と思ったがMONTHLYDATEとかのときに作る羽目になったなそう言えば
0687デフォルトの名無しさん2007/09/16(日) 16:16:46
俺は677の発想に一票。
コードが見やすいかどうか、というより(まあ数字の方が見やすいのはたぶん日本人ぐらいのものだと思うが)
「月の名」っていう型が存在することの方が重要でしょ。
0688デフォルトの名無しさん2007/09/16(日) 16:19:28
それじゃlocale毎に違う型が必要になっちゃわね?
0689デフォルトの名無しさん2007/09/16(日) 16:22:23
まあ時と場合による、で良いんじゃね
Flags 属性が必要な場合なんか列挙体にするしかないし
// ロケールとの食い合わせが悪いのは仕方なし
0690デフォルトの名無しさん2007/09/16(日) 16:22:56
それ一般論としては間違ってないが、
しかしイスラム暦やチャイニーズカレンダーでコード書く必要ってそんなにあるの?w
0691デフォルトの名無しさん2007/09/16(日) 16:29:17
>>685
enumでも範囲チェックはできないがな
0692デフォルトの名無しさん2007/09/16(日) 16:30:09
>>687
日本人なんだから見やすい数字を選ぶほうが当たり前だろ。
で、なにが重要なの?
0693デフォルトの名無しさん2007/09/16(日) 16:36:44
>>692
重要じゃないと思うなら思っても別にいいんだが、
それならboolをすべてintで代用(いやboolが本来「代用」なんだが)している
コードをみても文句を言うなよ。
0694デフォルトの名無しさん2007/09/16(日) 16:39:27
いや、日本人ならというなら、むしろこうしようぜ。
enum 月
{
  睦月 = 1,
  如月 = 2,
  弥生 = 3,
  ...
}
0695デフォルトの名無しさん2007/09/16(日) 16:40:51
enumにするにしても、何に使うかでどういう値になって欲しいか違いそうだから後付けの方がいいかなあ。
0696デフォルトの名無しさん2007/09/16(日) 16:42:40
曜日のenumはあってもよいと思うが、月はいるのかな?
月が必要なら、enum { DAY1, DAY2, DAY3 .... DAY31 } も必要になるか。
その調子で enum { YEAR0001, ... YEAR9999 } は...勘弁してください。
0697デフォルトの名無しさん2007/09/16(日) 16:58:59
そこで強いtypedefという無いものねだり。
0698デフォルトの名無しさん2007/09/16(日) 18:10:15
構造体に型変換演算子を定義すれば
0699デフォルトの名無しさん2007/09/16(日) 18:19:13
C井って、つおい?
0700デフォルトの名無しさん2007/09/16(日) 19:06:02
C丼はおいしいですよ
0701デフォルトの名無しさん2007/09/16(日) 20:09:08
Vb6よりよわいですw
0702デフォルトの名無しさん2007/09/16(日) 22:35:21
>>701
スパゲッティ量産するんだからVB厨はこっちに来ないでよ
0703デフォルトの名無しさん2007/09/16(日) 22:41:12
スパゲッティなんて20年ぶりに聞いたw
0704デフォルトの名無しさん2007/09/16(日) 23:00:13
>>703
本人に向かって言うわけ無いだろ?
0705デフォルトの名無しさん2007/09/16(日) 23:40:46
C#厨はパフォーマンスのこと言われるとすぐ頭に血が上るみたいですね

実行速度はVB6より遅いことに疑問をはさむ余地はないのにね
0706デフォルトの名無しさん2007/09/16(日) 23:43:38
そうだね
0707デフォルトの名無しさん2007/09/16(日) 23:45:51
パフォーマンスが重要ならC++で書くから
0708デフォルトの名無しさん2007/09/16(日) 23:52:58
>>705
せっかくだから自慢のVB6で挑戦してみたら?
ttp://d.hatena.ne.jp/siokoshou/20070411
■ このスレッドは過去ログ倉庫に格納されています