- 1 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 18:23:31 ]
- このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 >>980を踏んだ人は新スレを建てて下さい。 >>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 前スレ ふらっとC#,C♯,C#(初心者用) Part45 (実質46) pc12.2ch.net/test/read.cgi/tech/1255658236/
- 856 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:59:10 ]
- FTPの話は前のスレでも出たな
プロトコルの用途がちげぇって結論になった気がする
- 857 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:06:23 ]
- DrawImageの描画先をint,intじゃなくてRectangleで指定する
- 858 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:07:55 ]
- >>856
だな。まずはその腐った要求仕様を窓から投げ捨てろといいたい。 で、代わりのプロトコルを考えるとするならどうするか、なんだが。 ユーザーのPCから特定のバイナリデータを手元のサーバーに送りつけるというのでいいんだな? ――とはいうものの、考えてみると、案外これというやりやすい方法が見当たらないので困ったもんだ。 さしあたり思いつくのがHTTPのPOSTで送るかメールで送るか、あとRDBにクエリで送りつけるかだが。 IISが運用できるならC#で解決できるからHTTPで決まりだろう。 メールの場合、LinuxやMacならともかく、Windowsは送信できる環境が保証されてないので メールを正しく送信できることが保証できない。 企業アプリみたいにこちらで動作環境を自由に決められるなら何とでもなるんだけどね。
- 859 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:09:24 ]
- >>854
パスワードを暗号化して埋めこんだんだとしても IL解読して複合化の手順読みとられたらそれで終りだし メモリに持ったり通信したりするときに取られちゃ意味ないし
- 860 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:10:09 ]
- >>856
それは、プログラムからFTPは利用しないほうがいいってことですよね? といっても、CGIやPHPが使えればそちらを使うのですが、 使えないので、ファイルの書き換えを行うには直接FTPするしか無いと思いまして・・・ 取りあえずアカウント制御で、ディレクトリ制限を掛けてみました。 これでしばらく挙動見たいと思います
- 861 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:11:50 ]
- どっかのCGI設置可能なレンタルサーバでも借りてゲートウェイでもするしかないな
- 862 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:13:12 ]
- プログラムっていうかクライアントから直には止めた方いいかもね
- 863 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:13:37 ]
- >>860
そのユーザIDとパスワードはFTPアカウント専用なん? そこが分離されててchrootとかされてるならまだなんぼかマシなんだろうけど。
- 864 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:16:30 ]
- telnetで接続可能なパスワードとかだったら笑えるな
- 865 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:21:01 ]
- >>858
IISも無理です、基本サーバ動作のモノは全てアウトでして。 RDBは思いつきませんでした、が・・・見た感じ無理そうです・・・ >>861 レンタルサーバはちょっと厳しいです >>863 chrootされてますです
- 866 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:24:51 ]
- ftp内でのコマンドの制限とかquotaとか適切に設定されてるなら
とりあえず大丈夫なのかもしれないね
- 867 名前:デフォルトの名無しさん [2009/11/17(火) 23:26:06 ]
- そもそもなんでこんな危なっかしい事しなきゃいかんのだ?
- 868 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:31:02 ]
- 自分で試してみましたが、取りあえずchroot周りはうまく制御されてるみたいです
もっと良い方法があれば教えてください。 これでしばらく試してみます。ありがとうございました。
- 869 名前:749 mailto:sage [2009/11/18(水) 00:44:38 ]
- >>750 >>763
遅くなりましたが、ありがとうございます! こちらにある通りApp.configを修正して実行してみましたが、やはり上手くいきませんでした(固まっちゃって再起動) ttp://hightechrider.blogspot.com/2009/10/mixed-mode-assembly-errors-after.html あまり理解できていませんが、最近のランタイムでは使えなくなった可能性が高いということでしょうか。 とりあえず今回は他の方法で実現するという方向性に逃げました。
- 870 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:56:52 ]
- つーか、環境ぐらい書けば? .NET Framework 4.0 なんて入れてんの?
- 871 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:01:42 ]
- そりゃ入れてるから「4.0 ランタイムでは読み込めません」なんてメッセージが出るんだろう
- 872 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:02:13 ]
- Windows SDKってどこからダウンロードできますか?
ググって飛んだら 申し訳ございません。ご指定のページが見つかりませんでした。 といわれました
- 873 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:04:26 ]
- ベータのランタイムなんて入れてんのが悪いんだろ?
- 874 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:32:13 ]
- ttp://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&DisplayLang=en
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=71deb800-c591-4f97-a900-bea146e4fae1&DisplayLang=en 最新はコレ ISOとWebインストール ttp://www.microsoft.com/downloads/details.aspx?FamilyID=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373&DisplayLang=ja こっちは日本語版MSDNライブラリの最新
- 875 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:34:42 ]
- C#では、C,C++における『CLOCKS_PER_SEC』のようなものってありませんか?
- 876 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:03:51 ]
- switch(foo){
case BAR: /*....*/ break; case BAZ: /*....*/ break; default: // バグってなければ絶対こないところ } ↑のプログラムで default:にいっちゃった時に例外投げたいんだけど、 引数エラーのときの ArgumentException みたいに投げるべき 例外ってある?
- 877 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:07:55 ]
- ArgumentExceptionとか
- 878 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:10:44 ]
- >>875
のようなものっていわれても それでなにしたいのさ
- 879 名前:843 [2009/11/18(水) 02:24:33 ]
- >>846
一回のプロセスで一度に大量の画像を分割するので LockBitsは結構しんどかったりします。 unsafeでポインタ使えば?とか言われそうですが^^; >>852 ペイントの例をすでに書いています。 ほかのソフトはためしてません。 >>853 色々ある突っ込みどころ 教えてください。 rectだけ宣言時にnull代入してないぞ、とか そういうのは無しでおねがいします。 bmpで保存すると、 fireworksで表示するとペイントのときのように x=0,y=0のラインが黒になります。 >>857 描画先をRectangle(0,0,pixel,pixel)にしたら 正常に動作しました。 ありがとうございました。
- 880 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:29:46 ]
- >>876
InvalidFooException
- 881 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:35:28 ]
- >878
すみません。定数が用意されているならそれを使おうかと思いまして
- 882 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:51:33 ]
- >>876
メソッド利用者にパラメータが間違っていることを通知したい場合 → InvalidEnumArgumentException コーディングミスによってありえないフローになっているのを検出したい場合 → Debug.Fail(), Trace.Fail()
- 883 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 03:31:43 ]
- >>879
>857の言うように、GraphicsUnit指定による呼び出し方によって発生する内部の変換処理を避けるわけか。 まあそりゃあそうだわな。そこが今回の不具合の直接の原因なわけだし。 >色々ある突っ込みどころ 教えてください。 じゃあ手短に。 ・wBlocks、整数演算で十分。pixel-1を足してpixelで割ればいい。 ・Disposeするオブジェクトはなるべくusing構文で初期化する。明示的な後始末はなるべく書かないのがベター。 ・切り出しファイルの名前と形式は外から変えられるように書く。というかこんなところで書くものじゃない。あとstring.Format() ・オブジェクト、=nullの初期化なんてイラネ。何そのC++もどき。むしろ必要なところでvar構文で初期化して使う。 こんなとこかな。
- 884 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 04:07:59 ]
- 大規模なプログラムになるとプロパティ使うんだろうけども
個人で使う小規模なプログラムってメンバ変数をpublicにしおいても問題ないよね?
- 885 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 04:12:18 ]
- 自動実装プロパティにしとけば?
- 886 名前:843 mailto:sage [2009/11/18(水) 04:45:56 ]
- >>883
いろいろある突っ込みどころ ありがとうございます。 ・wBlocksの件 アルゴリズムの問題ですね。 たしかに整数演算で簡潔するのでその方がスマートです。 勉強になりました。 ・usingについて 例外が発生するとdisposeされないのでusingを書くべきですが 動作検証用サンプルでしたので急ピッチですのであしからず。 ・切り出しファイルの名前を外から指定について 同じく、動作検証用サンプルですので大目にみてください。 StringFormatもargs指定ミスはコンパイル時に発見されないので +でつないでます。 ・必要なところでvar指定 2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは? ループ内部で使いまわせる変数は外出しすべきだと僕は思います。 また、null代入は無駄なのは分かってますが 「初期化してますよ」ってメッセージをこめたソースを書くのは悪くないと僕は思います。 ちなみにBitmapを毎回new(必然的にGraphicsもnew) してるのは画像サイズが256の倍数でないときに 右端と下端の矩形を描画すると、前回の描画が残ってしまうための回避策です。 Graphics.Clearで思った動作するかも。テストしてないのでなんともいえませんが。 varは メソッドの戻り値の型をそのまま受けるとき linq+foreach使うときなど、ジェネリックの型名なんだっけってなるとき 使用するのはいいと思うのですが、 C#使ってるんだからその場で初期化する変数は型はしっかり書いたほうが いいと自分は思ってます。賛否はあると思いますが。 (型付DataSetのテーブルアダプタみたいに型名が長いと初期化が冗長になるので そういうときは見易さを考慮して左辺はvarで受けたりします。) コーディング規則が決められているときはもちろんそれに従います。
- 887 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 05:25:45 ]
- C#ってマイクロソフトが作ったの?
- 888 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 05:37:22 ]
- >>886
俺はおまえさんの主張に大体同意だな そもそも宗教的なことまで突っ込みを入れるのは回答者の分を超えてると思うよ
- 889 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 06:11:25 ]
- >>886
俺もおまえさん寄りの意見だが、 突っ込んでくださいと言っておきながら、 それは違う、あれは違うと条件を付けて反論するのはどうかと思う。 自信があるなら最初から聞くな。 聞いた以上は真摯に受け止めるか、 変なやつに聞いちゃったとスルーなさい。
- 890 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:30:40 ]
- プライドだけは一丁前
- 891 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:39:05 ]
- >>889
それはおかしい 教えを請うたからといって間違った回答や、 自分の方針と反する内容を無条件で聞く必要はない かといってスルーするのは礼を失している 886の対応は真摯な態度だと思うぞ
- 892 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:40:20 ]
- >>886
>2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは? >ループ内部で使いまわせる変数は外出しすべきだと僕は思います。 少なくとも今回のケースでは、変数宣言を外に書いても速度的にメリット無いよ。 変数宣言を一回通るたびに実行コストがかかるとか杓子定規に考えてない?
- 893 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:44:00 ]
- なんでC#はmain()じゃなくてMain()
なんだろうな。 cもc++もjavaもmainで始まったのに、なぜC#はMainなの?それだけ気になる。
- 894 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:45:57 ]
- 横だけど・・・
え、そうなの? スコープ入ったときにスタックに確保、 スコープ出るときにスタックから解放って処理普通にやってんのかと思ってた。
- 895 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:47:47 ]
- >>893
命名規約の問題でしょ。 メソッド名はUpperCamelCaseで表すってルールにしてるから"M"ainになってるだけ。 なんでUpperCamelCaseを採用したのかは言語設計者のポリシーなんだろね。
- 896 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:56:40 ]
- 黎明期の言語じゃあるまいし
- 897 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:57:42 ]
- >>891
無条件で聞けなんてどこにかいてあんの? ま、どっちもどっちだ
- 898 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:01:58 ]
- >>897
>聞いた以上は真摯に受け止め
- 899 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:09:20 ]
- >>894
C#で書いたコードをReflectorで逆コンパイルしたときに現れるgotoだらけのコード見たことない? 見てみれば分かるけど、結構オブジェクトの寿命が変わるような書き換えがされている。 変数スコープが終わる前にGCされてファイナライザが呼ばれることがあるのはこのため。
- 900 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:12:42 ]
- >>899
なるほど ちまちましたコードレベルの最適化はほんとに意味なくなってきてるんだなぁ 勉強になった
- 901 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:41:55 ]
- >>898
日本語が理解できない人だったんですね。 これは失礼しました。
- 902 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:48:42 ]
- >>886
>StringFormatもargs指定ミスはコンパイル時に発見されないので +でつないでます。 なんでやねん。テストコード書けばテストできる範囲でしょ。 >2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは? 実行時最適化が行われる.NET Frameworkの世界でそんな議論しても無意味だよ。 そして、むしろvar構文自体より(便利なものは積極的に使うべきだと思うが)ローカルインスタンスの明示的な初期化(=null;)のほうが問題。 C#ではすべての変数はデフォルト値で初期化されることが保証されているので object obj=null; などという初期化は無意味。それどころか変数が使われなくなると初期化なしだとワーニング出してくれるけど 初期化してると出してくれなくなったりするので余計に悪化している。
- 903 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:14:39 ]
- >>893
Javaの皮を被ったDelphiだから
- 904 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:18:19 ]
- varはなんか、なんかちょっと多様したら不味いことがおきるんじゃないかって気がしてならない
具体的に何が起きるのかはわからんけど dynamicもしかり・・・
- 905 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:19:59 ]
- メソッド名がCamelCaseなのはMSの旧来の伝統
>>904 むしろvar使ったら読みづらくなるようなスコープの長い変数を作るのが悪い
- 906 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:21:56 ]
- >>902
> object obj=null; > などという初期化は無意味。 可読性的には意味がある >それどころか変数が使われなくなると初期化なしだとワーニング出してくれるけど > 初期化してると出してくれなくなったりするので余計に悪化している。 ダウト
- 907 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:23:41 ]
- object obj;
object obj = null; どう可読性に違いが
- 908 名前:905 mailto:sage [2009/11/18(水) 09:25:02 ]
- すまんPascalCaseだった
フィールドを既定値(default(type)の値)で初期化するとFxCopで警告出るよ
- 909 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:29:30 ]
- FxCop日本語版は有料なのか・・・
- 910 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:33:25 ]
- ttp://msdn.microsoft.com/ja-jp/library/ms182274.aspx
これだな パフォーマンスは今のコンパイラでは関係ないが冗長だからやめろということらしい FxCopはコメントのルールだけ外しとけば日本語ソースでも普通に使える
- 911 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:35:13 ]
- ローカル変数の確保は内部的にはメソッドスコープだよ。
そんなのを気にしながらBitmapをループ内で作るって…
- 912 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:39:02 ]
- 世の中富豪的っていうかこまけえ最適化はコンパイラがやってやんぜ!!な方向に
確実に進化してるんだなぁ
- 913 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:39:09 ]
- >>907
皆が皆C#だけやってると思うなよ?
- 914 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:39:59 ]
- nullの方がヌルヌルして入りやすい
- 915 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:42:13 ]
- ローカル変数はデフォルト値で初期化されるって、されないよ。
だから必ずどこかで代入してから参照する必要があり、でないとエラーになる。 もちろん宣言と同時に代入するのでなくとも、どこかで入れればいいが、 宣言で代入するのが普通は分かりやすいけどな(というかできるだけ最初に代入する必要がある場所で宣言する)。 初期化が保証されてるのはフィールドだ。
- 916 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:45:37 ]
- >> 2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
>実行時最適化が行われる.NET Frameworkの世界でそんな議論しても無意味だよ。 実行時最適化関係ないよ。 ILの時点でローカル変数はメソッドスコープで確保される。
- 917 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:51:52 ]
- 実際ループ内でしか使わない変数ならループ内で宣言してくれた方が
コード読む時も余計なこと考えなくてすむしメソッド化する時とかも便利だしなぁ。 #メソッド化すると呼び出しコスト↑と結局毎回確保になっちゃうけど
- 918 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:00:03 ]
- まあちっちゃなメソッドならインライン展開されるけどな。
とはいってもかなり小さい場合だけだったとは思うけど。
- 919 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:11:41 ]
- >>915
ttp://msdn.microsoft.com/ja-jp/library/aa691170(VS.71).aspx これか、なるほど 俺ずっと勘違いしてたわ。
- 920 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:16:40 ]
- 最終的にILになれば同じつうならあとは好みの問題だろう・・・
ギリギリの極限まで速度を追い求めない限り 些細な速度UPを得るよりも可読・メンテ性を維持したい というのが俺の持論 もちろん事務系とかの話でFA系の処理とかになれば必要なところは可読性捨ててでも速度UPとるけど
- 921 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:18:50 ]
- みんながどのコードを前提に話してるのか見えないんだが・・・
ループ内で宣言したくないのって言うと、 よっぽどでかいインスタンスを毎回newして捨てるとか そいういう場合?
- 922 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:49:08 ]
- 変数のスコープを最小限にするのは宗教でもなんでもなく常識だろ
宣言だけループ外に置いて、わざわざミスが起こる確率を増加させる必要はない あと、理由もなくローカル変数を規定値などに初期化するのも良くない たとえば、未初期化の変数を参照するとコンパイルエラーになるので即座に分かるが、 無駄に初期化していると問題の発覚が遅れ、デバッグに要する時間も増える
- 923 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:28:52 ]
- >>922
処理上で意味のある値で初期化するんであって 常に null で初期化すると勘違いしてるから そういう的外れな反論が飛び出すんだろう
- 924 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:45:14 ]
- インスタンス化の削減も微妙だけどな。
もちろんサイズがでかかったりインスタンス化が重いもので かつ再利用できるものならループ内でのインスタンス化を削減するのもいいが、 何でもかんでも削減すりゃいいってもんじゃない。 よっぽどタイトなループなら別だが。 個人的には、よく言われるStringBuilderの再利用なんかも微妙だと思ってる。 平均的にはある程度効果はあるが、常識のようにやるべきこととは思えない。
- 925 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:46:59 ]
- 「理由もなく」初期化すんなよってことであって
意味あって null で初期化すんのはべつにかまわんと思うけどな。
- 926 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:48:26 ]
- >>924
そういうのは最適化部分を狭いメソッド内に押し込めればOKってルールでやってるなあ。
- 927 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:50:40 ]
- なぜなら、StringBuilderのToStringは内部バッファをそのまま流用してString化するから。
その後StringBuilderに変更を加えた時点でバッファは複製される。 当たり前だけど結局メモリの再確保は起こるわけで、 StringBuilderを新たにインスタンス化するのと大差があるわけではない。
- 928 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:56:54 ]
- そんな細かいこと考えるよりもっとロジック工夫して高速化しろよ
- 929 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:57:56 ]
- だれに言ってんだよ
- 930 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:00:19 ]
- 今日もお前ら絶好調だな
- 931 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:04:50 ]
- もっと褒めて
- 932 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:22:08 ]
- 結局そういうのもバッドノウハウになってくんだろな
- 933 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:27:34 ]
- >>906
スマンカッタ。確かにフィールド、ローカル変数共に初期化してても他で使ってなかったらワーニング出るな。 初期化してないときとワーニングの内容は変わるけど。 >可読性的には意味がある 意味がないことが多い。922の言うように未初期化参照のコンパイルエラーを出させるほうが素直なコード。 初期化コード自体がif文で分岐してるとかなら初期値を与えることはあるが、それは例外的な措置だよね。 >>923,925 844のBitmap、Graphicsインスタンスのnull初期化は不要だよな?
- 934 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:32:32 ]
- まあ初期化なくす前に明らかに宣言位置を変える方向だが。
宣言位置が適切なら、多くの場合その場で初期化が自然になるからね。 もちろん意味のない初期化はするべきではないけど、 上記を守れば基本的にそういうのはなくなるはず。
- 935 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:54:00 ]
- >>933
>844のBitmap、Graphicsインスタンスのnull初期化は不要だよな? 不要だがあったからといって悪い訳じゃない
- 936 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 14:05:32 ]
- チームの規約にしたがうレベル
戦ってまで守らなきゃいけない一線ではないわな どっちにしても
- 937 名前:デフォルトの名無しさん [2009/11/18(水) 14:14:32 ]
- >>935
>Bitmap、Graphicsインスタンスのnull初期化は不要だよな? インスタンスのnull初期化じゃなくて変数(ry
- 938 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 15:48:55 ]
- formAからform.showでformBを開いた後、不要になったformBを×ボタンで閉じます。
この時、formBのリソースは全て開放されますよね?。
- 939 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 15:52:19 ]
- ガベージコレクションの対象にならないと開放されないよ。
- 940 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 15:57:44 ]
- そのformという変数を保持している間は解放されないかな
- 941 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 16:17:16 ]
- 規定のインスタンスを使用している場合はアプリ終了まで保持されるというような話を聞いた。
(でもこれってたしかVB.NETの話だったような。C#では規定のインスタンスってあるんかな?)
- 942 名前:938 mailto:sage [2009/11/18(水) 16:27:33 ]
- そうなるとFormClosingでちゃんと処理してから終了させた方が良さそうですね
ありがとうございます
- 943 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 16:32:41 ]
- >>942
いあ、そういふ意味ではないんだが。 Form_Closingイベントとメモリ開放は別話。
- 944 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 16:43:17 ]
- >>942
モーダルダイアログならFormAで次のようにFormBを表示し using(Form formB = new FormB()) { formB.ShowDialog(this); } formBフォームの中で使ってるリソースはFormBのDisposeをオーバーライドして行う
|

|