ふらっとC#,C♯,C#(初心者用) Part24
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/02/03(日) 17:44:27「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
ふらっとC#,C♯,C#(初心者用) Part23
http://pc11.2ch.net/test/read.cgi/tech/1200033660/
0153デフォルトの名無しさん
2008/02/05(火) 22:24:210154デフォルトの名無しさん
2008/02/05(火) 22:26:210155デフォルトの名無しさん
2008/02/05(火) 22:37:17WPFのソフトウェアレンダリングコードはGDI+からだいぶ流用したらしい。
社内的にはとってかわってるのかもね。
0156デフォルトの名無しさん
2008/02/05(火) 22:41:29何か理由があって使ってるの?
0157デフォルトの名無しさん
2008/02/05(火) 22:43:290158デフォルトの名無しさん
2008/02/05(火) 22:43:35HashTableならいいのに
0159デフォルトの名無しさん
2008/02/05(火) 22:45:030160デフォルトの名無しさん
2008/02/05(火) 22:45:280161デフォルトの名無しさん
2008/02/05(火) 22:47:13using System;とかありますがああゆうの全部.NETのクラスライブラリだとかなんですか?
そこら辺のことが書いてあるサイトとかないでしょうか
0162デフォルトの名無しさん
2008/02/05(火) 22:49:27無理
自分で1からコンパイラ作れば可能だけどさ
0163デフォルトの名無しさん
2008/02/05(火) 22:49:50マルチスレッド絡み、やや微妙な制約はあるけどね。
ほんとはjavaのConcurrentHashMapだったかみたいな
専用のがあるといいんだけど。
0164デフォルトの名無しさん
2008/02/05(火) 22:50:17mono
0165デフォルトの名無しさん
2008/02/05(火) 22:51:17コンパイラ作るだけじゃダメ
CLIを実装しないと
Silverlightは.NETじゃないといえば.NETじゃないかも
0166デフォルトの名無しさん
2008/02/05(火) 22:53:24C#をネイティブコードにするコンパイラがあればいいんだろ。
別にILしなければならない理由はない。
0167デフォルトの名無しさん
2008/02/05(火) 22:54:580168デフォルトの名無しさん
2008/02/05(火) 22:55:00その環境は .NET ではないと言えるのだろうか。
0169デフォルトの名無しさん
2008/02/05(火) 22:55:01でも言語仕様に記載されてるBCL(標準クラスライブラリ)は全部実装する必要がある
0170デフォルトの名無しさん
2008/02/05(火) 22:55:37MSDNのページがさっぱり理解できないんですが、ある程度使えるようになったら読めてくるもんなのでしょうか?
0171デフォルトの名無しさん
2008/02/05(火) 22:58:43英語版読め
0172デフォルトの名無しさん
2008/02/05(火) 22:59:320173デフォルトの名無しさん
2008/02/05(火) 22:59:34カンでさがしてサンプルコード張って動かしてみるのが正しい使いかた
理解するんじゃない感じるんだ
0174デフォルトの名無しさん
2008/02/05(火) 22:59:42C#の言語仕様についての説明のページはVB.NETと違って初心者向けに書かれてないから結構難しい
0175デフォルトの名無しさん
2008/02/05(火) 23:00:110176161
2008/02/05(火) 23:00:460177デフォルトの名無しさん
2008/02/05(火) 23:01:400178デフォルトの名無しさん
2008/02/05(火) 23:01:44.NETを使うために作られた言語だから
0179デフォルトの名無しさん
2008/02/05(火) 23:01:45だったら MS が色んなプラットフォームで処理系作りやがれと。
0180デフォルトの名無しさん
2008/02/05(火) 23:02:450181デフォルトの名無しさん
2008/02/05(火) 23:03:270182デフォルトの名無しさん
2008/02/05(火) 23:03:51フレームワーク使う言語としては正しいけどね・・・
0183デフォルトの名無しさん
2008/02/05(火) 23:04:12馬鹿?
0184デフォルトの名無しさん
2008/02/05(火) 23:04:170185デフォルトの名無しさん
2008/02/05(火) 23:04:540186デフォルトの名無しさん
2008/02/05(火) 23:05:26そこは突っ込みどころと違う
0187デフォルトの名無しさん
2008/02/05(火) 23:06:24バカはお前だろ
0188デフォルトの名無しさん
2008/02/05(火) 23:06:35ネイティブコードを吐けるようにして普及を図ったところで意味がない
0189デフォルトの名無しさん
2008/02/05(火) 23:07:04処理系作るの面倒だし・・・。
0190デフォルトの名無しさん
2008/02/05(火) 23:07:040191デフォルトの名無しさん
2008/02/05(火) 23:08:17いきなりネイティブコード吐くとリフレクションやLCGと相性悪そうだがその辺考えてみた?
0192170
2008/02/05(火) 23:08:26ググる時も、大抵先頭にくるMSDNはなるべく避けて、@ITとかのサイトに逃げてます・・・
機械翻訳ぽいのがどうにも
0193デフォルトの名無しさん
2008/02/05(火) 23:08:32何が古いんだ?具体的にどうぞ。
0194デフォルトの名無しさん
2008/02/05(火) 23:10:18>>192
俺がMSDN渡り歩けるようになったのはプログラミング歴5年目くらいです
非常に遅いな
0195デフォルトの名無しさん
2008/02/05(火) 23:10:320196デフォルトの名無しさん
2008/02/05(火) 23:12:17基本的にMSDNはリファレンス。辞書。
分からないときに引くものであって、教科書じゃない。
MSDN2になって翻訳は随分まともになったと思うが。
0197デフォルトの名無しさん
2008/02/05(火) 23:13:07@ITは正しい選択
0198デフォルトの名無しさん
2008/02/05(火) 23:13:540199デフォルトの名無しさん
2008/02/05(火) 23:14:040200デフォルトの名無しさん
2008/02/05(火) 23:17:310201デフォルトの名無しさん
2008/02/05(火) 23:18:130202デフォルトの名無しさん
2008/02/05(火) 23:19:460203デフォルトの名無しさん
2008/02/05(火) 23:20:180204デフォルトの名無しさん
2008/02/05(火) 23:24:270205デフォルトの名無しさん
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[]に型を変えただけだと思っているのですが、何が違うのでしょうか。
0206デフォルトの名無しさん
2008/02/05(火) 23:58:49int[]の[,]なんだから逆
int[,][]
0207デフォルトの名無しさん
2008/02/06(水) 00:00:10配列初期化子ってわかる?
0208デフォルトの名無しさん
2008/02/06(水) 00:01:33お前は分かってるのかよ。わかってるなら書け。
0209デフォルトの名無しさん
2008/02/06(水) 00:01:51そんな大げさな間違いじゃない
0210デフォルトの名無しさん
2008/02/06(水) 00:03:03ほんとだ…
ありがとうございます。
0211デフォルトの名無しさん
2008/02/06(水) 00:21:43いろんなプラットフォームありますよ。
x86, x64, IA-64
.NET Compact Framewrok
.NET Micro Framework
どれもWindows上というのはご愛敬w。
後は申し訳程度にSSCLIがFreeBSD対応だった気がする。
0212デフォルトの名無しさん
2008/02/06(水) 00:23:00MSも支援してるし
0213デフォルトの名無しさん
2008/02/06(水) 00:25:520214デフォルトの名無しさん
2008/02/06(水) 00:26:23メンバ変数って言いたくなる
0215デフォルトの名無しさん
2008/02/06(水) 00:46:59「あらゆるWindows」ってなにがあるの?
0216デフォルトの名無しさん
2008/02/06(水) 00:48:400217デフォルトの名無しさん
2008/02/06(水) 00:49:29だから.NETなくて良いって条件さえあればVistaは知らないけどいけるかな
0218デフォルトの名無しさん
2008/02/06(水) 00:49:500219デフォルトの名無しさん
2008/02/06(水) 00:50:300220デフォルトの名無しさん
2008/02/06(水) 01:13:060221デフォルトの名無しさん
2008/02/06(水) 01:14:330222デフォルトの名無しさん
2008/02/06(水) 01:24:51{
いろいろ処理
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文字程度なら前者のがいいのかなぁと考えてます
0223デフォルトの名無しさん
2008/02/06(水) 01:26:39後者でいいよ、むしろなんで前者選ぼうと思ったの?
0224デフォルトの名無しさん
2008/02/06(水) 01:27:31/ ―\ ┏┛
/ノ (●)\ ・
. | (●) ⌒)\
. | (__ノ ̄ |
\ /
\ _ノ
/´ `\
| |
| |
0226デフォルトの名無しさん
2008/02/06(水) 01:29:080227222
2008/02/06(水) 01:31:120228デフォルトの名無しさん
2008/02/06(水) 01:31:220229222
2008/02/06(水) 01:36:42値を設定されたstring型です
0230デフォルトの名無しさん
2008/02/06(水) 01:43:15なんかやばいかどうかは使いどころ
たとえば,参照渡しだと副作用完了点が関数内部まで拡大する可能性がある.
2*n*val_func(n) ≠2*n*ref_func(n)
かもしれない
0231デフォルトの名無しさん
2008/02/06(水) 01:48:55static 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は,呼び出し元でコピーした変数を値渡しして,戻ってきたら本物に上書き」みたいなことやってたみたい.
0232222
2008/02/06(水) 01:53:51>>230
それだと非常にやばいです、それとあまり差がないんですか、ありがとうございます
どの道わからなければ安全そうな値渡しにしようと思ってたのでこれでいってみます
ありがとうございました
0233デフォルトの名無しさん
2008/02/06(水) 02:05:190234デフォルトの名無しさん
2008/02/06(水) 02:07:22値型は値渡し
0235デフォルトの名無しさん
2008/02/06(水) 02:07:530236デフォルトの名無しさん
2008/02/06(水) 02:09:550237デフォルトの名無しさん
2008/02/06(水) 07:28:13stringの代入はコピーではなくポインタを代入してるだけ
0238デフォルトの名無しさん
2008/02/06(水) 07:40:12stringを渡すときrefつけるのとつけないので結果が変わる場合があるのはわかってる?
0239デフォルトの名無しさん
2008/02/06(水) 08:23:49参照型を値で渡すのと参照渡しは違うよ。
揚げ足取りじゃなくて全然違う。
0240デフォルトの名無しさん
2008/02/06(水) 09:26:560241デフォルトの名無しさん
2008/02/06(水) 09:59:580242デフォルトの名無しさん
2008/02/06(水) 10:34:020243デフォルトの名無しさん
2008/02/06(水) 11:03:23呼び出し元で作成したインスタンスを操作するなら、インスタンスの参照を渡せばいいから、refはいらない。
引数をメソッド内で変更したい場合、Stringみたいに操作する度に新しいインスタンスが生成されるタイプのクラスは前者。StringBuilderみたいに新たなインスタンスを生成せずに操作できるタイプのは後者。
0244デフォルトの名無しさん
2008/02/06(水) 11:16:06徹夜明けだからもう寝るわ。
0245デフォルトの名無しさん
2008/02/06(水) 14:51:23using 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
0246デフォルトの名無しさん
2008/02/06(水) 15:00:130247デフォルトの名無しさん
2008/02/06(水) 15:06:43まぁ,C風に覚えてもかまわないと思われ
0248デフォルトの名無しさん
2008/02/06(水) 15:16:11どう違うの?
出力結果を見ると違わないんだけど。
アホにも分かるように教えてくれ。
0249デフォルトの名無しさん
2008/02/06(水) 15:22:19>>246 ではないが NotChangeValue の後が違うかと。
0250デフォルトの名無しさん
2008/02/06(水) 15:29:56関数内で引数を書き換えなきゃ変わらんだろ
0251デフォルトの名無しさん
2008/02/06(水) 15:48:50ChangePtrとNotChangePtrに名前を変更して読んでちょうだい。
上記二つのメソッドは参照の参照を変更しようとしているから、
参照渡しをしないNotChangePtrの方は当然参照が変更されない
EditValueというメソッドは、参照型を値渡しで受け取り、それのインスタンスメソッドによって
インスタンス自身が変化する。
こういう認識でいいんだよね?
0252デフォルトの名無しさん
2008/02/06(水) 15:51:24意味分からん。
コードで書くとどういうこと?
■ このスレッドは過去ログ倉庫に格納されています