1 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:44:27 ] このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 ふらっとC#,C♯,C#(初心者用) Part23 pc11.2ch.net/test/read.cgi/tech/1200033660/
175 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:00:11 ] なんでC#ってネイティブコード吐けないんだろ
176 名前:161 mailto:sage [2008/02/05(火) 23:00:46 ] monoはうにx版.NETみたいな感覚でした、それは置いておいて無理ですか、把握しましたありがとう
177 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:01:40 ] 無理じゃないと言っているのだが。
178 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:01:44 ] >>175 .NETを使うために作られた言語だから
179 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:01:45 ] 一応マルチプラットフォームを考えてるんだろうが、 だったら MS が色んなプラットフォームで処理系作りやがれと。
180 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:02:45 ] 吐けないんじゃない。吐かないだけ。
181 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:03:27 ] 馬鹿でかいBCLが障害
182 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:03:51 ] >>175 フレームワーク使う言語としては正しいけどね・・・
183 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:04:12 ] >>177 馬鹿?
184 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:04:17 ] ネイティブコード吐ければもっと普及すると思う
185 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:04:54 ] 何でネイティブコードにこだわってるんだ?馬鹿なの?
186 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:05:26 ] >>185 そこは突っ込みどころと違う
187 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:06:24 ] >>185 バカはお前だろ
188 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:06:35 ] そもそも.NETを普及させるための言語なわけだから ネイティブコードを吐けるようにして普及を図ったところで意味がない
189 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:07:04 ] CPU ごとに別のマシン語はかないといけないとなると 処理系作るの面倒だし・・・。
190 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:07:04 ] もう.NETとかいう思想自体が古いけどな
191 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:08:17 ] >>175 いきなりネイティブコード吐くとリフレクションやLCGと相性悪そうだがその辺考えてみた?
192 名前:170 mailto:sage [2008/02/05(火) 23:08:26 ] MSDNの読み方というか、歩き方みたいなのがいまいち分からんのです。 ググる時も、大抵先頭にくるMSDNはなるべく避けて、@ITとかのサイトに逃げてます・・・ 機械翻訳ぽいのがどうにも
193 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:08:32 ] >>190 何が古いんだ?具体的にどうぞ。
194 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:10:18 ] 新しいのが出てないのに古いとはなかなか言い辛いでしょう >>192 俺がMSDN渡り歩けるようになったのはプログラミング歴5年目くらいです 非常に遅いな
195 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:10:32 ] というかネイティブコードじゃないこととフレームワークは関係ないだろ。
196 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:12:17 ] >>192 基本的にMSDNはリファレンス。辞書。 分からないときに引くものであって、教科書じゃない。 MSDN2になって翻訳は随分まともになったと思うが。
197 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:13:07 ] >>192 @ITは正しい選択
198 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:13:54 ] まあ変なVB系Tipsサイトよりは
199 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:14:04 ] そしてブーデー川俣の記事読むのか
200 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:17:31 ] .NET Tipsで十分場合が多い
201 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:18:13 ] 緑のバイク
202 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:19:46 ] C#、でぐぐってでた1ページ目が日本語C#情報の9割だと思う俺
203 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:20:18 ] むしろ9割9分くらいだろ
204 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:24:27 ] 何件表示するかの設定によるんじゃ
205 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:54:25 ] 多次元配列の初期化で、配列初期化子は変数かフィールド初期化子の中でのみ使用できます。新しい式を使用してください。 というエラーが取れなくて困っています。 int[ , ] hoge = new int[ , ] { { 1, 2 }, { 1, 2 } }; は問題ないのに、 int[][ , ] hoge = new int[][ , ] { { new int[]{ 1, 2 }, new int[]{ 1, 2 } }, // ★ { new int[]{ 1, 2 }, new int[]{ 1, 2 } }, // ★ }; とすると、★の行を指して上記のエラーがでます。 intからint[]に型を変えただけだと思っているのですが、何が違うのでしょうか。
206 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:58:49 ] >>205 int[]の[,]なんだから逆 int[,][]
207 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:00:10 ] 基本やり直し。 配列初期化子ってわかる?
208 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:01:33 ] >>207 お前は分かってるのかよ。わかってるなら書け。
209 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:01:51 ] >>207 そんな大げさな間違いじゃない
210 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:03:03 ] >>206 ほんとだ… ありがとうございます。
211 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:21:43 ] >>179 いろんなプラットフォームありますよ。 x86, x64, IA-64 .NET Compact Framewrok .NET Micro Framework どれもWindows上というのはご愛敬w。 後は申し訳程度にSSCLIがFreeBSD対応だった気がする。
212 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:23:00 ] Linuxはmonoがあるしなぁ MSも支援してるし
213 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:25:52 ] 質問した当人ですがあらゆるWindows上で使えたらなぁとか思ってました
214 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:26:23 ] フィールドって言葉がイマイチなじめない メンバ変数って言いたくなる
215 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:46:59 ] >>213 「あらゆるWindows」ってなにがあるの?
216 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:48:40 ] Windows1.0
217 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:49:29 ] ごめんなさい凡そ今いるWindowsユーザーです だから.NETなくて良いって条件さえあればVistaは知らないけどいけるかな
218 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:49:50 ] 最後にとが抜けたorz
219 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:50:30 ] .net入れればいいじゃん。
220 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:13:06 ] 今時.NETくらい誰でも入れてるだろ、とかいう認識の俺はだめなんだろうな
221 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:14:33 ] .NET程度が使えない環境は切り捨てられるべき
222 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:24:51 ] private void foo(string hoge, string piyo) { いろいろ処理 foo(fuga, hogehoge); } と private void foo(ref string hoge, ref string piyo) { string hoge0 = hoge; string piyo0 = piyo; いろいろ処理 foo(ref fuga, ref hogehoge); } どっちが良いんでしょうか? 渡す文字列は100文字程度で再帰による関数の呼び出しは100~5000回くらいです 後者が良い気がするのですが、文字列100文字程度なら前者のがいいのかなぁと考えてます
223 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:26:39 ] やっとまともな質問だなw 後者でいいよ、むしろなんで前者選ぼうと思ったの?
224 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:27:31 ] ___ ━┓ / ―\ ┏┛ /ノ (●)\ ・ . | (●) ⌒)\ . | (__ノ ̄ | \ / \ _ノ /´ `\ | | | |
225 名前:222 mailto:sage [2008/02/06(水) 01:28:48 ] >>223 やっぱりそうですか >>224 参照渡しって初めて知りまして、なんかやばいですか?
226 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:29:08 ] 5000plyも呼べたっけ?
227 名前:222 mailto:sage [2008/02/06(水) 01:31:12 ] 実際はあんな形ではないんですが、想定してるのは5000回くらいまでです
228 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:31:22 ] ああ末尾ね
229 名前:222 mailto:sage [2008/02/06(水) 01:36:42 ] すみません、fugaとhogehogeはいろいろ処理、と書かれてる部分で引数を元に 値を設定されたstring型です
230 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:43:15 ] >>225 なんかやばいかどうかは使いどころ たとえば,参照渡しだと副作用完了点が関数内部まで拡大する可能性がある. 2*n*val_func(n) ≠2*n*ref_func(n) かもしれない
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 厳密な意味ではいろいろあるだろうけど、初心者にとっては直感的にはアドレスが一番しっくりくると思うが