1 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:44:27 ] このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 ふらっとC#,C♯,C#(初心者用) Part23 pc11.2ch.net/test/read.cgi/tech/1200033660/
152 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:20:27 ] WPFはGDI+にとってかわるのかな?
153 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:24:21 ] WPFはノウハウが全く違うから普及するのに10年ぐらいかかりそうだな
154 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:26:21 ] Hashtableはよく使う。
155 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:37:17 ] >>152 WPFのソフトウェアレンダリングコードはGDI+からだいぶ流用したらしい。 社内的にはとってかわってるのかもね。
156 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:41:29 ] >>154 何か理由があって使ってるの?
157 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:43:29 ] 画像とハッシュテーブルがどうからむのかよくわからん(´・ω・`)
158 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:43:35 ] Hashtableは名前がダサい HashTableならいいのに
159 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:45:03 ] C#で作ったプログラムは必ず使う側に.NETが入っている必要があるんでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:45:28 ] いいえ
161 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:47:13 ] .NETがいらないC#プログラムを作るにはどうしたらいいんでしょうか? using System;とかありますがああゆうの全部.NETのクラスライブラリだとかなんですか? そこら辺のことが書いてあるサイトとかないでしょうか
162 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:49:27 ] >>161 無理 自分で1からコンパイラ作れば可能だけどさ
163 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:49:50 ] >>156 マルチスレッド絡み、やや微妙な制約はあるけどね。 ほんとはjavaのConcurrentHashMapだったかみたいな 専用のがあるといいんだけど。
164 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:50:17 ] >>161 mono
165 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:51:17 ] >>162 コンパイラ作るだけじゃダメ CLIを実装しないと Silverlightは.NETじゃないといえば.NETじゃないかも
166 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:53:24 ] >>165 C#をネイティブコードにするコンパイラがあればいいんだろ。 別にILしなければならない理由はない。
167 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:54:58 ] ライブラリどうすんのよ…
168 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:55:00 ] ネイティブにして、移植したライブラリを使用したとして、 その環境は .NET ではないと言えるのだろうか。
169 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:55:01 ] すまんCLIはいらないみたい でも言語仕様に記載されてるBCL(標準クラスライブラリ)は全部実装する必要がある
170 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:55:37 ] c#暦1ヶ月です。 MSDNのページがさっぱり理解できないんですが、ある程度使えるようになったら読めてくるもんなのでしょうか?
171 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:58:43 ] 日本語版は理解できなくても無理はない 英語版読め
172 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:59:32 ] つーかどこが分からんの?
173 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:59:34 ] >>170 カンでさがしてサンプルコード張って動かしてみるのが正しい使いかた 理解するんじゃない感じるんだ
174 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:59:42 ] クラスの解説を読めるようになるのは初心者脱出の第一歩だな C#の言語仕様についての説明のページはVB.NETと違って初心者向けに書かれてないから結構難しい
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 意味分からん。 コードで書くとどういうこと?