1 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:44:27 ] このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 ふらっとC#,C♯,C#(初心者用) Part23 pc11.2ch.net/test/read.cgi/tech/1200033660/
231 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:48:55 ] とりあえず自宅のC#3.0で下記を試したら,一つだけ結果違った static void Main(string[] args) { int n; n = 5; Console.WriteLine(2 * n * valfunc(n)); n = 5; Console.WriteLine(2 * n * reffunc(ref n)); n = 5; Console.WriteLine((2 * valfunc(n)) * n); n = 5; Console.WriteLine((2 * reffunc(ref n)) * n); Console.ReadLine(); } private static int valfunc(int n) { n = -n; return n; } private static int reffunc(ref int n) { n = -n; return n; } あと再帰に関してはrefもvalも計算コストはそんなに変わらないと思っている. とある言語の実装だと「refは,呼び出し元でコピーした変数を値渡しして,戻ってきたら本物に上書き」みたいなことやってたみたい.
232 名前:222 mailto:sage [2008/02/06(水) 01:53:51 ] 参照渡しじゃなくてポインタ使えればなぁ、と思うんだけどそうもいかないんですよね >>230 それだと非常にやばいです、それとあまり差がないんですか、ありがとうございます どの道わからなければ安全そうな値渡しにしようと思ってたのでこれでいってみます ありがとうございました
233 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 02:05:19 ] C#ってオブジェクト渡しは全部参照渡しみたいなもんじゃないの?
234 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 02:07:22 ] 参照型は参照渡し 値型は値渡し
235 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 02:07:53 ] FileInfoとか渡したらどうなるんだろうね
236 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 02:09:55 ] 参照だろ
237 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 07:28:13 ] stringは参照渡しだからrefなんざつけんでいい stringの代入はコピーではなくポインタを代入してるだけ
238 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 07:40:12 ] >>232 stringを渡すときrefつけるのとつけないので結果が変わる場合があるのはわかってる?
239 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 08:23:49 ] >>234 参照型を値で渡すのと参照渡しは違うよ。 揚げ足取りじゃなくて全然違う。
240 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 09:26:56 ] なぜ説明を書かないのだろう。
241 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 09:59:58 ] 揚げ足取りだから
242 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 10:34:02 ] MSDNでrefで検索して最初に出て来るページにすっかり書いてあるだろJK
243 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 11:03:23 ] メソッド内で生成された参照型のインスタンスへの参照を、呼び出し元で受け取るには、refなりoutなりを使って参照の参照を渡す必要がある。(returnは別として) 呼び出し元で作成したインスタンスを操作するなら、インスタンスの参照を渡せばいいから、refはいらない。 引数をメソッド内で変更したい場合、Stringみたいに操作する度に新しいインスタンスが生成されるタイプのクラスは前者。StringBuilderみたいに新たなインスタンスを生成せずに操作できるタイプのは後者。
244 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 11:16:06 ] 読み返してみるとくどくて意味不明だな。すまん。 徹夜明けだからもう寝るわ。
245 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 14:51:23 ] using System; using System.Text; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { StringBuilder strbld = new StringBuilder("Start"); EditValue(strbld); Console.WriteLine(strbld.ToString()); //出力:Start+Edit ChangeValue(ref strbld); Console.WriteLine(strbld.ToString()); //出力:Changed NotChangeValue(strbld); Console.WriteLine(strbld.ToString()); //出力:Changed Console.ReadKey(true); } static void EditValue(StringBuilder value) { value.Append("+Edit"); } static void ChangeValue(ref StringBuilder value) { value = new StringBuilder("Changed"); } static void NotChangeValue(StringBuilder value) { value = new StringBuilder("NotChanged"); } }} こういうことか。勉強になった。Thx
246 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:00:13 ] 違うだろ
247 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:06:43 ] 参照型の参照渡しはポインタtoポインタ(**object)だな まぁ,C風に覚えてもかまわないと思われ
248 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:16:11 ] >>246 どう違うの? 出力結果を見ると違わないんだけど。 アホにも分かるように教えてくれ。
249 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:22:19 ] >>248 >>246 ではないが NotChangeValue の後が違うかと。
250 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:29:56 ] ん?stringもref stringも 関数内で引数を書き換えなきゃ変わらんだろ
251 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:48:50 ] あーそうか、ChangeValueとかNotChangeValueとかいう関数名が分かってないようにとられた原因か。 ChangePtrとNotChangePtrに名前を変更して読んでちょうだい。 上記二つのメソッドは参照の参照を変更しようとしているから、 参照渡しをしないNotChangePtrの方は当然参照が変更されない EditValueというメソッドは、参照型を値渡しで受け取り、それのインスタンスメソッドによって インスタンス自身が変化する。 こういう認識でいいんだよね?
252 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:51:24 ] >>250 意味分からん。 コードで書くとどういうこと?
253 名前:デフォルトの名無しさん [2008/02/06(水) 15:52:24 ] 他Formから値を参照したいのだがわからないww 初心者過ぎて笑われそうだが… Form1,2で 1に設置しているRadiobuttonをCheckすることで 2に値の変化を与えたい。 わかりにくい説明ではあるが誰か教えてくださいな^ω^
254 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:53:18 ] >>249 コンパイルして走らせてみた? 出力結果は間違いないよ?
255 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:53:45 ] >>253 C#の基礎というかプログラミングの基礎のページ見て来い
256 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:55:22 ] >>253 "デリゲート"でググれ
257 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:59:35 ] すまんID出ないんだったな。 >>245 >>248 >>251 >>254 全部同一人物です。 以後コテハン245になるとしよう。
258 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:00:24 ] >>250 static void Main( string[] args ) { string str = "250 は"; Manuke( str ); Console.WriteLine( str ); Teinou( ref str ); Console.WriteLine( str ); Console.ReadKey(); } static void Manuke( string s ) { s = "間抜け"; } static void Teinou( ref string s ) { s = "低能"; }
259 名前:坊 [2008/02/06(水) 16:03:50 ] ありがとっす^ω^
260 名前:坊 [2008/02/06(水) 16:05:29 ] あっ >>253 ですww 困ったらまたきますんでw
261 名前:254 mailto:sage [2008/02/06(水) 16:05:47 ] >>258 禿同。 参照渡しと値渡しの違いって中級者でも分かってない人が多いって記事をどっかで見たことある。
262 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:06:01 ] >>258 そんなレベルの話してたのか?
263 名前:262 mailto:sage [2008/02/06(水) 16:07:05 ] あ、値渡しはともかく参照渡しってCのアドレス(ポインタ)渡しと結局同じだと思ってたけど違うの?って意味な
264 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:08:55 ] >>258 だからそうやって引数を書き換えなきゃ同じだろ
265 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:11:19 ] >>264 彼らは参照渡しは知ってても使い方を知らないんだろう
266 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:13:00 ] >>258 が話の流れと日本語を読めないってことだけは分かった
267 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:14:53 ] >>263 まあ凡そ。 それを大前提に進んでた話なんだけど>>258 が爆発した
268 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:16:08 ] かわいそうな>>258 がいるスレ
269 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:27:43 ] で、話の大元の>>222 に立ち返ったとして何を議論してたんだっけ?
270 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:32:29 ] >>222 は前者でいいってことじゃね 余計な副作用を与えないために
271 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:05:58 ] >>247 というか、むしろそのほうが分かりやすいような気が 「参照情報」なんて回りくどい言い方せずに、「アドレス」って言ったほうがイメージが伝わりやすいような
272 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:36:51 ] >>271 根本に返って冷静に考えてみ。 アドレスの方が本来間接的な表現な上に間違ってるでしょ。 参照をもし言い換えるのなら、俺なら「位置情報」と言うな。
273 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:37:58 ] いやそりゃアドレスじゃん、英語のアドレスが住所としか略されないとでも思ってるのか?
274 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:38:52 ] 位置情報を英語に置き換えりゃアドレスになんだろ 機械翻訳で訳される2単語が実用される英語だとでも思ってんのかね
275 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:40:47 ] >>272 厳密な意味ではいろいろあるだろうけど、初心者にとっては直感的にはアドレスが一番しっくりくると思うが
276 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:41:26 ] 最近はスレタイも読めないバカが増えたな
277 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:43:29 ] >>273 住所にすら略されないが?
278 名前:275 mailto:sage [2008/02/06(水) 18:44:59 ] ×初心者 ○日本人の初心者 まぁ瑣末事だけどw
279 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:51:16 ] >>274 言葉にはそれぞれ意味上のふり幅ってものがあるんだよ。 特に英語のような多義的な言葉を文脈によって使い分ける傾向が高い言語ではね。 "address"は多義的過ぎる上に、コンピュータの世界では別の抽象レベルで 既に別の意味で使われているから望ましくない。 もっと意味のふり幅が少ない言い方を工夫すべき。 ……ここまで補足しないとわからないかねえしかし。。
280 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:53:19 ] エイリアスでええやん
281 名前:デフォルトの名無しさん [2008/02/06(水) 19:00:55 ] アプリケーション設定を暗号化して保存したいんですが、いまいち system.comnfigurationクラスの使い方がよくわかりません。 どっか良いサンプルないですか? MSDN読んでもいまいちよくわかりません。
282 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:34:25 ] 暗号化は変なサンプルも多いから気をつけろよ
283 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:00:59 ] ポインタの参照渡し
284 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:27:31 ] 最近のスレの内容・・・予想以上に.NET普及は早そうだな >>281 BinaryFormatterとかでは駄目なの?
285 名前:デフォルトの名無しさん [2008/02/06(水) 22:37:14 ] メソッドに渡す引数の属性で[in]や[out]があるんですが、 これはC#のrefやoutとは違うものなんでしょうか
286 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:41:38 ] そいつはマーシャラに対する指令
287 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:41:57 ] [Out]はoutと同じ。 refは[In][Out]相当。 [In]単独は、アンマネージとの相互運用で使うことがある。
288 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:45:50 ] C#の中だけで完結する限りは[in]や[out]は無意味
289 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:47:46 ] C/C++で作ったコードをC#で使えるようなラッパーを作りたいんですが 参考になるようなHPとか本あったら教えてください
290 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:48:35 ] 俺も知りたい
291 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:48:49 ] C++/CLIでいいじゃないか。
292 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:51:14 ] >>289 本は知らんが、このあたりのキーワードでMSDNとか 探してみればなんかヒントあるんじゃね。 * COM Interop * P/Invoke * C++/CLI
293 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:54:18 ] VC#2008対応の解説本早く出せよ。
294 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:57:05 ] 誰に言ってるのw 君統合失調の初期症状じゃないのマジで
295 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:59:48 ] 確かにアンマネージドとの連携について詳しい本があったら欲しいな Win32API叩く度に検索して調べるの面倒になってきた
296 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:00:45 ] つMSDN
297 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:08:54 ] >>295 Win32API使うだけなら、P/Invoke.netとかでいいだろ。
298 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:10:21 ] >C#の中だけで完結する限りは[in]や[out]は無意味 そうでもない。
299 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:16:48 ] >>298 具体的にkwsk
300 名前:デフォルトの名無しさん [2008/02/06(水) 23:18:40 ] WebBrowserコントロールでブラウザ作ってるんですが、yahoo.co.jpを開いて閉じるとフリーズしてしまいます。 Googleとかだと大丈夫なのですが。 なんででしょうか? バグってるんでしょうか?
301 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:20:26 ] 説明にもなってない それで解決できるはずも無い まあ確かにWebBrowserは色々胡散臭いが
302 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:24:52 ] あなたのコードがバグってるんでしょうね
303 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:33:14 ] WebBrowserはJavaScript周りがバグりまくっている。 JavaScript以外にもFlashを使っているサイトを表示した直後も半フリーズ状態になる。 で、結論は「使うな」。 IEコンポーネントで全て置き換えろ
304 名前:デフォルトの名無しさん [2008/02/06(水) 23:46:28 ] 新規プロジェクト作ってWebBrowser貼り付けて、下記の1行を追加しただけで終了時に固まる。 public Form1() { InitializeComponent(); webBrowser1.Url = new Uri("www.yahoo.co.jp "); } で、原因はWebBrowserは開いたページの内容によっては内部で立ち上がった謎のスレッドが終わらなくなる 直る見込みはない 諦めろ
305 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:50:33 ] >直る見込みはない 何故ですかね?MSにやる気がないから?
306 名前:デフォルトの名無しさん [2008/02/06(水) 23:55:02 ] >>305 WebBrowser Controlが登場して何年経ったと思ってるんだ 海外の方でも2年近く前から話題になっているくらいの問題だぞ www.eggheadcafe.com/aspnet_answers/NETFrameworkNETWindowsForms/Apr2006/post26457510.asp 直るならとっくの昔に直ってる
307 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:09:08 ] >>304 固まらなかったよ
308 名前:デフォルトの名無しさん [2008/02/07(木) 00:29:46 ] >>304 VS2005 Win2003R2x64 固まる
309 名前:デフォルトの名無しさん [2008/02/07(木) 00:34:05 ] >>304 固まるというか、ウィンドウは閉じてるのにVS2005がデバッグ実行中のままになった
310 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:42:20 ] >>304 XP VS2008 .NET Framework3.5 固まらない
311 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:42:25 ] WebBrowser使ったこと無いからよく分からんが スレッドがバックグラウンドになってないんじゃないか?
312 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:44:07 ] WebBrowserと名前のつくコントロールは、 大昔のVBやDelphiからあったが、 どれもこれもまともに使える代物じゃなかったな。
313 名前:307 mailto:sage [2008/02/07(木) 00:44:20 ] VS2005Pro XPx64SP2 IE:7.0.5730.11 Flash:9.0.115.0 プラットフォーム:x86 固まらない
314 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:47:52 ] コンストラクタ内で実行しなけりゃいいんじゃね?
315 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:48:36 ] >固まる環境の人 Navigateメソッドでもなる?
316 名前:デフォルトの名無しさん [2008/02/07(木) 00:58:16 ] >>315 なった コンソール用のテストコード書いてみたが、こちらも見事に固まる ちなみに終了シグナルは飛んできて一見終わった様に見えるが、 残骸が残っていて悪さしているようだ class test { ManualResetEvent _mre = new ManualResetEvent(false); public void run() { Thread thread = null; try { _mre.Reset(); thread = new Thread(new ThreadStart(entry)); thread.SetApartmentState(ApartmentState.STA); thread.Start(); } finally { _mre.WaitOne(); } } void entry() { WebBrowser bra = new WebBrowser(); browser.Navigate("www.yahoo.co.jp/ "); while (_browser.ReadyState != WebBrowserReadyState.Complete) { // 省略 } _mre.Reset(); } }
317 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:02:56 ] >>306 海外とか知らねえよバカ
318 名前:デフォルトの名無しさん [2008/02/07(木) 01:29:08 ] テストプログラム www2.uploda.org/uporg1237632.zip.html
319 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:37:03 ] >>318 は www.google.co.jp になっているから、www.yahoo.co.jp に変更して試して見るべし
320 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:40:36 ] >>316 ちなみにIEのバージョンは?
321 名前:デフォルトの名無しさん [2008/02/07(木) 01:43:14 ] >>320 Windows Server 2003R2 x64 IE 6.0.3790.1830 SP1 .NET3.0は入れてない
322 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:52:31 ] 家のパソコンにIE6が入ってるから試そうと思ったけど繋がらないや 帰るか
323 名前:デフォルトの名無しさん [2008/02/07(木) 02:15:42 ] >>318-319 このエラーでた 意味はわからん msdn2.microsoft.com/ja-jp/library/ms172219.aspx
324 名前:デフォルトの名無しさん [2008/02/07(木) 08:25:57 ] >>284 binaryformatterは暗号化していないので解析しようと思えば すぐできてしまうから、パスワードなんかは保存したくないわけです。 system.security.cryptographyのクラス群で暗号化してから保存すれば 同じことなんですが…。 アプリケーション設定が.net2.0以降すごく使いやすくなっているみたいなので、 そちらで暗号化できるならそっちを使いたいなあと思った次第です。 設定クラスの定義、設定ファイルの読み出し、保存を毎回毎回アプリ作るたびに 実装するのって、エラー処理なんかまで含めて考えると意外と面倒くさいもんで。。
325 名前:デフォルトの名無しさん [2008/02/07(木) 12:58:22 ] またWebBrowser被害者か
326 名前:デフォルトの名無しさん [2008/02/07(木) 14:16:27 ] loaderLock マネージ デバッグ アシスタント (MDA: Managed Debugging Assistant) は、Microsoft Windows オペレーティング システムのローダー ロックを保持するスレッドでマネージ コードを実行しようとする試みを 検出します。 このような実行は不正であり、デッドロックの発生につながり、DLL がオペレーティング システムのローダーに よって初期化される前に使用される可能性があります。
327 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 15:00:57 ] >>323 IEのアドイン全部停止して試してみるとかどう?
328 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 15:19:01 ] 質問です。 インターネット上にあるpng形式のファイルを取得して保存したいと考えています。 そこで、 Stream objStream; objStream = wrGETURL.GetResponse().GetResponseStream(); StreamReader objReader = new StreamReader(objStream); string filepath; filepath = "C:\\hoge\\hoge.png"; if (File.Exists(filepath)) { File.Delete(filepath); } StreamWriter w = new StreamWriter(filepath); w.Write(objReader.ReadToEnd()); w.Close(); objStream.Close(); とやりましたが、保存できないようです。 StreamReaderのどのメソッドを使えば、インターネット上の画像ファイルの読み込みを一括でおこなえるのでしょうか?
329 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 15:20:48 ] どこでおかしくなってるのかちゃんと調べろよ。
330 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 15:26:48 ] StreamReader/StreamWriterはストリームを文字列で扱うクラス。 画像みたいなバイナリファイルに使っちゃ駄目。
331 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 15:28:07 ] File.Copy()でファイルをコピーする場合、 途中で止めるにはどうすればいいですか? プログラムを強制終了しても、止まらないようなのですが・・・