トップページ⇒tech
1001コメント276KB

ふらっと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:21
WPFはノウハウが全く違うから普及するのに10年ぐらいかかりそうだな
0154デフォルトの名無しさん2008/02/05(火) 22:26:21
Hashtableはよく使う。
0155デフォルトの名無しさん2008/02/05(火) 22:37:17
>>152
WPFのソフトウェアレンダリングコードはGDI+からだいぶ流用したらしい。
社内的にはとってかわってるのかもね。
0156デフォルトの名無しさん2008/02/05(火) 22:41:29
>>154
何か理由があって使ってるの?
0157デフォルトの名無しさん2008/02/05(火) 22:43:29
画像とハッシュテーブルがどうからむのかよくわからん(´・ω・`)
0158デフォルトの名無しさん2008/02/05(火) 22:43:35
Hashtableは名前がダサい
HashTableならいいのに
0159デフォルトの名無しさん2008/02/05(火) 22:45:03
C#で作ったプログラムは必ず使う側に.NETが入っている必要があるんでしょうか?
0160デフォルトの名無しさん2008/02/05(火) 22:45:28
いいえ
0161デフォルトの名無しさん2008/02/05(火) 22:47:13
.NETがいらないC#プログラムを作るにはどうしたらいいんでしょうか?
using System;とかありますがああゆうの全部.NETのクラスライブラリだとかなんですか?

そこら辺のことが書いてあるサイトとかないでしょうか
0162デフォルトの名無しさん2008/02/05(火) 22:49:27
>>161
無理
自分で1からコンパイラ作れば可能だけどさ
0163デフォルトの名無しさん2008/02/05(火) 22:49:50
>>156
マルチスレッド絡み、やや微妙な制約はあるけどね。
ほんとはjavaのConcurrentHashMapだったかみたいな
専用のがあるといいんだけど。
0164デフォルトの名無しさん2008/02/05(火) 22:50:17
>>161
mono
0165デフォルトの名無しさん2008/02/05(火) 22:51:17
>>162
コンパイラ作るだけじゃダメ
CLIを実装しないと

Silverlightは.NETじゃないといえば.NETじゃないかも
0166デフォルトの名無しさん2008/02/05(火) 22:53:24
>>165
C#をネイティブコードにするコンパイラがあればいいんだろ。
別にILしなければならない理由はない。
0167デフォルトの名無しさん2008/02/05(火) 22:54:58
ライブラリどうすんのよ…
0168デフォルトの名無しさん2008/02/05(火) 22:55:00
ネイティブにして、移植したライブラリを使用したとして、
その環境は .NET ではないと言えるのだろうか。
0169デフォルトの名無しさん2008/02/05(火) 22:55:01
すまんCLIはいらないみたい
でも言語仕様に記載されてるBCL(標準クラスライブラリ)は全部実装する必要がある
0170デフォルトの名無しさん2008/02/05(火) 22:55:37
c#暦1ヶ月です。
MSDNのページがさっぱり理解できないんですが、ある程度使えるようになったら読めてくるもんなのでしょうか?
0171デフォルトの名無しさん2008/02/05(火) 22:58:43
日本語版は理解できなくても無理はない
英語版読め
0172デフォルトの名無しさん2008/02/05(火) 22:59:32
つーかどこが分からんの?
0173デフォルトの名無しさん2008/02/05(火) 22:59:34
>>170
カンでさがしてサンプルコード張って動かしてみるのが正しい使いかた
理解するんじゃない感じるんだ
0174デフォルトの名無しさん2008/02/05(火) 22:59:42
クラスの解説を読めるようになるのは初心者脱出の第一歩だな
C#の言語仕様についての説明のページはVB.NETと違って初心者向けに書かれてないから結構難しい
0175デフォルトの名無しさん2008/02/05(火) 23:00:11
なんでC#ってネイティブコード吐けないんだろ
01761612008/02/05(火) 23:00:46
monoはうにx版.NETみたいな感覚でした、それは置いておいて無理ですか、把握しましたありがとう
0177デフォルトの名無しさん2008/02/05(火) 23:01:40
無理じゃないと言っているのだが。
0178デフォルトの名無しさん2008/02/05(火) 23:01:44
>>175
.NETを使うために作られた言語だから
0179デフォルトの名無しさん2008/02/05(火) 23:01:45
一応マルチプラットフォームを考えてるんだろうが、
だったら MS が色んなプラットフォームで処理系作りやがれと。
0180デフォルトの名無しさん2008/02/05(火) 23:02:45
吐けないんじゃない。吐かないだけ。
0181デフォルトの名無しさん2008/02/05(火) 23:03:27
馬鹿でかいBCLが障害
0182デフォルトの名無しさん2008/02/05(火) 23:03:51
>>175
フレームワーク使う言語としては正しいけどね・・・
0183デフォルトの名無しさん2008/02/05(火) 23:04:12
>>177
馬鹿?
0184デフォルトの名無しさん2008/02/05(火) 23:04:17
ネイティブコード吐ければもっと普及すると思う
0185デフォルトの名無しさん2008/02/05(火) 23:04:54
何でネイティブコードにこだわってるんだ?馬鹿なの?
0186デフォルトの名無しさん2008/02/05(火) 23:05:26
>>185
そこは突っ込みどころと違う
0187デフォルトの名無しさん2008/02/05(火) 23:06:24
>>185
バカはお前だろ
0188デフォルトの名無しさん2008/02/05(火) 23:06:35
そもそも.NETを普及させるための言語なわけだから
ネイティブコードを吐けるようにして普及を図ったところで意味がない
0189デフォルトの名無しさん2008/02/05(火) 23:07:04
CPU ごとに別のマシン語はかないといけないとなると
処理系作るの面倒だし・・・。
0190デフォルトの名無しさん2008/02/05(火) 23:07:04
もう.NETとかいう思想自体が古いけどな
0191デフォルトの名無しさん2008/02/05(火) 23:08:17
>>175
いきなりネイティブコード吐くとリフレクションやLCGと相性悪そうだがその辺考えてみた?
01921702008/02/05(火) 23:08:26
MSDNの読み方というか、歩き方みたいなのがいまいち分からんのです。
ググる時も、大抵先頭にくるMSDNはなるべく避けて、@ITとかのサイトに逃げてます・・・
機械翻訳ぽいのがどうにも
0193デフォルトの名無しさん2008/02/05(火) 23:08:32
>>190
何が古いんだ?具体的にどうぞ。
0194デフォルトの名無しさん2008/02/05(火) 23:10:18
新しいのが出てないのに古いとはなかなか言い辛いでしょう

>>192
俺がMSDN渡り歩けるようになったのはプログラミング歴5年目くらいです
非常に遅いな
0195デフォルトの名無しさん2008/02/05(火) 23:10:32
というかネイティブコードじゃないこととフレームワークは関係ないだろ。
0196デフォルトの名無しさん2008/02/05(火) 23:12:17
>>192
基本的にMSDNはリファレンス。辞書。
分からないときに引くものであって、教科書じゃない。
MSDN2になって翻訳は随分まともになったと思うが。
0197デフォルトの名無しさん2008/02/05(火) 23:13:07
>>192
@ITは正しい選択
0198デフォルトの名無しさん2008/02/05(火) 23:13:54
まあ変なVB系Tipsサイトよりは
0199デフォルトの名無しさん2008/02/05(火) 23:14:04
そしてブーデー川俣の記事読むのか
0200デフォルトの名無しさん2008/02/05(火) 23:17:31
.NET Tipsで十分場合が多い
0201デフォルトの名無しさん2008/02/05(火) 23:18:13
緑のバイク
0202デフォルトの名無しさん2008/02/05(火) 23:19:46
C#、でぐぐってでた1ページ目が日本語C#情報の9割だと思う俺
0203デフォルトの名無しさん2008/02/05(火) 23:20:18
むしろ9割9分くらいだろ
0204デフォルトの名無しさん2008/02/05(火) 23:24:27
何件表示するかの設定によるんじゃ
0205デフォルトの名無しさん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:49
>>205
int[]の[,]なんだから逆
int[,][]
0207デフォルトの名無しさん2008/02/06(水) 00:00:10
基本やり直し。

配列初期化子ってわかる?
0208デフォルトの名無しさん2008/02/06(水) 00:01:33
>>207
お前は分かってるのかよ。わかってるなら書け。
0209デフォルトの名無しさん2008/02/06(水) 00:01:51
>>207
そんな大げさな間違いじゃない
0210デフォルトの名無しさん2008/02/06(水) 00:03:03
>>206
ほんとだ…
ありがとうございます。
0211デフォルトの名無しさん2008/02/06(水) 00:21:43
>>179
いろんなプラットフォームありますよ。
x86, x64, IA-64
.NET Compact Framewrok
.NET Micro Framework
どれもWindows上というのはご愛敬w。

後は申し訳程度にSSCLIがFreeBSD対応だった気がする。
0212デフォルトの名無しさん2008/02/06(水) 00:23:00
Linuxはmonoがあるしなぁ
MSも支援してるし
0213デフォルトの名無しさん2008/02/06(水) 00:25:52
質問した当人ですがあらゆるWindows上で使えたらなぁとか思ってました
0214デフォルトの名無しさん2008/02/06(水) 00:26:23
フィールドって言葉がイマイチなじめない
メンバ変数って言いたくなる
0215デフォルトの名無しさん2008/02/06(水) 00:46:59
>>213
「あらゆるWindows」ってなにがあるの?
0216デフォルトの名無しさん2008/02/06(水) 00:48:40
Windows1.0
0217デフォルトの名無しさん2008/02/06(水) 00:49:29
ごめんなさい凡そ今いるWindowsユーザーです
だから.NETなくて良いって条件さえあればVistaは知らないけどいけるかな
0218デフォルトの名無しさん2008/02/06(水) 00:49:50
最後にとが抜けたorz
0219デフォルトの名無しさん2008/02/06(水) 00:50:30
.net入れればいいじゃん。
0220デフォルトの名無しさん2008/02/06(水) 01:13:06
今時.NETくらい誰でも入れてるだろ、とかいう認識の俺はだめなんだろうな
0221デフォルトの名無しさん2008/02/06(水) 01:14:33
.NET程度が使えない環境は切り捨てられるべき
0222デフォルトの名無しさん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文字程度なら前者のがいいのかなぁと考えてます
0223デフォルトの名無しさん2008/02/06(水) 01:26:39
やっとまともな質問だなw

後者でいいよ、むしろなんで前者選ぼうと思ったの?
0224デフォルトの名無しさん2008/02/06(水) 01:27:31
      ___    ━┓
    / ―\   ┏┛
  /ノ  (●)\  ・
. | (●)   ⌒)\
. |   (__ノ ̄  |
  \        /
    \     _ノ
    /´     `\
     |       |
     |       |
02252222008/02/06(水) 01:28:48
>>223
やっぱりそうですか

>>224
参照渡しって初めて知りまして、なんかやばいですか?
0226デフォルトの名無しさん2008/02/06(水) 01:29:08
5000plyも呼べたっけ?
02272222008/02/06(水) 01:31:12
実際はあんな形ではないんですが、想定してるのは5000回くらいまでです
0228デフォルトの名無しさん2008/02/06(水) 01:31:22
ああ末尾ね
02292222008/02/06(水) 01:36:42
すみません、fugaとhogehogeはいろいろ処理、と書かれてる部分で引数を元に
値を設定されたstring型です
0230デフォルトの名無しさん2008/02/06(水) 01:43:15
>>225
なんかやばいかどうかは使いどころ

たとえば,参照渡しだと副作用完了点が関数内部まで拡大する可能性がある.
 2*n*val_func(n) ≠2*n*ref_func(n)

かもしれない
0231デフォルトの名無しさん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は,呼び出し元でコピーした変数を値渡しして,戻ってきたら本物に上書き」みたいなことやってたみたい.
02322222008/02/06(水) 01:53:51
参照渡しじゃなくてポインタ使えればなぁ、と思うんだけどそうもいかないんですよね

>>230
それだと非常にやばいです、それとあまり差がないんですか、ありがとうございます
どの道わからなければ安全そうな値渡しにしようと思ってたのでこれでいってみます
ありがとうございました
0233デフォルトの名無しさん2008/02/06(水) 02:05:19
C#ってオブジェクト渡しは全部参照渡しみたいなもんじゃないの?
0234デフォルトの名無しさん2008/02/06(水) 02:07:22
参照型は参照渡し
値型は値渡し
0235デフォルトの名無しさん2008/02/06(水) 02:07:53
FileInfoとか渡したらどうなるんだろうね
0236デフォルトの名無しさん2008/02/06(水) 02:09:55
参照だろ
0237デフォルトの名無しさん2008/02/06(水) 07:28:13
stringは参照渡しだからrefなんざつけんでいい
stringの代入はコピーではなくポインタを代入してるだけ
0238デフォルトの名無しさん2008/02/06(水) 07:40:12
>>232
stringを渡すときrefつけるのとつけないので結果が変わる場合があるのはわかってる?
0239デフォルトの名無しさん2008/02/06(水) 08:23:49
>>234
参照型を値で渡すのと参照渡しは違うよ。
揚げ足取りじゃなくて全然違う。
0240デフォルトの名無しさん2008/02/06(水) 09:26:56
なぜ説明を書かないのだろう。
0241デフォルトの名無しさん2008/02/06(水) 09:59:58
揚げ足取りだから
0242デフォルトの名無しさん2008/02/06(水) 10:34:02
MSDNでrefで検索して最初に出て来るページにすっかり書いてあるだろJK
0243デフォルトの名無しさん2008/02/06(水) 11:03:23
メソッド内で生成された参照型のインスタンスへの参照を、呼び出し元で受け取るには、refなりoutなりを使って参照の参照を渡す必要がある。(returnは別として)
呼び出し元で作成したインスタンスを操作するなら、インスタンスの参照を渡せばいいから、refはいらない。

引数をメソッド内で変更したい場合、Stringみたいに操作する度に新しいインスタンスが生成されるタイプのクラスは前者。StringBuilderみたいに新たなインスタンスを生成せずに操作できるタイプのは後者。
0244デフォルトの名無しさん2008/02/06(水) 11:16:06
読み返してみるとくどくて意味不明だな。すまん。
徹夜明けだからもう寝るわ。
0245デフォルトの名無しさん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
0246デフォルトの名無しさん2008/02/06(水) 15:00:13
違うだろ
0247デフォルトの名無しさん2008/02/06(水) 15:06:43
参照型の参照渡しはポインタtoポインタ(**object)だな
まぁ,C風に覚えてもかまわないと思われ
0248デフォルトの名無しさん2008/02/06(水) 15:16:11
>>246
どう違うの?
出力結果を見ると違わないんだけど。
アホにも分かるように教えてくれ。
0249デフォルトの名無しさん2008/02/06(水) 15:22:19
>>248
>>246 ではないが NotChangeValue の後が違うかと。
0250デフォルトの名無しさん2008/02/06(水) 15:29:56
ん?stringもref stringも
関数内で引数を書き換えなきゃ変わらんだろ
0251デフォルトの名無しさん2008/02/06(水) 15:48:50
あーそうか、ChangeValueとかNotChangeValueとかいう関数名が分かってないようにとられた原因か。
ChangePtrとNotChangePtrに名前を変更して読んでちょうだい。

上記二つのメソッドは参照の参照を変更しようとしているから、
参照渡しをしないNotChangePtrの方は当然参照が変更されない

EditValueというメソッドは、参照型を値渡しで受け取り、それのインスタンスメソッドによって
インスタンス自身が変化する。

こういう認識でいいんだよね?
0252デフォルトの名無しさん2008/02/06(水) 15:51:24
>>250
意味分からん。
コードで書くとどういうこと?

■ このスレッドは過去ログ倉庫に格納されています