ふらっとC#,C♯,C#(初心者用) Part31
1 :
デフォルトの名無しさん :
2008/09/29(月) 12:39:47 このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part30
http://pc11.2ch.net/test/read.cgi/tech/1219220127/
2 :
デフォルトの名無しさん :2008/09/29(月) 12:40:21
3 :
デフォルトの名無しさん :2008/09/29(月) 12:40:49
(前スレ続き) ってゲームのセーブデータみたいな移動・コピー不可属性のことか? あれは自分で好きにプログラム組めないからできる話。
スレタイの「ふらっと」ってどういう意味なんでしょう(?_?)
>>998 そこまで規制する必要ってのも無いとは思うけどなぁ。
機密文章の持ち出しを禁止するため?
簡単に破られても良いなら、ファイルパスがキーになってファイルの暗号化を解くとかその程度で良いんじゃないかな?
それにしても、NTFSにダビング10とかコピーワンスとかあったらいやだなぁ
保護されたファイルを開くと OSがそのプログラムを監視して そのファイルに類似したデータを作成させないようにしたりして
すごく息苦しくていやになるなぁ。
あ
>>4 >>6 そうです、フォルダ自身やファイル自身に属性があれば制限が可能になる
のだとは思うのですが、少なくともWindows系ではそういう制限はやはり
存在しない、ということですよね?
あればそれをそのフォルダやファイルの作成者が設定可能になっていれば
できると思うのですが、今後そういうものは追加される可能性はないでしょうか?
いやだから、読めることができるデータがあって、どこかに書き込みできる権限があれば、 コピー不可だろうがいくつでもコピーできちゃうでしょ、ここはプログラム板だよ? ファイラーが提供されたものしかない世界じゃないと無理。
> あればそれをそのフォルダやファイルの作成者が設定可能になっていれば > できると思うのですが、今後そういうものは追加される可能性はないでしょうか? 誰かエスパーのひと解読頼む
>>9 >どこかに書き込みできる権限があれば、コピー不可だろうが
>いくつでもコピーできちゃうでしょ
だから、そのデータ(=フォルダ、ファイル)に色がついていて、
色がナンであるかで、書き込みを制限する属性があれば、という
ことですよ。
>>10 その属性を、それらデータ(=フォルダ、ファイル)の作成者が、
OSのサービス機能(プロパティ->セキュリティタブ、など)を使って
設定すればそれが有効になる、というような仕組みということです。
>>11 その属性を律儀に守らないと無理だろ。
プログラム書いたことあるのか?
>>11 続き
だから、例えば、「複製作成」の許可と言った感じで、「削除」の許可
の次あたりに追加してあれば、それをチェックすることで、そのフォルダや
ファイルに色がつくわけで、
そのデータを「書き込み」する時点で、それを操作を制限する、という
仕組みということです。これが可能になれば、複製してほしくないフォルダや
ファイルというものを作ることが可能になるわけです。
>>12 まあ、ですから、「書き込み」という操作にも影響が及ぶような
仕組みでないといけないわけではありますですが・・・。
いや、だからさ。 Explorerでのコピー操作ならそれでいいかもしれないよ? でもさ、プログラム上、ファイルデータは単なるバイト配列として扱われるわけ。 で、単なるバイト配列を適当に作ったファイルに書き込むのを制限しようがないよね?
>>16 確かに、どこまでのレベルで制限するのか、という問題はありますね。
ただ、ファイルシステム上の操作と言われる操作機能では制限される、
ということにしておけば、いわゆる 「ファイラ・ソフト」 レベルでは簡単
にはコピーされないで済む、という感じにではできないでしょうか。
ファイラを、そうやって原初レベルのI/Oの操作から作成されてしまえば
確かにできてはしまうのでしょうが・・・。
その属性のファイルを読み込んだプログラムはファイルの作成 や書き込みが失敗するように またほかのプログラムとの通信までできないようにOS側で徹底 的に管理するのか そこまでやったとしても抜け道は存在するような気がするが
>>17 続き
少なくとも、Win32APIや.NETFramework上のファイルシステム関係のメソッド
からは制限できる、といった感じで。それをやっても、制限としては価値は
ないでしょうか。
>>18 フォルダやファイルのデータの中身そのもの仕掛けを作り、
それを所定のAPIやメソッドのコピー操作で書き込むときに
引っ掛ける、という感じまででいいかとは思っています。
一切ないね バックアップソフト作る会社が迷惑蒙るだけだろ
なんにせよC#でやるべきじゃないのは確か
>>21-22 わかりました。アドバイスくださり、
ありがとうございました。
新しいFSを開発するスレはここですか?
いや、つまんないから。
>>993 拡張子を.scrにしたらコピーできなくなるよ
27 :
デフォルトの名無しさん :2008/09/29(月) 18:14:40
web上からデータを取得するために以下の命令文を記述しました HttpWebResponse res = (HttpWebResponse)req.GetResponse(); さらに、webのURLが間違えていたり、たまたまサーバーがダウンしているときに 備え、try〜catchの例外処理を施そう試み try { HttpWebResponse res = (HttpWebResponse)req.GetResponse(); } catch(Exception e) { ・・・・・ } Stream st = res.GetResponseStream(); StreamReader sr = new StreamReader(st, enc); と記述し直しました。 ところがこの状態でコンパイルを試みると、Stream st = res.GetResponseStream();で 「エラー 1 名前 'res' は現在のコンテキスト内に存在しません。」 というエラーが帰ってきました。try〜catchの例外処理に何か間違いでもあったのでしょうか?
変数のスコープを考えろ。 それから、直接は関係ないがcatch(Exception)はやめたほうがいい。
そりゃスコープから外れたから。 HttpWebResponse res; ここだけ外に出してごらん。
30 :
27 :2008/09/29(月) 18:28:53
try文の中身を HttpWebResponse res; try { res = (HttpWebResponse)req.GetResponse(); } と変更してみましたが、今度は同じく Stream st = res.GetResponseStream();の部分で 「エラー 1 未割り当てのローカル変数 'res' が使用されました。」 という違うエラーが帰ってくるようになりましたorz・・・ その後ものは試しとtry文の前の命令を HttpWebResponse res = null; と書き直してみたところエラーも発生することなくコンパイルが通りました。 これでよかったのでしょうか?
31 :
27 :2008/09/29(月) 18:29:37
>>28 > それから、直接は関係ないがcatch(Exception)はやめたほうがいい。
そうするよう参考書に書かれていたんですが(´・ω・`)・・・
初心者向けの本なんだろうからしょうがない 本当はMSDNに書いてある形でキャッチするようにしないと
tryで例外出してcatch後にもresを使ってるだろ。 それで未初期化のresを使う可能性があるという警告だよ。 tryブロックに入れるか、catchしたらres使う行に行かないようにしなくちゃ。
34 :
27 :2008/09/29(月) 19:04:09
>>32 > 初心者向けの本なんだろうからしょうがない
> 本当はMSDNに書いてある形でキャッチするようにしないと
(WebException e)で受け取り、e.Messageあたりでエラーを表示するようにすればいいでしょうか?
>>33 なるほどresは全てtry文の中に収めたほうが堅牢性が増しましたか。
引数に渡されたStreamのデータのフォーマットが正しくないときにはどの例外を投げたらいい? 自作?
自作しても良いがArgumentExceptionでいいんじゃね
37 :
27 :2008/09/29(月) 19:24:30
>>35 自作です。
よく考えたらStreamで受け取ったデータを見て、フォーマットが正しいか否かで
正しくデータを受信できたかどうか判定するのがいいかもしれません。
GetResponse();
の例外ってあまり使う機会は無いかも知れませんね。
> GetResponse(); > の例外ってあまり使う機会は無いかも知れませんね。 や、普通は503返されたりとかしたときの対応が必要だと思うが
問題は例外キャッチしたあとどうしようとしてるかだ
40 :
デフォルトの名無しさん :2008/09/29(月) 21:08:34
質問です。 生徒、Aさん Bさん Cさん.... がいます。 それぞれの人に、国語や数学のテストの成績があったとして、 (名前,科目,点数) というようなデータを、それぞれの人がもつ変数に入れていくプログラムを作りたいと考えています。 ここで、(名前,科目,点数)のデータはイベントでランダムに送られてきます。 Aさん、Bさん、... は、生徒クラスを作成し、1人1インスタンスでnewしたとして、 問題1)Aさん、Bさん、... 別のインスタンスを作成する方法がわからない(それぞれにユニークなインスタンス名を与える方法?) 問題2)問題1が解決したとして、ランダムに送られてきたデータを、それぞれのクラスに振り分ける方法がわからない。 というよりも、なんかもっとスマートな解決策があると思うのですが、、、
なんかスマートじゃない方法なら、コードが書けるような口ぶりだな。
普通は生徒クラスに名前プロパティ用意するんじゃね? つかクラスに振り分けるって何よ
>>40 「インスタンス名」とは変数名のことだと思うが、そんなものはユニークである必要どころか
名前をつける必要すらない。(データベースのレコードに名前なんて必要ないように)
単純化していえばデータ構造は「生徒クラス」のリストでよく、
要は名前なら名前からそれに一致する「生徒クラス」のインスタンスを
検索できる機能を考えればそれで済む。
それができれば問題2も自動的に解決するでしょ。
>>40 class クラス:List<生徒> // 生徒Collectionでもおk
{ String 名前; int Get平均点(科目名 科目);}みたいなクラスにAddしていけばいいんじゃない?
Dictionary<string, Student> dic = new Dictionary<string, Student>(); Data[] data = GetData(); foreach(Data d in data) { if(dic.ContainsKey(d.Name) == false) { dic.Add(d.Name, new Student(d.Name, d.Subject, d.Point)); } else { dic[d.Name].AddResult(d.Subject, d.Point); } } こんなんかね
46 :
デフォルトの名無しさん :2008/09/29(月) 21:29:46
47 :
デフォルトの名無しさん :2008/09/29(月) 21:32:37
素早い返信ありがとうございます。
>>41 さん
すいませんでした。
>>42 さん
プロパティに名前を入れておき、送られたデータに対して名前が一致するかしらべるメソッドを用意して、一致すれば科目データを入れるというやり方の場合、
すべてのインスタンスにデータを送る方法がわかりません。そして、そういう処理は効率が悪いと思います。
変な説明で申し訳ないです。
>>43 さん
「生徒クラス」のリスト、という意味が分かりません。クラスのリスト?クラスをリストにする?っていう意味が・・・
リストの項目にクラスのアドレスを入れておいて呼び出す?
>>45 そのStudentのコンストラクタ引数は不自然とおもふw
dic.Add(d.Name, new Student(d.Name, new[] { new SubjectScore(d.Subject, d.Point) }); こんな感じか
50 :
40 :2008/09/29(月) 21:51:08
具体的な例文まで示していただいて頭が上がりません。
>>44 さん
class クラス:List<生徒>
の意味が分かりません。すいません勉強不足です。
Listを継承してるというのは分かるんですが、<生徒>という部分がどういう意味なのか、、、
>>45 さん
Dictionaryの次の< > でくくった部分の意味が44さんと同じくどういう意味を示すのか分かりません。
Data[] data = GetData(); の意味が分かりません。要素数を指定しない場合の配列は後で要素数をしていしないといけないのでは?
51 :
デフォルトの名無しさん :2008/09/29(月) 21:51:59
オウム返しに聞くな 馬鹿丸出しじゃないか
ちなみにList<T>を継承するのは非推奨だからね
>>51 まあしかし、そういうスレでしょ。
>>47 リストが分からないならとりあえず配列だと思えばいいよ。
「生徒クラス」の(インスタンスの)配列。
その配列の中から、名前なら名前を使って目的の「生徒クラス」のインスタンスを
検索する方法を考えればいい。
他の人が書いているようにList<T>とかDictionary<T>を使った方が簡単なんだけど、
いきなりそれらのクラスを理解しろって言っても無理っぽいからまずは配列で
やってみたら?
ごめんDictionary<T>ってそんなのないなw
名前だけをキーにしてdicに入れたら、複数の教科に対応できないじゃん。 いいの?
>>57 複数の強化に対応できない、ってのは意味不明だけど、
>>40 の話はとりあえず名前のみで検索できれば必要十分に聞こえるけど。
59 :
40 :2008/09/29(月) 22:16:46
みなさん本当にありがとうございます。 馬鹿丸出しで申し訳ないですが、みなさんのアドバイスが充分に理解できませんでした。 コメントや参照サイト先をじっくりと読んでみます。 解決の方法は示して頂きましたので、あとは自分で理解してみます。 こんな初心者の為に貴重な時間を裂いていただき本当にありがとうございました。 では
>>57 それぞれの生徒が教科と点数のセットのコレクションを持てばいい
>>58 Aさんの国語の成績、数学の成績ってデータが入ってきたら、「A」だけのキーでdicに
入れてたら、片方の成績しか入らないじゃん。
RDB意識すると、こんな感じかね * 1 1 * Student ------ ExamResult ------ Exam 生徒 試験結果 試験 class Student { public string Name; // その他、付加情報 (e.g. 学籍番号, etc.) public List<ExamResult> ExamResults; } class Exam { public string Name; // その他、付加情報 (e.g. 実施日時, etc.) public List<ExamResult> Results; } class ExamResult { public Exam Subject; public Student Student; public int Score; } List<Student> students; var stu1 = students.Single(s => s.Name == "鈴木"); // 生徒の検索 stu1.ExamResults.Single(r => r.Subject.Name == "国語" && r.Subject.Date == new DateTime(2008, 7, 10)).Score; // 成績の参照 stu1.ExamResults.Add(new ExamResult { Subject = exam1, Score = 80 }); // 成績情報の追加
>>61 いや意味わからんよ。
だからDictionary使うのであれば、Valueは「生徒(の成績)クラス」のインスタンスなんだよ?
staticなクラスとかって、どういう時に使うものなんでしょうか? 無理して使う位なら普通のクラスにしてインスタンス生成した方が いいんでしょうか? インスタンス生成しなくて良いという事位しか分かりません…。
大雑把に言うと状態を持たない(フィールドがない)ことを保証できるクラスならstatic classにできるな Mathとかね まあ慣れん間はわざわざ作ることもないか
なるほど。「フィールドがない」というパターンで考えると 分かり易いですね。参考になりました。有り難う御座いました。
フィールド持っててもOO的に複数のクラスと関連があるけど 決してそのクラスがほかのクラスの参照を持つわけではなかったりした時 staticクラスにする方がいいの?
フィールドが全部static readonlyまたはconstでない限りはやめたほうがいい
70 :
69 :2008/09/30(火) 13:38:53
static readonlyっていうのはおかしいな 同じメソッドを同じ引数で呼び出したらいつも同じ結果が得られるならstaticでおk
web上で指定した名前のhtmlファイルやtextファイルが存在するかどうかをチェックするには
どういうプログラムを組めばいいでしょうか?
req = (HttpWebRequest)WebRequest.Create("
http://hoge.com/ahya.txt ");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
if ("
http://hoge.com/ahya.txt ".Equals(res.ResponseUri))
{
Console.Writeline("指定されたtxtファイルはありましたよ( ´∀`)b");
}
のようなプログラムを組めばよろしいでしょうか?
それとももっと適切なプログラムがありますか?
何をもって存在したのかという定義は? res.StatusCode が200ならというだけじゃダメなのかな。
200つーか、 HttpStatusCode.OKか
リダイレクト考えると大変かもね FileNotFoundのときにリダイレクトで200 OKな404.html返してきたり
>>71 それだと HTTP GET してしまうので
req.Method = "HEAD"; するとか
76 :
71 :2008/09/30(火) 16:54:42
>>72-74 そうなんですよ。リダイレクトするサーバーだと指定したファイルが存在しない
違うページに飛ばされた上で200:OKが返されたりするんで判定に使うには
今一歩信頼性が無いんです。
いやだから定義は? URL完全一致なの? 別の場所にリダイレクトするけど同じファイル名だったりするのはどうなの?
とは言えどうしようもないんじゃないかなHTTPの仕様上 リダイレクトされたら存在しないとするってんなら多少は簡単になるが 存在しなくても200 OKを返すって挙動も可能なんだし(負荷が大きくなるから普通はしないだろうが)
79 :
71 :2008/09/30(火) 17:08:26
>>77 はい、指定した場所にURLが一致するファイルが存在しなければ
そのURLは無効というふうに判断したいです。
リダイレクトされた場合は存在しないと判断したいです。
HttpWebRequestのメンバにリダイレクトを処理するかどうかのプロパティあったろ。 それ無効にしといて、200帰るかどうかみりゃいいんじゃないのか。
>リダイレクトを処理するかどうかのプロパティ そんなのあったのか、知らなかった
ListViewやStringなど標準ライブラリのソースを見る方法はないですか?
ちょっとは検索しろ
85 :
デフォルトの名無しさん :2008/09/30(火) 19:08:13
MSのを見るのは会社の規模&審査とすさまじい金額がかかったはずなので、MONOのソースでも見たら?
>>85 今は閲覧目的に限り無償一般公開されてるんだよ
へー
独学でC#はじめたんですがsetとgetの使い方がよくわかりません。 よろしければ御教授ください、お願いします。
それを言うなら御教示だ
91 :
89 :2008/09/30(火) 20:30:45
>>89 プロパティのことか?
強いて言うなら、変数っぽいメソッドを作るための仕様という感じかな?
C#の入門サイトで理解できなかったら、いっそうのこと他の言語のサイトも見てみると理解できることもあるかもしれない。
たとえばTextBoxでTextプロパティがあるけど、これをプロパティを使わないでやるとしたら
textbox1.SetText("hogera");
String hoge = textbox1.GetText();と書かなければならない。
もちろん
class TextBox
{
public String Text;
}
として公開してしまえばtextbox1.Text = "hogera";で書き込み読み込みができるが、
SetText(String value)
{ // ReadOnlyの時は変更禁止 (こういう処理を副作用と言う)
if (!this.ReadOnly) this.str = value;
}
というようなことはできなくなる。これをできるようにするためのものがプロパティ
public String str; // Textの実体。こんなダサイ名前をつけるのはよろしくないけど
public String Text{
get { return this.str;}
set { if (!this.ReadOnly) this.str = value;}
}
これでtextbox1.Text = "hoge"とかができるようになる。
また、副作用のないプロパティは(今後、副作用を設定するかもしれないので必要)
public String Text { get; set;}と書くことができる
93 :
89 :2008/09/30(火) 20:42:27
>>92 すごく丁寧な説明ありがとうございます。なんとか理解できました。
94 :
71 :2008/09/30(火) 20:43:19
>>81 どうもです。
req.AllowAutoRedirect = false;
でオートリダイレクトを拒否することができるようになりました( ´∀`)ノシ
>>92 それだったらメソッドで書けばいいだろ
なんでプロパティ使うんだよ
プロパティにする利点は使う側にある
String と string ってどうちがうの?
まったく同じであることが言語仕様に明記されています
ごめんなさい
質問です。 クリップボードからテキストボックスに文字を貼りつけています。 単に貼りつけると、テキストボックスで文字入力できなくなるので、 ・クリップボードの文字をメモリーする。 ・クリップボードの文字がメモリーと異なるときは、貼りつける。 ・クリップボードの文字がメモリーとおなじときは、なにもしない。 という処理を考えました。 clipboardwatchtimer.Interval = 500; clipboardwatchtimer.Enabled = true; private void clipboardwatchtimer_Tick(object sender, EventArgs e){ if (Clipboard.ContainsText()) { string clipboardTextBefore = (Clipboard.GetText()); System.Threading.Thread.Sleep(200); string clipboardTextAfter = (Clipboard.GetText()); if (clipboardTextAfter != clipboardTextBefore) {textBox1.Text = (Clipboard.GetText());} }} これで、4回は動くのですが、そのあとは取得できなくなってしまいます。 アドバイスお願いします。
すみませんが、何をおっしゃっているのか理解できません
string clipboardTextBefore = ""; private void clipboardwatchtimer_Tick(object sender, EventArgs e){ if (Clipboard.ContainsText()) { string clipboardTextAfter = (Clipboard.GetText()); if (clipboardTextAfter != clipboardTextBefore) {textBox1.Text = clipboardTextAfter; clipboardTextBefore = clipboardTextAfter} }} こうじゃないかな タイマーの中でThread.Sleepとかやらん方がいいと思うよ
>>101 何のための機構かよくわからないし
500msごとに200msストップするようなアプリケーションは糞過ぎて使い物にならないと思うんだが
>単に貼りつけると、テキストボックスで文字入力できなくなるので、
では聞くけど、今の状況ならまともに文字入力できるのですか?
何でも良いから適当に文字を入力してみてください。
>clipboardwatchtimer.Inter(ry
・500ms ごとに200msほどユーザの操作を無視する
・その200msの間にクリップボードがたまたま変更されていたら
_・textbox1.Textに入力した文字を削除してクリップボードの内容に置換する
何がしたいのかわからない。
ひょっとして
String clipboradTextBefore = "";
private void clipb(ry_Tick(Object Sender,EventArgs e)
{
if (Clipboard.ContainsText())
{
String clipboradTextNow = Clipboard.GetText();
if (clipboradTextNow != clipboradTextBefore)
{
textBox1.SelectedText = clipboradTextNow;
clipboradTextBefore = clipboradTextNow;
}}}} //行が長すぎるってしかられた
>>104 ありがとうございました。
SelectedTextだと追記なんですね!
ちなみに、いまの状況でいちおう文字入力は試してうまくいってました。
>>101 だからお前は基礎から学べと言ってるだろ
2度と来るな
初心者を煽る荒らしはほんと二度と来ないで欲しいんだけど
初心者を甘やかす荒らしはほんと二度と来ないで欲しいんだけど
下らんレスの応酬はそれこそ荒らし行為そのものだから二人とも止めとけって。 しかし、初心者っていっても程度問題だと俺も思うけどな。 確かに初心者って真面目に学習してても分からないところ出てきたりするから そういうのを質問するスレ(つまりここ)があっていいと思うんだが、 最初から地道に学習することを放棄してる奴のケツを拭いてやるなんて作業は 普通の人間はお断りだろ。 それ以前に「日本語の文章表現の初心者」まで救ってやる必要なんてさらさらないと思う。
お前の意見を取り入れる気はさらさら無いがな。
制限時間付きオセロを作りたいのですが、どの様にすれば良いのでしょうか?
オセロのアルゴリズムとGUIを作ればいい
俺もオセロ作っているんだけど @どこに石をおけるかを調べる 置ける場所を保存 どこに置くか選ぶ 置いた場合どの石が裏返るから調べる 相手や自分の置いた石を盤面に反映する @ヘ それぞれどのクラスに記述すればいいかわからなくなる
>>119 オブジェクト指向な人々から見るといろいろ意見はあるんだろうけど、
あんまり気にせずまとめて作っちゃえばいいんでね?
121 :
117 :2008/10/01(水) 01:20:21
自分はほとんど知識がないのに今日の朝7時までに提出しろと言われたもので・・・ 死亡フラグですよね?
>>119 これ読めば?
コンピュータ麻雀のアルゴリズム―AIインターフェイスと思考ルーチンを作る (I/O BOOKS)
本すすめるならこっちだろ リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS) (単行本)
どこに置くかを決定するアルゴリズムは面倒そうだね。 簡単なのは、四隅、端、その他、って感じで順位づけをしておいて、 置けるときに置く、って感じかな。
>>121 俺昔作った奴あるけど人類よりはるかに強いから
お前が作ったことにして提出したら不正がばれるだろ
オセロは一枚返しの定跡があるから、まぁそのあたりで評価関数作れば簡単そうだが 終盤はきちんと全幅探索して読み切る
まったくわからんが俺も考えてみよう オセロ板クラス どこに石が置いてあるか 石を置いて石が置ける場所じゃなかったらエラーを返すとかやるクラス 入出力はインデクサとか使って置いたり置いてあるのを調べたりとかか? 相手CPUクラス 石の置いてある箇所からどこに置くのか決めて適切な位置に置く これが一番ムズそう 審判クラス 順番になったらイベントで通知してくれたり制限時間はかったり 先に謝っておこうなんていうかごめんなさい
夏休み最後の日まで宿題とっておいていいのは小学生までだろ
課題だったら、多少くそ重くても総当たりやっちゃえばいいんじゃなかろうか。
総当り(笑) アホだろ
もうランダムで置く場所決めればいいじゃん
136 :
119 :2008/10/01(水) 01:44:23
>>129 大体そんな感じだろうと思って作ってみたら
CPUクラスで盤面情報を取得したり、どこに置くか?置けるのか?
などが、オセロクラスと機能が微妙にかぶるんですよね
それでこんがらがっちょになるわけで。
よくあるオブジェクト指向の考え方の例で
人間クラス>学生クラス。名簿クラス。なんかがあるけど
こういう考えで作ろうと思うと、非常に難しい
どこに置けるかなどは、オセロ板が考えるんじゃなくて人間が考えるわけで
盤面の情報も頭の中にあるわけで、じゃあ、盤面は石の状態だけ保存させておいたほうがいいのか
とか考えて、でも、CPUクラスごとにルールクラスを保持させるのも変な感じだし
とまあ、こんな感じで途方にくれてます
>>136 とりあえずCPUは後回しにして
人間二人が交互に打てるところまで作れば?
>>130 >>131 どうも
>>136 どこに置けるか?とかは
オセロ盤クラスの置いてpublicにするかもわからんなー
そうすればCPU側やUI側(マウスが置けないマスに入ったら×マークを表示するとか)とかからも使えるような気がする
IBMとマイクロソフトが作った昆虫のゲームの名前なんでしたっけ? dllで昆虫を作ってプログラマーが競い合うものなんだけど
上の方見て、何となくClipboardWatcherというクラスを作った イベントはまだ実装してない(Trace.WriteLineしてるだけ)けど、 コメントほとんどなしの状態で240行程度
141 :
119 :2008/10/01(水) 04:17:27
相手と自分を同じクラスで処理してたから混乱していたのかも Playerという基底クラスを作って 先手、後手の派生クラスを作って処理してみます
同じ自作コントロールを複数生成したいが、 他のフォームで使う予定はまったく無い、 といった場合、ユーザーコントロールを作るより、 フォームのファイル内に自作コントロール用のクラスを作ったほうがいいですかね?
>>141 質問ついでに答えてみる。
OOPは、登場人物(モノも含む)を全て洗い出すことから始めてみるといい。
>>139 いじったことないけど Terrarium?
>よくあるオブジェクト指向の考え方の例で >人間クラス>学生クラス。名簿クラス。なんかがあるけど ねーよ。 いや例はよくあるけど。
hoge.comって実在するんだなw
>>140 それってコントロール派生?
私的にNativewindow使用が良いなー
try{ res = (System.Net.HttpWebResponse)req.GetResponse(); } catch(WebException e) { } でプロトコルエラー416:RequestedRangeNotSatisfiableが返されました。 この例外をcatchで受け、416が返ってきたときに特定の処理をさせたいと思っています。 catchの中身はどう記述すればよろしいでしょうか? catch(WebException e) { if (e.Status == HttpStatusCode.RequestedRangeNotSatisfiable) ・・・・・ } と記述したところ、e.StatusとHttpStatusCode.RequestedRangeNotSatisfiableは 型が違うと言われてコンパイルエラーになってしまいました・・・
WebException.Status の解説ぐらい読めよ
>>148 またかよ。少しはぐぐって自分で調べろ。
「WebException プロトコルエラー」 とかでぐぐっても
解決のヒントになるページがいくつも見つかるだろ。
全然使ったこと無いけどMSDNのサイトをちょっと回ってみた結果、 if (WebException.Status == WebExceptionStatus.ProtocolError) { if (((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable) { とかやるんでないの? } } 聞くより検索して、実際にやってみたほうがはやいぜ。
>>147 System.Windows.Forms.Timerあたりのソースを参考に、
ComponentのサブクラスでNativeWindowを使用
一応、lock, PostMessageもしてるから、多分マルチスレッドでも使える
>>149-151 ありがとうございますm(_ _)m
((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable
で通りました。Responseプロパティの中にさらにプロパティStatusCodeがある
とは思い至りませんでした(´・ω・`)
Dictionary<T>をforeach使わずに 要素の変更される処理を施すことは出来ますか?
はじめましてC#超初心者です
解説本を読む前に質問してます
class1.csってところを下記の様にしたんですけど
エラーになります
どうすればいいですか
Winsockで接続するテストです
何をどうしたらいいのかわかりません
よろしくお願いします
動くように書換えお願いします
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace winsock_tes
{
public class Class1
{string url = "
http://www.yahoo.co.jp/ ";
System.Net.WebClient wc = new System.Net.WebClient();
wc.Encoding = System.Text.Encoding.GetEncoding(51932);
string src = wc.DownloadString(url);
wc.Dispose();
}
}
Mainメソッドにつっこめばおk
どっから持ってきたコードなんだ。 まずはHelloWorldからやってみないか
160 :
155 :2008/10/01(水) 19:57:42
>>158 おまえがうざい
やっぱC#スレってカスばっかだな
Delphiにしとくわ
>>155 です
マルチじゃないですよ
他すれで聞いたらここを紹介されたので改めてこちらで聞きました
よろしく
>>159 氏ねよ粘着
>>154 Dictionary<T>なんてものはBCLに存在しません
>>154 数字の添え字もNext系の操作も出来ないから無理だろ
CやC++ならまだしも、string型が正式にサポートされたC#に いまだchar型が存在する理由ってなんでしょうか? CやC++に慣れ親しんだプログラマ用の救済措置ですか?
GetEnumeratorでIEnumerator取って自分で操作すればおk
>>165 パフォーマンスでしょ
文字列から一文字ずつ取り出すような処理を全部一文字のstringにしたら恐ろしいことになりそう
いやそれ以前に char は文字で string は文字列なんで違うものだろというか
>>167 C#ではcharもstringもみなクラス扱いされていますがそんなにパフォーマンスに
違いが出るものですか?
>>168 stringでも1文字だけ格納すれば実質的にcharと同じになると思うんですが。
そもそも値型と参照型では?
ならintも長さ1のint[]があれば必要ないねそうだね。
おいおい大丈夫か
>>171 なにw
ユーザー定義型ではない値型で実質プリミティブ型になる。
>>169 charはクラスじゃねーよカス
処理速度も倍違う
>stringでも1文字だけ格納すれば実質的にcharと同じになると思うんですが。
ならねーよバカ
スクリプト言語だと文字列と文字を同一視するのもあるみたいだよ
格納してるブツがそもそも違うだろ stringは参照位置だけどcharはユニコードだろ?
デュアルコアの時代に倍違うとかどうでもいいだろ
string だけあれば char がいらないって発想なら、 int[] だけあれば int もいらないな。
GCの負担にもなるから倍どころじゃないはず stringって内部的にはやっぱりcharの配列なんだよ fixed (char* p = str)でポインタ取れたりするw
ここまでstringbuilderなし
札束があれば札は要らないないってレベル
183 :
165 :2008/10/01(水) 21:40:11
釣りでした(^^)v
>>182 それは何か変だ。
札は束にしても額が変わるだけだけど。
char と string は点と線くらい違う。次元がそもそも違うというか。
>>165 救済措置っつーか、C/C++やってて、文字型のない言語に移っても、べつになんにも困らんだろ。
string=文字列 char=文字 これはなんでこうなるの?
VBにも文字単体あるだろ
C#.NET でWindowsアプリを書くときに、メソッドをフォームのソース (という言い方が正しいかどうか分かりませんが)に書くことも、 フォームではない別のクラスに書くこともできると思います。 ある画面内で完結する機能はフォームのソースに書くとか なるべくフォームのソースには書かないようにするとか 方針はいくつか考えられますが、 C#.NET ではどうするのが主流なのでしょうか? アドバイスよろしくお願いします。 ちなみに、Javaでコンソールアプリを書いたことはありますが その程度の経験しかありません。
フォームをコンソールだと思えばおのずと窓口なはず
>>178 私も486DXで十分だと思っていた時がありました
>>188 フォームとはイベントドリブンを処理するわけで条件反射みたいなもん
フォームに直接関係しない機能や重複した機能は別途クラスを用意する
>>188 愚問だね。
OOPというかクラスを使ったプログラミングが分かればそんな疑問は持たない。
そんなウダウダ疑問を抱くのは一通り理解してからにすべきで、
物事の順序が違うんじゃないのかな?
構造体です
>>188 主流といえるほど主流な方法はないんじゃないかな
フォームのボタンを押すことでクリップボードの文字列を取得する @ボタンが押された AFormクラスGUI-----処理するメソッドを呼び出し------>クリップボードを処理するクラス.GetText() BFormクラスGUI<-----------文字列を返す-----------クリップボードを処理するクラス CFormクラスGUI--------- 文字列を送る------------->テキストボックスに表示//Formクラス内で処理 クリップボードを処理するクラスを作ってしまえば、コンソールアプリにした場合も流用できる
窓口のお姉さんと、お姉さんが操作する端末みたいなもん
C#のフォームでMVCに挑戦するも、途中でめんどくさくなって結局イベントハンドラにロジック直書き。
DirectXならウィンドウとか単なる依り代
構造体の場合コンストラクタは1つだけしか無理ですか?
いいえ
と、思ったら1つも作れないのか・・・ データに値を入れるときが面倒だなぁ
引数なしのコンストラクタが作れないだけ 引数のあるコンストラクタはいくつでも作れる
>>155 です
メインメソッドに突っ込むってどういう意味ですか?
VC#2008を立ち上げて
ファイル→新しいプロジェクトを開くと
Windowsフォーム、クラスライブラリー、WPFアプリケーション、WPFブラウザ、コンソール、空のプロジェクトとあります
どこを開いてどうすればよいですか?
>>155 を動くように教えてください
205 :
188 :2008/10/02(木) 00:06:02
レスをくれた皆さんありがとうございました。 フォームに直接絡む機能以外は別のクラスに書く、という感じのようですね。
>>204 ネタ?
コンソールでプロジェクトを立ち上げると
static void Main(string[] args)
{
}
というのが自動で書かれているからその間に実行させたいものを書く
static void Main(string[] args)
{
Console.WriteLine("hoge");
}
>>155 です
よくわからないけど
下記のようなエラーでました
エラー 1 プログラム 'C:\Documents and Settings\don\Local Settings\Application Data\Temporary Projects\Project1\obj\Debug\Project1.exe' は、エントリ ポイントに適切な静的 'Main' メソッドを含んでいません Project1
>>206 さん
ありがと
今からやってみます
コンソールですね
>>203 引数は無理なのねーやっぱり
かといって、クラスで定義するといろいろ面倒だったり
例えばListViewのような構造をもった自作クラスを作った場合
listView1.items=listView2.items
なんてしてもsubitemsまではコピーされなかったり、
また、参照コピーになるから、これは参照しているだけだって意識しながら
やらないとどこかで値を変更されたりするし、かといって、privateにしたりすると
値をコピーしたい場合非常に面倒だし
だから、できるだけ構造体でやってるんだけど
みんなどうしてんのかな?構造体なんて数学的な関数以外使わない?
>>205 最初はフォームに全部書いちゃって、あとで必要になったときに
バラす、ってので十分だろ。
>>207 だって、Main メソッドがないじゃん。
>>155 です
コンソールを開いて
>>206 さんに教えてもらった箇所に貼り付けました
デバッグしたところ黒色の画面が数秒間出て終わりました
エラー表示とかは無いです
これは成功しているのでしょうか?
下記のコードでは接続を確立しただけ?
それともリクエストしたけど
レスポンスを受け取れない?
どのような状態なのでしょうか?
static void Main(string[] args)
{
string url = "
http://www.yahoo.co.jp/ ";
System.Net.WebClient wc = new System.Net.WebClient();
wc.Encoding = System.Text.Encoding.GetEncoding(51932);
string src = wc.DownloadString(url);
wc.Dispose();
}
>>212 だからお前は概念から勉強しろと言ってるだろカス
>>212 ブレイクポイントでもはって確認するか、src をコンソールに出力すれ
>>209 正確な理由は中の人しか知らないけれど、普通に考えると引数なしの
コンストラクタを用意できると配列確保したとき要素数だけコンストラクタ
呼ばないといけなくなるから、こうなっていると思われる。
・・・というかむしろ 3.0 以降の初期化はイニシャライザのほうが推奨かな
という気がする
後その質問に関して言えば「非常に面倒」というほどでもないとしか。
気になるほどでかいデータセットになるとバインディング(+同期機構利用)前提
で考えるわけだし
効率が重視されるときは構造体にはイニシャライザ使っちゃダメ 無駄なコピーが発生する
>>155 です
何度もすいません
「C# src コンソールに出力」でググッたんですが
コンソールに出力されるって文字はいっぱい出てくるんですけど
コンソールへ出力の仕方わかりません
「srcをコンソールに出力」
↑これわかるかた教えてください
>>217 Console.WriteLine(src);
参考書でも買った方が早いよ。俺はもうレスしないから。
using namespace System::Diagnostics; 〜略〜 Debug::WriteLine(src);
違和感がするな
>>155 です
下記のようにしてからデバッグするとエラーになりました手直しできる方お願いします
using System.Linq;
using System.Text;
// debugoncon.cs
using System;
using System.Diagnostics;
public class DebugOnConsole
{
static void Main()
{
Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
Debug.WriteLine("デバッグ・メッセージを出力");
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string url = "
http://www.yahoo.co.jp/ ";
System.Net.WebClient wc = new System.Net.WebClient();
wc.Encoding = System.Text.Encoding.GetEncoding(51932);
string src = wc.DownloadString(url);
wc.Dispose();
}
}
}
>>217 1行命令文書く度に質問しているのかい?
ごくろうさま。死んでいいよ。
実在するサイトのアドレスを書くな! サイトへの攻撃とみなして報告しておく
回答したい奴がすればいい
>>225 実在するアドレス書いたら駄目だったのか
しらなんだ
これから気をつけるよ
あんまし細かいこと言ってたら神経性の病気になるよ
あなたも気をつけたほうがいいね
>>227 質問回答以外はあおりですね
さよなら煽りくん
もうこなくていいからね
Mainが二個
>>229 質問回答以外はあおりですね
さよなら煽りくん
もうこなくていいからね
>>230 さん
それ
>>155 へのヒントですよね
メインってのを2個にすればいいんですか?
それとも現在2つあるので1つにすればいいですか?
何から何まですいません
よろしく^^
>>232 氏ね低学歴。お前には一生プログラム無理
書いてみるからちょっと待て
>>235 質問回答以外はあおりですね
さよなら煽りくん
もうこなくていいからね
あわわ、あわわわ
>>155 さんへ
お前が低学歴なのはこのスレの住民のせいではない
八つ当たりもほどほどにしておけよハゲ
お前はまず概念理解しろ
それすらもできない低学歴は2度と来るなカス
悔しいのか?悔しいから荒らすのか?
もっとポジティブな思考ができないのかねぇこの池沼はw
ネットワークプログラミング相談室にいたやつだな 解決したんじゃなかったのか?
>>236 わかったよ
あんまし怒らなくていいだろ
仲良くしよう
これからも応援よろしく^^
>>238 質問回答以外はあおりですね
さよなら煽りくん
もうこなくていいからね
C#の環境が今ないんだがこんな感じで動いた
てゆーかソース自体に問題は無いような…
using namespace System;
using namespace System::Diagnostics;
using namespace System::Net;
using namespace System::Text;
int main(array<System::String ^> ^args)
{
String ^url = "
http://www.yahoo.co.jp/ ";
WebClient ^wc = gcnew WebClient();
wc->Encoding = Encoding::UTF8;
String ^src = wc->DownloadString(url);
Console::WriteLine(src);
delete wc;
Console::WriteLine("エンターキーで終了。");
Console::ReadLine();
return 0;
}
C# だとこんなん
using System;
using System.Net;
using System.Text;
class GetTest {
public static int Main(string[] args) {
WebClient ua = new WebClient();
ua.Encoding = Encoding.UTF8;
string text = ua.DownloadString("
http://www.yahoo.co.jp/ ");
Console.WriteLine(text);
return 0;
}
}
サイトにアクセスする前に Encoding 設定するのが良くないね
DownloadString じゃ無理なのかな
>デバッグしたところ黒色の画面が数秒間出て終わりました >エラー表示とかは無いです コンソールが勝手に閉じるからだろ
>>242 >>243 お疲れのところ本当にありがとうございます
>>243 さんのコードでエラーなくリクエスト送信は成功していることを確認できました
ありがとうございます^^
へッダから文字コード取れば?
失せろゴミ
>>246 GET するユーティリティの実装ってそうしてるのかな?
今回はとりあえずバイト列として読み込んでそのまま吐いて妥協
WebClient ua = new WebClient();
Stream stream = ua.OpenRead("
http://www.yahoo.co.jp/ ");
StreamReader streamReader = new StreamReader(stream);
Console.WriteLine(streamReader.ReadToEnd());
stream.Close();
return 0;
>>246 応援ありがとう
ヘッダから文字列取得は今日のところはやめておくよ
ここの
>>155 に貼り付けたのと
リクエスト成功した
>>243 さんのコードとの違いを調べてみるよ
ありがと
うっせーはげ
class Program { static void Main(string[] args) { Test t = new Test(); t.Str = new List<string>(); t.Str.Add("dsf"); t.Str = new List<string>(); Console.WriteLine(t.Str.Count); } } class Test { public List<string> Str; } 問)この場合コンソールには何が表示されるでしょうか?
List<>が万能過ぎるんだけどあえて配列使う意味ってあるの?
配列の方が速いだろ
>>252 何かひねったのかと思いきや予想通り0なんだけど何が言いたいの…?
>>253 とりあえず複数渡したい・返したいときは配列が速い
List<>を可視メンバの戻り値や引数にしたらマイクロソフトのガイドライン違反!
Listは容量を増やす時にコピーが発生するし 最悪半分ぐらいの容量が使われてなかったりするし 気分的に嫌だから作業が終わったらすぐToArrayしちゃう
>>258 せんせー、Enumerable.ToList がガイドライン違反ですー
それはCollection<T>継承したの返してあとからいじれるようにしとけと そういう意味合いだった気がするが
生のListを渡すってことは 自分の知らないところでListの中身が増えたり減ったりするのを許容するってことだろ じゃあそのListを管理してるのは誰なのよという話になるだろ
>>260 同じの作ってFxCopで検査したら違反になるよ
ToListやToDictionaryはコンストラクタのヘルパみたいなもんなんだから
>>261 の意味合いから考えれば問題ない
>>259 ToArrayにする作業のほうが時間がかかったりすることはないの?
>>258 可視メンバって、privateメソッドとか?
>>262 なるほど。それはありますね
追加などの作業が終わったら、配列に戻すのがいいのかな
でも、戻り値を配列にした場合、foreach内でそのメソッドを使用するとなると
AddRangeができないから、手間ですよね?
ガイドラインを問題にするときの可視メンバは publicな型のpublicメンバとprotectedメンバ
むむ、XNAでContentPipeline作ってLoad<>でList<>返してたが、もしかしてまずいのか。
それこそ配列返せばいいじゃん
>>265 publicで使っちゃだめなのかー
確かにわけわからなくなるもんなー
ガイドライン天才だなー
>>266 Content.Loadってキャッシュでしょ?
弄る前提でList返すのはダメだろ
配列でも微妙だけど
>>269 いや中身読んだら終わりなんだけど、中が配列の配列だったからさらに配列にしたくなかっただけ。
まあいったん配列にしますわ。
ん?なんでList<>を返しちゃいけないのか詳しく
>>271 List<>を返すということは元の値を直接操作してもいいよと言っているようなものだから
1人でプログラミングする分には覚えていればいいが、多分忘れる
C#てWindows専用?
配列で返すようにしたんだけど、foreachだと使えないんだけど こういう場合どうすればいいんでしょうか? あと、配列を初期化したい場合どうすればいいですか? struct Point { public int X; public int Y; } class Zahyou { public void GetArray() { List<Point> pList=new List<Point>(); . . return pList.ToArray(); } } class Main() { Point[] pArr; foreach() { pArr=GetArray(); } }
>>260 そいつは新しいListを作り出すメソッドだから問題なし。
内部のListの参照をそのまま見せるのがいけない。
ただしプロパティの場合は予防的コピーを返すことも非推奨となっている。
264とか275が何を言いたいのか良く分からない
278 :
275 :2008/10/02(木) 13:19:15
Zahyouクラスで計算したPoint[]を kitai内の座標を保存している配列にコピーしたいんだけど やり方がわからないんです foreach(Tekiki kitai in Guntai) { kitai.PArray=Zahyou.GetArray(); } ↑だとエラーがでる Tekikiのデータ構造を Point[] PArray ではなくて List<Point> PList にすれば簡単に追加できるんだけど でも、publicでListを返したらだめなんですよね? こういう場合どうすればいいの?
>>275 voidなのにreturnしてるとか、
foreachの中に何も書いてないとかは関係してないの?
エラーが出る(笑)
>>275 あとclass Main()ってのもおかしいな
282 :
275 :2008/10/02(木) 13:46:33
>>279 >>281 すいません。要点だけわかればと思って他はさらっと書いたので
foreach内は実際はいろいろ処理してます。
List<>を返して、AddRangeで追加していたときは普通にいけましたが
配列を返すようにしたら、どうすればいいかよくわかりません
エラー内容
'kitai' は 'foreach 繰り返し変数' であるため、このメンバを変更できません。
どれをどこにAddRangeするのよ
284 :
275 :2008/10/02(木) 13:57:52
変更点はList<>を返すところを配列を返すようにしただけです struct Tekiki { public string Name; public List<Point> pList; } class ShoriMain { public void SetZahyou() { foreach(Tekiki kitai in Guntai) { kitai.pList.AddRange(ZahyouKeisan.GetZahyou()); } } } static class ZahyouKeisan { public static List<Point> GetZahyou() { List<Point> pList=new List<Point>(); //いろいろ計算 return pList; } } こんな感じだとうまくいきます。 GetZahyouをList<>ではなく、配列で返す方法がわからないんです
kitai.AddRange(ZahyouKeisan.GetArray()); こんなんでいいだろ AddRangeの中で内部のListのAddRangeを呼んでやればいい
C#ってはやってるの? Javaとどっちが強い?
287 :
275 :2008/10/02(木) 14:13:02
>>285 それって同じことじゃないんですか?
List<>.AddRangeに配列を格納することはできないですよね?
>>286 当然Javaの方が主流。
ただし、Winアプリを作るだけならC#3.0の方が生産性が高い。
スキルとして持っていた方が有利なのはJava、
Winアプリのみを作る状況で生産性が高いのはC#。
Javaの求人の方がまだまだ多いな。
C#で作ったアプリって.NETだったら linuxでもmacでも動くんだよね?
そして結局日本で一番多いのはVB/VBA
>>287 コレクションなら全て入れられる
配列でもなんでも
>>291 kitai.pList.AddRange(new List<Point>(ZahyouKeisan.GetToArray()));
適当に記述してたらこれでいけたっぽいんだけど、これでいいのでしょうか?
293 :
275 :2008/10/02(木) 14:57:54
>>284 の部分で
struct Tekiki
{
public string Name;
public Point[] pArr;
}
static class ZahyouKeisan
{
public static List<Point> GetZahyou()
{
List<Point> pList=new List<Point>();
//いろいろ計算
return pList.ToArray();
}
}
こういう場合foreach内はどう記述すればいいですか?
>>282 > エラー内容
> 'kitai' は 'foreach 繰り返し変数' であるため、このメンバを変更できません。
このエラーが重要。
foreach(Kitai kitai in Guntai){
kitai = Zahyou.GetArray(); // (A)
}
(A)のように、foreachの()内部で宣言した変数は
変更できない。だから、エラーがでてるんだと思う。
これが、
foreach(Kitai kitai in Guntai){
kitai.pArr = Zahyou.GetArray();
}
のように、変数のメンバーとかなら変更可能。
295 :
294 :2008/10/02(木) 15:01:39
あれ。違うか。 メンバも変更出来ないんだっけ?
違う。 foreach(var item in collection) のitem変数はコレクション内のオブジェクトのコピーだから、 構造体配列等の値型のコレクションにおいてそれをやってもダメだよ〜って話。 変数のメンバといってもその変数自体がコピーされたものだから、メンバを変更しても 元のコレクションには当然反映されない。 参照型のコレクションだったらコピーされた変数はそのまま参照が渡されているので、 foreach内でメンバの変更が可能となる。 せっかくC#を使っているのにCでゴリゴリ書いているコードとレベルが変わらんぞ。
297 :
294 :2008/10/02(木) 15:10:48
structだと変更不可能なようですorz だとすると、forで回すのがよさそう。 for(int i = 0; i < Guntai.Length; ++i){ Tekki kitai = Guntai[i]; kitai.pArr = ZahyouKeisan.GetArray(); }
kitai.pList.AddRange(new List<Point>(ZahyouKeisan.GetToArray()));
まずnew Listはいらない
kitai.pList.AddRange(ZahyouKeisan.GetToArray());
pListを直接公開するのはオススメしない
>>293 List<Point>を返すメソッドで配列を返しちゃいけない
AddRangeでPointを増やしていく予定があるならpArrは配列にすべきじゃない
あとZahyouKeisanクラスがkitaiの情報をもっていないのに
Zahyouを返せる理由が分からない
299 :
294 :2008/10/02(木) 15:22:29
>>293 どうしても配列でやりたいみたいだから書いてみた。
void ShoriMain(){
int now_enemyCount = enemy.pArr.Length;
Point[] tmpArr = ZahyouKeisan.GetZahyou();
int add_enemyCount = tmpArr.Length;
int new_enemyCount = now_enemyCount + add_enemyCount;
//配列の長さを変更
Array.Resize(ref enemy.pArr, new_enemyCount);
//新しい配列を末尾に追加
int count = now_enemyCount;
for (int i = 0; i < tmpArr.Length; i++)
{
count += i;
enemy.pArr[count] = tmpArr[i];
}
}
struct Tekiki{
public string Name;
public Point[] pArr;
}
static class ZahyouKeisan{
public static Point[] GetZahyou(){
List<Point> pList=new List<Point>();
//いろいろ計算
return pList.ToArray();
}
}
変数名が now_enemyCount と new_enemyCount ってのは殺人的だぞ
302 :
300 :2008/10/02(木) 15:42:45
VS2008使ってるなら拡張メソッド使ってもうちょっと楽に書けそうだな。 Tekiki enemy = new Tekiki(); void ShoriMain(){ enemy.pArr.Concat(ZahyouKeisan.GetZahyou()); } struct Tekiki{ public string Name; public Point[] pArr; } static class ZahyouKeisan{ public static Point[] GetZahyou(){ List<Point> pList=new List<Point>(); //いろいろ計算 return pList.ToArray(); } }
あまりにも汚いコードなんで俺が書き直してやったぞ struct Tekiki { public string Name; public void AddPoints(IEnumerable<Point> newPoints){ this.pList.AddRange(newPoints); } private List<Point> pList; public Point[] pArr{ get { return pList.ToArray(); } } } class ShoriMain { public void SetZahyou(){ foreach (Tekiki kitai in Guntai){ kitai.AddPoints(ZahyouKeisan.GetZahyou()); } } } static class ZahyouKeisan { public static List<Point> GetZahyou() { List<Point> pList = new List<Point>(); //いろいろ計算 return pList; } }
304 :
300 :2008/10/02(木) 16:07:17
あー悪い、
>>303 は俺です。
当然GetZahyou関数がTekkiの座標計算関係のみに使うのであれば、
Tekiki構造体のstaticメンバにしてもっと簡潔に書くことも出来る。
struct Tekiki
{
public string Name;
public void AddPoints(IEnumerable<Point> newPoints){
this.pList.AddRange(newPoints);
}
private List<Point> pList;
public Point[] ZahyouArr{
get { return pList.ToArray(); }
}
public static List<Point> GetZahyou(){
List<Point> pList = new List<Point>();
//いろいろ計算
return pList;
}
}
class ShoriMain
{
List<Tekiki> Guntai = new List<Tekiki>();
public void SetZahyou(){
foreach (Tekiki kitai in Guntai){
kitai.AddPoints(Tekiki.GetZahyou());
}
}
}
WebBrowserコントロールで、DocumentCompleteを使ってElementにマウスイベント登録すると、
javascriptトリガー用の"href=
http://hoge.com/# "をクリックしたときにまでNavigate系のイベントが発生するようになるんだが、
コレは仕様なの?(登録先がBody又は対象のA要素のとき発生)
しかも結果的にナビゲートに失敗するから困ってる。
イベント登録しなければ発生しないみたい。
またハンドラの中身が空でもなるみたい。
誰か回避方法知らない?
307 :
300 :2008/10/02(木) 17:47:30
>>305 すまん良く分からないんだが、戻り値がList<T>の関数がガイドライン違反なのか?
リンク先を見てみたがその記述はどこにあるの?
この場合は特に問題ないと思うんだけどなあ。
ZahyouArrプロパティについても、配列を返すプロパティがもしかしてガイドライン違反?
っていうか俺よくList<T>のカプセル化のときにこういうプロパティをよく使ってた・・・
インデクサを使えってことなのかな。
仮に返されるものが参照型の配列だったりしたら内部を変更される可能性があって良くないとは思うけど、
この場合は構造体の配列だし、private List<Point> pListについては安全なように見えるんだけどな。
内部状態のコピーが危険なのは参照型コレクションだけとかではないの?
いまいち納得出来ん。
まあTekiki構造体についてはクラスにすべきだと言う意見は納得できる。
グーグーレーカースー
309 :
300 :2008/10/02(木) 18:09:52
オーケー分かった。 配列を返す操作と内部状態のコピーの時はメソッドを使用して下さいと書いてあったな。 ZahyouArrプロパティ の代わりに public Point[] GetZahyouArr(){ return pList.ToArray(); } とでもしておくか。 しかし戻り値がList<T>のメソッドは使うなという記事は見つけられんかった。 リンク先おせーてくれよ。
その代用で使う 〜Collectionってやつがうざい
俺もList<T>を返すメソッドを書く事はある だめだというガイドラインがあるなら俺も知りたい
リスト返したらセットアクセッサが無意味化するぞ
?
とゆーかカプセル化が崩壊
>>275 特別にいいもの教えてやる。
っ インデクサ
>>315 それはprivateフィールドのList<T>を公開するなってことでしょ?
そんなことがまずいのはみんな知ってるだろw
static List<Point> GetZahyou()
{
List<Point> pList = new List<Point>();
//いろいろ計算
return pList;
}
このメソッドがガイドライン違反というのが納得できないだけ。
中でnewしたListをいろいろ計算して、その結果を返すメソッドがガイドライン違反という説明にはなってない。
計算結果を返すだけなら別にいいんじゃね それをどういじくろうが誰も困らないし
constがないからな
321 :
デフォルトの名無しさん :2008/10/02(木) 18:46:05
List<T>返す云々以前にまずまともな設計をするべき
>>318 わざわざList<T>で返されたら追加することに意味があるのかと思っちゃうじゃないか……
>>273 List<>を返すのも配列を返すのもかわらなくね?
結局どうすればいいんだろ
パフォーマンスを考えればToArrayしとくべきだろ で、引数や返り値の配列は変更しないというのは暗黙の了解にしとく
Dictionary.ValueCollection みたいに
>>323 だよね
わざわざ、ToArrayしてまたList<>にいれるわけでしょ?
変換するのは無意味な気がするんだが
> わざわざ、ToArrayしてまたList<>にいれるわけでしょ? これが言い切れるようなinternalな場合はどうでもいいよ
書き込み可能な配列で返すのもよろしくない。
それを言ったらオブジェクトを返すこと自体良くないきがするんだが
たとえば
>>325 のは返す本人以外は要素の取得しか出来なかったりする
親戚も弄れるけどなw
今時ならジェネレータにして使う側がToList()なりToArray()なりするというのが良さそう
引数なしのstaticメソッドで座標を作ってそれを様々な敵機に入れるなんてのはまともな設計じゃないな 普通に考えたら全部同じ座標になるし、それなら何度もメソッドを実行する意味がない
なるほど やっぱりガイドライン違反じゃないんだな
>>334 引数無しなのは質問の要点をわかりやすくするために省略しただけ
実際は玉をよけたり、当たり判定だったりあるし、
敵機の目的地点までの経由地点の座標群を敵機ごとに保持しているだけ
「usingディレクティブがない」と揚げ足取るぐらい蛇足な指摘だと思うんだがな
>>335 お前がそう思うんなら そうなんだろう お前ん中ではな
既に負けてる
なんでわざわざ作りにくい実装にするのよ
戻り値の型にList<T>がまずいのは当然として、 IList<T>なら遥かにいいと思っているんだが違う?
List<T>を返すのがなんでまずいんだ?初めて聞いたぞ それを言ったらオブジェクトの中にList<T>が含まれてたら何にも返せなくなっちゃう
いちいち継承してらんねーよ
今日のレスは勉強になったなー
なんしか、フィールド変数の値を返す場合はプロパティで オブジェクトを返す場合メソッドを通して値のやり取りをしろってことでしょ?
ボタンをクリックしたら、エクスプローラで全選択するように、ボタンにCtrl+Aを割り当てたプログラムを作ろうとしています。 ところが、当然ボタンをクリックするときには、エクスプローラではなく、作っているプログラムがアクティブになってしまうので、アクティブにならないようにしてみました。 しかし、ボタンを押しても全選択はできないままです。 アドバイスお願いします。 namespace CtrlA { public partial class CtrlA : Form { const int WM_MOUSEACTIVATE = 0x0021; const int WA_NOACTIVATE = 3; public CtrlA() {InitializeComponent();} protected override void WndProc(ref Message m){ switch (m.Msg) { case WM_MOUSEACTIVATE: m.Result = (IntPtr)WA_NOACTIVATE; return;} //Console.WriteLine(m.Msg); base.WndProc(ref m); } private void CtrlA_Click(object sender, EventArgs e) { SendKeys.SendWait("^A") ;} } }
変更可能なオブジェクトの参照を流出させることのリスク、 そのリスクの管理ができていればどうしようとかまわないと思う。 ようは外部から参照経由で変更された場合に、 そのオブジェクトを内包させているクラスが 値が変わったことを知ることができないということ。 メソッドの場合はメソッド名で内部の参照をさらしているのか、安全なコピーを返しているのか 区別が付くような名前にしておくとか工夫して置けばよい。 プロパティの場合はメソッドを使うよりはいろいろルールがある。
>>349 エクスプローラの画面のハンドルが必要になるような。
どうやるかはWin32APIの範疇になる。
>>350 >そのリスクの管理ができていればどうしようとかまわないと思う。
そのリスクを減らすためのものがガイドラインでしょ?守らないと不幸なことが起きるかもしれないのがガイドライン。
俺仕様がしっかりしてるならそれでもかまわないが、それが通用しないところではガイドラインが役に立つ。
Delphiで言うと、クラス名はTうんちゃらで始めるという習慣があるが、厳密な言語仕様でもないので守る必要はない
ただ、守らない理由なんて無いけどな(Delphi.netは例外)
TTBaseって支援ソフトがあるんだが、これのプラグインSDKにはTTTBasePluginというクラスがあって、1カ所(ry
>>352 プロパティに関してはそういうガイドラインがあることは承知しているが、
通常のメソッドに関しては見たことがないな。
メソッドの場合は自己責任じゃないかと。
そういえば全然関係ないけど名前付け関係なら我等が .NET ライブラリにも MessageSecurityVersion とかいうネタクラスが ありますよ。 この命名規則はさすがにどうなんだろうね
>>356 あれはよくわからないけどWS-*とかSOAPとかのネーミングルールなんじゃない(笑
MessageSecurityVersionのどこが変なの?
ガイドラインって本しかないの?
>>358 WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005
WSSecurityPolicy11BasicSecurityProfile10 プロパティとか。
ちなみにサンプルコード片。
CustomBinding binding = new CustomBinding();
binding.Elements.Add(
SecurityBindingElement.CreateMutualCertificateDuplexBindingElement(
MessageSecurityVersion.WSSecurity10WSTrustFebruary2005
WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
)
);
横スクロールはいやというやむを得ない事情により改行を入れさせていただきました
本来識別子なので入れてはいけません
>>360 なんだその記事w
日本語でおkなんだがw
>>361 ネームスペースというのが使えるのにこれだけ長い名前になるんでしょ?
C言語時代のメソッドや変数の名前って相当長かったんだろうな
C言語時代は8文字規制とかあたじゃん
367 :
40 :2008/10/03(金) 00:27:36
ディレクトリの操作をするときのパス指定で @"c:\tmp\path" というような書き方をしますが、 @ ってどういう意味ですか?
369 :
40 :2008/10/03(金) 00:33:12
>>368 さん
参照URLを拝見しました。理解できました。ありがとうございました。
>>367 \ -> \\
本来、文字列の中で \ はエスケープなので、\\ と書かなくちゃいけない。
それを \ で済ますことができるようになる
>>367 「@文字列」ですな。
例えばファイルのパスを記述する時、「\」はエスケープ文字を意味する記号になるので
通常は「"C:\\Windows"」など[「\\」と\を2個記述しなければいけないのですが、
@を先頭に付ければ「\」を文字列として扱い、一つしか記述しなくても済みます。
372 :
40 :2008/10/03(金) 00:41:57
>>370 さん, 371さん
丁寧な補足解説ありがとうございます。
おかげでよくわかりました。
>>365 逆。昔はエディタの補完機能なんてのもないし、長い名前付けなかった。
ほんと大昔、初期の初期はプログラムの規模が小さいから
名前の衝突の危険性が低かったからいいんだけど、それはすぐに破たん。
結果どうなったかというと、意味のわからない頭文字略語だらけで、
書いた人にしか意味が分からない名前だらけに。
例えば、
>>361 のコードなら、
cb_t b;
add(&b.elem, sbe_create_mcdbe(msg_sec_v10feb05, ws_sec_feb05_11b10)
とかになるんじゃないかと。
374 :
デフォルトの名無しさん :2008/10/03(金) 00:43:50
質問です、エクスプローラでファイルを右クリックして、[プロパティ]画面の [概要]タブを開くと、そのファイルの作成者やコメントなどの情報を設定したり 閲覧したりすることができます。これを何かの処置で非表示にすることは 可能ですか?設定は随時行い、表示はさせない、という使い方をしたい のですが、方法についてご存知の方がいらっしゃいましたらご指導お願いします。 .NETからは、dsofile.dll というDLLで設定と参照ができることはわかったのですが、 これをそのファイルごとに非表示にしたり表示したりできれば思います。
@"blah\" とかやっても平気なのは何気に凄いね
MSDNって、どうしてあんなに遅いんですか?
スペッコ不足です
つーかパスはC:\\\\\\\\\\\\\\\windows\\\\\\\system32\\\\\\ とかやっても動くぞ 二つ以上連続の\は勝手にOSが読み替えてくれる
>>376 仕様です。
IE で見るのが苦痛なサイトを自前で作ってるって笑われてる。
MSDNの分かりづらさはなんとかならないのか 専門の校閲係とか雇って分かりやすくしとけよ
>>374 プログラムというより、OS の設定の領域。
プログラム的には、シェルエクステンションの仕組みでうんぬんかんぬん・・・
>>379 文字が小さくて
拡大すると、どうでも良い部分も拡大されて読めなくなるのは?
>>382 仕様です。
JavaScript で文字調整やってやがるから、
フォントサイズいじっても無駄とかだと思う。
拡大鏡の類で拡大すればちゃんと大きくなると思うが。
いやかしましは百合ものだろ 初期設定がアレなだけ
どこの誤爆だよw
かしまし噴いたwww
コーラ返せww
どなたーか EachWithIndex 実装してる人いませんか?
>>388 こんなんでどうだろ?
public static class IListExtensions {
public delegate void Fun<T>(T obj, int index);
public static void EachWithIndex<T>(this IList<T> lst, Fun<T> func){
int index = 0;
foreach (T obj in lst){
func(obj, index++);
}
}
}
class Program
{
static void Main(string[] args)
{
string[] strs = { "Foo", "Bar", "Zot" };
strs.EachWithIndex(
(name, index) => { System.Console.WriteLine("{0}: {1}", index, name); }
);
IList<string> lst = new List<string>();
lst.Add("Hoge");
lst.Add("Fuga");
lst.Add("Sugo");
lst.EachWithIndex(
(name, index) => { System.Console.WriteLine("{0}: {1}", index, name); }
);
System.Console.ReadLine();
}
}
>>389 これIEnumerable<T>への拡張メソッドにしたほうがいいよね
回りくどくて格好悪い
392 :
391 :2008/10/03(金) 21:07:27
意味解らんこと言ってるな わざわざ余計なインスタンス作ってDo呼び出させる意味がわからない
元記事に書いてあるじゃん。 > I still like the "Do" keyword in Ruby to signify the start of a block
395 :
390 :2008/10/03(金) 21:33:47
>>394 > Action<T, int>使えよ
おや。そんなものが?
じゃ、こうかな。
public static class IListExtensions {
public static void EachWithIndex<T>(this IList<T> lst, Action<T, int> func){
int index = 0;
foreach (T obj in lst){
func(obj, index++);
}
}
}
IEnumerable<T>はどうした
引数名はactionだろ常考
Union of Soviet Socialist Republics
>>396 ,397
そういうもん?
じゃ、これで。
public static class IEnumerableExtensions {
public static void EachWithIndex<T>(this IEnumerable<T> lst, Action<T, int> action){
int index = 0;
foreach (T obj in lst){
action(obj, index++);
}
}
}
Enumerableの拡張メソッド見た感じじゃthis IEnumerable<T>の引き数名は sourceだがここでもsourceでいいのかね
401 :
390 :2008/10/03(金) 22:27:26
>>400 valuesじゃ駄目だろうか?
public static class IEnumerableExtensions {
public static void Each<T>(this IEnumerable<T> values, Action<T> action) {
foreach (T obj in values) { action(obj); }
}
public static void EachWithIndex<T>(this IEnumerable<T> values, Action<T, int> action){
int index = 0;
foreach (T obj in values){
action(obj, index++);
}
}
}
派生クラスでプロパティを違う型に変えるのは出来ないの? class Class1 { public Class1 Owner { get{〜} } } class Class2 : そlass1 { public Class2 Owner { get{〜} } }
>>399 メソッド名はForEachでいいと思う。
C#だとWithIndexみたいなのは付けずにオーバーロードを使うほうが自然。
public static class EnumerableEx
{
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
{
action(item);
}
}
public static void ForEach<T>(this IEnumerable<T> source, Action<T, int> action)
{
int index = 0;
foreach (var item in source)
{
action(item, index++);
}
}
}
new すればいいんじゃない?
オーバーライドでの共変・反変性はサポートされとらんねー
406 :
403 :2008/10/03(金) 22:36:48
じぇねりっく!
_
public Class1 Owner2 { get{〜} } public Class2 Owner1 { get{〜} } ( ^▽^)
>>399 俺も
>>403 に一票。てか、俺が書いたとしてもforeachを一行で書くくらいの違いで
クラス名、変数名まで全く同じになりそう
あ、でも型パラメータは一応Enumerableに合わせてTSourceにしとくかな
プロジェクトによって、インテリセンスのコメントが 出てきたり、出てこなかったりするんだけど、 何が違うんでしょう? 同じソリューション内にa, b, zの3つのプロジェクトがあったとして、 aからはzのコメントが出てくるのに、bからだとzのコメントが出てこない、 みたいな状態です。 参照設定も同じようになってます。
超初心者の質問ですがどなたか願いします 名前空間ってあるじゃないですか あれって使わないものもusingで指定しても大丈夫ですか? 自分がちょっとテストしてみたところ問題ないような感じなんですよ めんどくさいので全名前空間usingセット作っておいたら便利なのかと思うんです 何か不都合がおきますか?
クラス名が時々衝突する Timerなんか3つあるしな
>>414 わかりました
横着は駄目ですね
ありがとうございました
型名をタイプしてからShift+Alt+F10が便利
c#ってマックで動きますか?
動きます。
.Net frameworkがインストール可能な環境なら どこでも動くってことでおk?
いいえ .NetFrameworkに限りません
メガマック食いてえー
>>422 スーパーサイズで良いですか?マックマクにしてやんよ
424 :
デフォルトの名無しさん :2008/10/04(土) 17:48:38
メモリ上にある画像(byte[]で保持しているjpg画像)を、 HTMLで好きなようにレイアウト組んで表示させたいんだけど、 WebBrowser使ってできるかな? 画像データはファイルに落とさないこと前提で。
プロトコルハンドラを書けばいいんじゃない? それで、<img src="foo:ID"/>とかできるとおもう。 IInternetProtocolとかでぐぐれ
何しようとブラウザに画像ファイルとしてキャッシュされる可能性は捨てられんがそれはOK?
今ペイントソフト的なのを作ろうとしているんだが… 範囲選択、塗り潰し、グラデーションが上手くできなくて困ってる。 塗り潰しはピクセルごとに色を取得してクリックしたとこと同じなら…とやろうとしたがそれだと離れた場所にある同じ色のピクセルも色が変わってしまう。 グラデーションはLinearGradientBrushでやろうとしたが、グラデーションが繰り返されてフォトショとかみたいにならない。 初心者で悪いんだが、助言もらえると助かる。
或いはNetscapeプラグイン、或いはActiveX
困ったときはPaint.NET見てみる 俺は見たことも使ったことも無いから参考になるかどうかは知らん
無料のSicence Libraryなかなかいいのないよね。
431 :
427 :2008/10/04(土) 19:07:47
>>429 前に見たんだが、ファイル数多くてどれがどれだか分からないし、さらに理解もできなくて…
オープンソースの奴がある程度は理解できるようにはならないと駄目だよな…
>>425 ありがとう。
ググってみるわ〜。
むずそうだったらファイルに落とすか、
諦めてDataGridに表示とかにするわ。
>>426 全然おk
塗りつぶしは上下左右のピクセルを調べて同じ色なら塗る を上下左右に再帰的に適応していけばできる気がするな それよりもいい方法があるかもわからんけど
>>433 極めて正しいが多分今のPCでは実用速度的に厳しいと思う
塗りつぶしは昔から研究されてるからちょっと調べればアルゴリズム色々転がってるよ
>>433 そのまま再帰で書くとSystem.StackOverflowExceptionしそうだな。
多少きれいじゃなくなるけど、非再帰に書き直さないとな。
スタックを使えばできないこともないと思う。
それと、直接塗りつぶすんじゃなくて、
画像と同じサイズの配列(Bitmapでも可)を用意して 塗りつぶすところと塗りつぶさないところのフラグ(マスク)を作ってから
重ね合わせで塗りつぶせば、グラデーションやテクスチャの流し込みとかにも応用できそう。
あと、塗りつぶす前にマスクをぼかしておけば、よりきれいにぬれているように見えるはず
ソースコードを記述したファイルの管理について質問させてください C#はソースの場所と名前空間に特に関連が無いようですが、一般的に従うファイルの置きかたなどあるのでしょうか? 今はVC#がソースを置くディレクトリに全てのファイルをそのまま置いてます また、クラスとファイルの関係ですが、どうするのが普通なのでしょうか? Javaみたいに1個のpublic classに対して1個のファイルを作るのが普通でしょうか? よろしくお願いいたします
好きにすればいいよ
>>436 > C#はソースの場所と名前空間に特に関連が無いようですが、一般的に従うファイルの置きかたなどあるのでしょうか?
ありません。
> 今はVC#がソースを置くディレクトリに全てのファイルをそのまま置いてます
ファイル数が少ないときはそれでよいかと。
> また、クラスとファイルの関係ですが、どうするのが普通なのでしょうか?
> Javaみたいに1個のpublic classに対して1個のファイルを作るのが普通でしょうか?
一般的にはそんな感じですが、Java と違って、ひとつのファイルに複数のクラスが書けるので、
機能的にまとまったクラス群はひとつのファイルにまとめることもあると思います。
>>437-438 レスありがとうございます
参考にさせていただきます
ついでに、もう1個質問です
C#にはパーシャル クラス機能があり、1個のクラスを複数のファイルに分割して記述できると知りました
しかし、使う場面が思いつきません
パーシャル クラスの一般的な使い方とかあるのでしょうか?
>>439 VS でウィンドウアプリを作れば、プロジェクトがどういう風にパーシャルクラスを
使ってるかわかるよ
441 :
427 :2008/10/04(土) 23:17:19
>>433-435 レスThx、参考になった
塗りつぶしアルゴリズムでググってみたら良さげなのが出たからそれを利用してみる事にする。
続けてで悪いんだが、範囲選択はどうしたら出来るか助言を貰いたい。
>>439 基本的に、機械生成コードと手書きコードを合わせて1クラスにするための機構。
443 :
435 :2008/10/04(土) 23:47:52
>>441 矩形だけなら始点(sx,sy)と終点(ex,ey)を保持するだけで良いが
それ以外を選択するには、Bitmapで形を保持すると良い
PictBearは選択範囲をBitmapで保存できたから、多分そんな形でやってるはず。
>>442 WPF,XAMLがある今、いらない子?
>>443 いや、WPF 以外にもいろいろ使われてる。
WPF の XAML も、ビルドの途中で partial class を自動生成してる。
>>443 形の保持ならGraphicsPathでよかろうよ
ラスタ形式の画像の選択範囲は、 αチャンネルで持つのが普通な気が。
splitで出力された1次元配列にいくつの要素があるかわかるメソッドってない?
Count()
ごめん、VB と勘違いした
451 :
447 :2008/10/05(日) 01:08:36
即レスサンクス!
Count()はVBで
>>448 =>450でおk?uboundを使ってみます!
452 :
427 :2008/10/05(日) 01:11:46
助言してくれた人たち、ありがとう。 教えてもらった方法をなんとか試してみる。
453 :
447 :2008/10/05(日) 01:16:32
ん、、? uboundがVBかorz
現実では無理だと悟ったので、人工知能の少女を作って仮想世界で彼女作ろうと思うのですが C#でできますか?
C#はそんな貴方の夢を叶えます
>>440 レスありがとうございました
自分は今のところコマンドプロンプトで実行するアプリケーションしか作ってないので、そのうち勉強させてもらいます
すみませんが、またまた質問させてください。
今度は例外処理に関してです。
C#だと、例外は必ずしもtry~catchしなくて良いのでしょうか?
Encoding.GetEncoderメソッドを使うプログラムを考えているのですが、特に例外処理しなくても、コンパイルも実行もできてしまいます
おそらく、このメソッドは存在しない文字コードを指定すると例外を発生させますよね?
そのための例外処理が必要だと思うのですが、どうなってるんでしょ?
Javaで言うところのRuntimeExceptionが出ているのでしょうか?
APIを調べたのですが、
ttp://msdn.microsoft.com/ja-jp/library/system.text.encoding.getencoder.aspxを読んでも 、例外関係の情報が入手できません。
例外の基本的な処理の考え方や、ドキュメントからの例外情報の入手方法を知りたいです。
よろしくお願いいたします
>>456 いちいち Java と比べるのはやめれ。
例外処理をしなければ、UnhandledException が出て、アプリが終了するだけ。
GetEncoder自体はEncoderオブジェクト返すだけだし例外投げる要素が無いな
>>457 すみません、自分はCとJavaとrubyくらいしか、経験が無いもので、、、^ ^;
>例外処理をしなければ、UnhandledException が出て、アプリが終了するだけ。
なるほど
しかし、いきなりアプリが終了するのは厳しいですな
>>458 間違えました
Encoding.GetEncoding(String);でした
ttp://msdn.microsoft.com/ja-jp/library/t9a3kf7c.aspx 見ると、例外の情報も載ってますね
申し訳ありませんが、さらに質問させてください
普通にVC#2008ExpressEditionを使っていると、例外処理を行わなくてもコードが書けてしまいますよね
これを、VC#2008ExpressEditionが自動的に全ての例外を処理しなければ警告を出すような設定にすることはできないのでしょうか?
あと、またまたJavaに例えてしまい申し訳ないのですが、各例外にExceptionとRuntimeExceptionのような違いはないのでしょうか?
よろしくお願いいたします。
>>456 変な引数与えたときはたいてい ArgumentException。
Java と比べてってことは、「throws リストはないの?」ってことだろうけども。
あれは、「内部実装を外部に漏らしてしまう」って欠点がある割に、
どうせ「面倒だったらException型でcatchしちゃえ」って人が多くて
対して役に立たないから C# では採用しなかった。
VS2008C# Expressです。 フォームを作成すると、Form1.Designerに以下のような コードが追加されますが、このSystem.ComponentModel 名前空間のインターフェース、クラスはどのような意味を 持つのでしょうか?ヘルプやHPで調べてもよくわかりません。 private System.ComponentModel.IContainer components = null; private void InitializeComponent() { this.components = new System.ComponentModel.Container(); } このフォームにボタンを追加すると、InitializeComponentの this.components = new System.ComponentModel.Container(); が消えてしまいます。 そこからさらにTimerを追加すると、 this.components = new System.ComponentModel.Container(); が復活し、 this.timer1 = new System.Windows.Forms.Timer(this.components); が新たに追加されます。 アンマネージドリソースの破棄に関係しているのでしょうか? 詳しく解説しているHP等ありましたら、教えてください。 宜しくお願いします。
はじめに入ってるのはそういうテンプレートだから 消えるのは多分使ってないと判断されたから 追加されるのは使うから IContainerはComponent派生クラスの後片付け(Dispose呼び出し)のルール 自分がDisposeされるときに自分の持ってるComponentもまとめてDisposeするため
>>460-461 レスありがとうございます
確かにJava使ってたときもなんでもかんでもExceptionでcatchなさる御仁は多かったですね
うちの会社はルールが厳しくて許されませんでしたけど、下請けに出した古いコードはcatch(Exception e)の嵐…
しかも、何も処理して無いことも多いですし、酷いときはVMが突然終了するコードもありましたね
現実問題、例外処理はどうするもんなんでしょ?
たとえば、ArgumentExceptionとかはそもそもメソッドの使い方を間違えているわけだから、例外が出たらプログラマの責任でテスト失敗てのは納得できます
だから、ArgumentExceptionをcatchして例外処理を記述する必要は無いと思います
しかし、ファイル読み込みに失敗とかのケースはやはりcatchしてなんだかの処理をすべきですよね(少なくともアプリが突然終了はないですよね)
catchして処理すべき例外とプログラマの責任でそもそも例外が出ないようにテストする例外と、なんか、その辺を解説している記事とか本とかないですかね
465 :
462 :2008/10/05(日) 11:43:51
>>463 レスありがとうございます。
Component派生クラスのオブジェクトをFormの
System.ComponentModel.IContainer componentsに登録させておき、
フォームをDisposeするときに一緒にDisposeさせる…
上記のような処理のためcomponentsが存在している。
といった理解でよろしいでしょうか?
467 :
462 :2008/10/05(日) 11:50:22
Silverlight2RC0来たね
469 :
デフォルトの名無しさん :2008/10/05(日) 12:21:11
半透明なコントロールを親コントロールに貼り付けたとき、 親コントロールが子コントロールの領域を描画しなくなって 表示がおかしくなるのを防ぐために設定するのって何だっけ? 変な日本語ですまn
>>465 厳密に言うとそれだけじゃなくて Container Site Componentの
結合のために存在している。
しかし、この辺は ComponentModel の基本的なことだから押さえた
ほうがいいともいえるけどコンポーネントを作るんじゃなく使うだけ
なら気にしなくてもいいからわかんなくてもいいかも。
471 :
469 :2008/10/05(日) 13:12:09
追記 Win32で言うところの WS_CLIPCHILDREN と WS_CLIPSIBLINGS を外したいってことなんだが。
例外処理はこれで十分 static void Main(string[] args) { try{ //ほげほげ } catch(Exception){ MessageBox(e.ToString(), "えら〜"); } }
hogeってなんなの?
hageやhigeの変種
hogeの定義は無いよ 適当とか未確定とかニュアンスでいいんじゃないでしょうか?
では、ハナモゲラ語とはなんですか?
Lengthだろ
!
想定外の例外は最上位でキャッチしてログ書いてメッセージ出して終了。 普通に想定される処理続行可能な例外はその場でキャッチして適度に処理。 続行出来ないようなのはあえてキャッチせず最上位に任せるか、 ラップして再スローしてやっぱり最上位に任せる。 例外処理って、厳密にやろうとすると細かいルールばかりになって、 しかもかなり慎重に考えないと意味なかったりやたらコーディングが複雑になったりして、 結局シンプルに決めた方がましなことが多い。
変数と配列・リストで命名規則の違いとかってありますか? たとえば変数の場合は出だしが小文字でそれ以降は大文字 例) int variableNumber; みたいな感じにするのが一般的とされていますが、これと似たような暗黙上のルールは 配列・リストにありますか?
>>481 暗黙っていうか、それはcamelスタイルって名前がついてる。
MSのクラスライブラリ作成のガイドラインに、なににどのスタイルを使うとか書いてある。
配列やリストだって変数に入れるインスタンスじゃん?
ローカル変数に大文字二十日湾だろ不通
485 :
462 :2008/10/05(日) 18:10:02
>>470 基本的なことなら理解したいのですが、
解説サイトとしてはMSDNの「Visual Studioによるコンポーネント」
のあたりを読むしかないですかね?
コンポーネントのありがたみというかコンポーネントでないと
出来ない事なんかがよくわかりません。
どうしてプロパテーはジェネリックに出来ないの?
うまく質問している内容が伝わるか不安ですがよろしくお願いします やりたいのは、データをファイルに保存するクラスを作りたいのですが テキストファイル形式で保存するんじゃなくて、テキストエディタで開いても みれないデータ形式ありますよね?.exeとか そんな感じで保存したいんだけどどういう知識が必要なのかな? 保存したいのは計算結果の数値や文字列データです
>>487 好きにフォーマットを考えて、好きに読み書きすればよろし。
>>488 だから、普通に書き込んだらテキストファイルで見れるから
そうならないように書き込みたいからやり方教えろって言ってるんだけど
お前メクラか?
お前がテキストで書き込んでるから見えるんだろボケ
>>489 >>488 は別に煽ってるわけでもないし、ましてメ○ラなわけでもない。
むしろ馬鹿でメ○ラでツ○ボでどうしようもないのは君の方だぞいやマジで。
>>489 > だから、普通に書き込んだらテキストファイルで見れるから
ならない。
バイナリを見れる、って意味では見れるけどなw
まあお前らKOOLになれよ BinaryFormatterでシリアライズなんかどうかな
昨日splitで出力された配列に何個要素が入ってるのかわかる関数を教えてくれってレスして count()を教えてもらったんだけどこの関数どうやって使うんですか…? ググってもそれらしい構文が見つからなくて…
素直にLengthプロパティ見れ
>>494 だからお前はオブジェクト指向の概念から学べよ猿
あと、countだと、nullだった場合エラー出るからお勧めできない
countなんて薦めた奴はバカだから放置しろ
>>494 その人、たぶん Length って言いたかったんだと思うよ。
VBとか他の言語がいろいろ混ざっちゃってたっぽいので。
Split の結果って配列だから、それの長さ調べろってこと。
498 :
494 :2008/10/05(日) 20:56:07
>>495-497 そうかLength見ればいいのか…
なんか変な考え方してたみたいですorz
皆さん優しくありがとう
初心者です。C#で ある整数のセットに対して、最小値(か最大値)を配列で返す機能ってあります でしょうか?ちょっと探してみたくらいじゃみつかりませんでした。 例 [3,3, 5, 2, 2, 4, 4, 7] => [2,2] [7,2,3,4,1,,-1,-1,-3,5] => [-3]
あ、,,になっている部分は、nullみたいな感じで無視します。
そのものはないけど、 new[] { data.Max() }
>>501 複数あったらその数だけ作るらしいぜ
var max = data.Max();
var result = Array.FindAll(data, x => x == max);
var min = data.Min() var result = array.Where(n => n == min); でもおk
>>503 訂正
var result = data.Where(n => n == min);
みなさんありがとうござます。 早速ためしてから感謝しようとおもっておりましたが、 int[] d = {11,11,22,33,10,10}; d.Min()がない。 というような状況です。もしかして2.0には、Min,Maxないんでしょうか (Math.Min,Maxはありましたが)
ああ、そう。 Min, Max は 3.0 から。
単に3.0って言うとややこしいぜ .NET 3.5/C#3.0から
public static int[] Maxs(int[] arr) { int max, cnt; if(arr.Length == 0) { return new int[0]; } max = arr[0]; cnt = 1; for(int i = 1; i < arr.Length; i++) { if(arr[i] == max) cnt++; if(arr[i] > max) { max = arr[i]; cnt = 1; } } int[] result = new int[cnt]; for(int i = 0; i < cnt; i++) result[i] = max; return result; } こうかな?
2.0 でちゃんとやると508になる気がするが。 C# 3.0 使えという話ではある。
>508 大変ありがとうございます。 double, floatなどでもつかえるようにしてみようとおもいましたが ==, >の比較ができなく困ってしまいました。 class MathEx { public static T[] Maxs<T>(T[] arr) where T : IComparable { T max; int cnt; 省略 max = arr[0]; cnt = 1; for (int i = 1; i < arr.Length; i++) { if (arr[i] == max) cnt++; if (arr[i] > max) { max = arr[i]; cnt = 1; } } T[] result = new T[cnt]; 省略 } } もうちょい悩んでみます。
質問者です。以下でなんとかいきそうでした。 if (arr[i].CompareTo(max) == 0) cnt++; if (arr[i].CompareTo(max) > 0)
>513 ありがとうございます。このスレでもでてきたEachForや今回のMaxsのような独自の便利 関数は、みなさんどのように管理されてるんでしょうか??なにかアドバイスあればお願い します。
515 :
508 :2008/10/05(日) 22:29:30
>>509 public static int[] Maxs(int[] arr)
{
int max = Int32.MinValue;
int cnt = arr.Length == 0 ? 0 : 1;
foreach(int value in arr)
{
if(value == max)
cnt++;
if(value > max)
{
max = value;
cnt = 1;
}
}
int[] result = new int[cnt];
for(int i = 0; i < cnt; i++)
result[i] = max;
return result;
}
うーん、こうかな…
>>515 まあ、まずまずだけど、ひとひねりほしいな
例えば再起処理を使うとかさ
forでやるのはダサイ
>>514 管理ってなんぞ?クラスで定義すればいいんじゃねーの?
こんなんで再帰使う方がアレだわ
518 :
508 :2008/10/05(日) 22:41:45
よく見たらバグってんなこれ
>>514 適当にinternal staticなクラス作って入れとく
よほど汎用的で便利なものでなければプロジェクトごとに書き捨て
倹索とかで見つからなかった場合null帰すのとエラーはどっちがいいの
場合による 「検索」という意味合いのメソッドなら例外は投げない方がいいかも
この問題結構奥深いな… 最小値、最大値のセットだけでなく 2番目、3番目、そして一番多くはいってる数とか だそうとして、 ヒストグラムに一旦入れて、やってみてたけど、朝までかかり そうなかんじなんで、つかーれたのでエロみてくる。
525 :
516 :2008/10/05(日) 23:14:49
おまえらバカだから答え教えてやるよ まず、配列をList<>に入れる その後。Sort() あとは言わないでもわかるな?
null許容型もだめな型ってあるの? あるいはDictionary.TryGetValueみたいに可否と結果を別に表す方法もあるし。
>>525 List<>に入れるときはforを使わず再帰処理を使うんですね
わかります
数字なら最大値でも返えせば
530 :
516 :2008/10/05(日) 23:31:09
要素から最大値を抜き出す その要素に-1を代入 また、要素から最大値を抜き出す 最初に取り出した最大値より小さい場合は 唯一の最初のが最大値 あとはわかるな?
タイプつかってヒストグラムできた。が馬鹿でかいものになった。 歪度とかCV、σとか無意味につけてしまった。
ダメだ、俺の頭では、-1を代入のところがよくわからん。。。 整数だからマイナス数値ばっかのセットだってあるんだよね
これに速度の差とかあるですか? try { int index = 0; for(;;) { if(name == list[index++].name) { break; } } return list[index]; } catch(ArgumentOutOfRangeException) { return null; } //int count = list.Count; //for(int i = 0; count > i; i++) //{ // if(name == list[i].name) // { // return list[i]; // } //} //retnrn null;
516は突っ込んだら負けなんだろうか 要素は全部0以上とか元の配列を破壊してもいいとか勝手な条件付けすぎ
エレガントな解はまだかーい?
いや、499時点で負数出てきてるし…
組み紐群ならったときに、エレガントな方法あったきがする。。。 が教科書すら全部研究室おいたまま10年以上たっとるな。
ApplicationExceptionじゃなくて ArgumentOutOfRangeExceptionとか InvalidOperationExceptionとか 中の人以外が勝手に使ってもいいの?
真面目な話、いくらふらっとスレだからって、
>>499 ってそんな悩む問題なのか?
そっちの方が悩ましい問題だ。
こんなのベタにやればいいだけじゃん。
間違いなく(負の数について簡単に説明してやりさえすれば)小学生でも書けるコードにしか思えないんだが。
>>542 ApplicationExceptionは黒歴史になりました
>543 小学生でも書けるかもしれないが、万人が使いたくなるような 汎用的なもの、もしくは、ロジックがみためにも美しいもの をつくるのは、難しいぞ。 そんなに簡単に書けるコードだというのなら、手本をみせてほしい。 ヒストグラムに入れるという方法が私には、なるほど!と思わせてくれた。
>>545 何を言っているのか意味がわからん。
汎用的?
汎用的かどうかがコードの書法によって変わるとでも言うのか?w
振る舞いが重要であり、内部の構成には興味ありませんね
>>545 は概念から学べ
証明の結果よりも、証明の仕方に興味があるタイプです。
なら数理論理学でも学べよ C#とは関係ない
>>548 それ自体はいいと思うんだが、だからといって三平方の定理レベルの話題で
悩むのはヤバいだろう。
三平方の定理=立方体の体積の出し方だと思った俺の居場所は
乱数なんてらんだむっぽいのがでりゃいいんだよ。 メルセンヌツイスターなんていらんわ。
C#ってなんでメソッドの引数でデフォルト値を廃止してしまったんですか(´・ω・`)?
>>553 メソッドオーバーロードで解決できるから
この質問いつも出るからテンプレに入れないか?
>>554 C++もメソッドオーバーロードは実装してません?
関数オーバーロードでデフォルト引数が表せるのだから デフォルト引数なんていう分かりにくいものは使わないようにしようという方針
C++作ったBjarneも多重定義があればデフォルト引数なんて構文糖、みたいなことを自著に書いていた気がする。
デフォルト引数の方が直感的じゃないですか? 多重定義もいいですけどコードが冗長になって保守・管理が面倒くさくなりそうですが・・・
デフォルト引数はオーバーロードで出来ても逆は無理だろ。その時点で どっちがなんて議論じたい意味なし それとシグニチャと呼び方もよろしくない、デフォルト引数は
ドキュメントの保守が面倒だったりはしないのかね ある機能の説明がオーバーロードされたメソッドごとにあるから 必然的に重複が多くなるし
デフォルト引数って、使う人が結局その値を理解する必要があるからね。 単に、無い、という方が安全だよね。
デフォルト引数無いのがC#の最大の欠点
敢えて無くしたのに それを欠点と思ってるようじゃC#は向いてないよ
public void foo(bool bar = true){ ・・・ } で済むところを public void foo(){ foo(true); } public void foo(bool bar){ ・・・ } なんてダラダラ書くのは無駄すぎるな
オーバーライドすると途端にカオス
デフォルト引数は構造上、後ろから設定しなくてはならないし歯抜けができない。
文句があるならC++使えばいいじゃん
C++なんかもっと欠点だらけだろ
usingとかDisposeを多用しなきゃならん状況になると C++ならもっと簡単に書けるのに、とか思ってしまう。
まそりゃ適材適所 C++の方が簡単に書けるならC++で書けばいい DllImportだってC++/CLIによるラップだってできるんだから
VisualC#2008を使っています。 C#をコンソールからコンパイルする方法を知りたいです。 csc filename.cs でよいらしいのですが、cscにパスが通っていないようです。 cドライブをcscで検索しても見つからないです。 どなたかご教示いただけないでしょうか。
スタートメニューに.NET 2.0 SDKみたいな項目あるだろ それのSDKコマンドプロンプト使え
>572 ないです。 Microsoft Visual C# 2008 Express Edition はあります。 普通の(WindowsXP標準の)コマンドプロンプトではだめなんですか?
C:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe filename.cs コンパイラのパスは環境によって違うかも分からん もしくは環境変数PATHにC:\WINDOWS\Microsoft.NET\Framework\v3.5をついかして csc filename.cs とかシステム環境変数に入れたくなければ set PATH=C:\WINDOWS\Microsoft.NET\Framework\v3.5;%PATH% みたいなバッチファイルを用意してそれを使うとか
%windir%\Microsoft.NET\Framework\v?.? にあるからなあ、検索時Windowsのディレクトリは除外してたかな。
標準のコマンドプロンプトからなら、vcvars32.batを実行すりゃいけるよ。 探してパス通ったとこにコピーしておいてみては。
>574、575 あ、ありました。Prorgam Fliesばっかり探してました。 Windowsの下だったのですか。 検索はシステムファイルは除いていたかもしれません。 ありがとうございました。
なぁ、クラスを作ってそこのメソッドで何らかの「閉じた」処理をさせるとき、 このメソッドは引数を取るようにすべきだと思う? それとも必要ならクラス内のフィールドやプロパティを読めばいいわけだから そもそもメソッドに引数なんて指定する必要も無いと思う?
どっちかじゃなくて、適切に使い分けろ
>>578 フィールドにあるものを利用するならわざわざ引数でやらなくてもいい
ほかのクラスやプロジェクトで利用するようなメソッドなら引数などを考えないといけないけどね
くだらない質問ですみません VC#2008無料版をインストールしたのですが.netFramework SDKのインストールも必要ですか? それともVC#導入時に組み込まれていますか?
大体は入ってる できればMSDN Library for Visual Studio 2008 SP1を 必要になったらMicrosoft Windows SDK for Windows Vistaを
>>580 メソッド間の引数のやりとりだけで実現可能な場合は
わざわざフィールドにする必要ないだろうか?
いまいち変数をフィールドで表現すべきか、メソッド間の引数のやりとりですます
べきかの使い分けが分からないんだが。
フィールドってある意味一昔前のグローバル変数みたいなものだから
安易に多用するのは慎むべきだよな?
>>584 privateにしておけば問題ないはずだけど
多分、そのソースに必要な改良はクラスに分割することじゃないかな?
大部分のメソッドはそのフィールド変数を利用しないとするならば
そのフィールド変数は混乱の元だし、そのフィールドを必要とする
メソッドと一緒にクラス化するべき
引数を取るかどうかの判断は、そのメソッドをpublicにするかもしれない場合
>>585 裏を返せばそのクラスのフィールドを使わないメソッドは積極的に
違うクラスに分離していけ、ということ?
あん裏はやめて
っていうか、そもそも「普通は」メソッドの引数を省略する目的で フィールドを使いたい、などとは思わないはず。 もしそんな欲求に駆られるとしたら何か考え方が間違ってると思うよ。
フィールドあれ、と神は最初にいった
>>586 public void Swap(int a,int b)
{
//abの値をスワップ
}
↑ならメソッドの機能を忘れてても直感的どういう動作をするのかわかる
public void Swap()
{
//フィールド変数のa,bの値をスワップ
}
↑これだとaとbはどういう型なのか、プログラム内でどういう意味を持つ変数なのか
毎回思い出したりしなければならない
メソッドもクラスもできるだけ小規模で完結した機能を持ったほうが のちのち見返した場合わかりやすい
Swap(ref int a, ref int b)なら分かるけど
i++;と++i;どっちが速い?
いっしょじゃね
式の値を使わないならIL上で全く一緒
アクセスに統合Windows認証が必要なWebサイトがあり、それのテストを行うために HTTPリクエストを飛ばしてレスポンスを拾うテストツールを作っています。 デバッグ用なので、生のリクエスト文字列を送り、生のレスポンスを拾いたいため、 TcpClientを使って、HTTPヘッダもユーザが入力できるようにしました。 そこで困っているのですが、TcpClientでの統合Windows認証のやり方がわかりません。 TcpClientで統合Windows認証は可能でしょうか?可能であればどのようにすれば良いのでしょうか。 不可能であればHttpWebRequest等の代替手段を検討しなければ行けないのですが、 統合Windows認証が可能で、ヘッダも含めた生のHTTPリクエストを設定し、生のHTTPレスポンスを 取得できるクラスのようなものはありますでしょうか。 よろしくお願いします。
Class追加するときって1クラスにつき1つファイル(拡張子は .cs)を用意して そこに記述したほうがいい?それともMain()関数があるところの下につらつら クラスを追加していってもいいんだろうか?
内部クラスでないかぎりは1クラス1ファイル
どこのJavaだよ
クラスが増えてくると、何がなんだかわからなくなるな UMLとか覚えたほうがいいのかねぇ
privateな内部クラスを使えば結構減らせる気がする 一つのクラス内でしか使わなくて外に見せる必要もない型って案外多いよ
605 :
デフォルトの名無しさん :2008/10/06(月) 22:00:11
垂直方向のプログレスバーきぼんぬ
気色悪い奴
>>599 どうも(*^ー゚)b
>>600 Javaって一つのファイル内にクラスをつらつら書き連ねていくの?
>>602 それらをツリービューで表示されるから、どのクラスがどのクラスと関連があるのかとか
わからなくなるんだよね
関連図をUML風に表示する機能があればいいんだけど
プロエディションならあるんだっけ?
>>597 HttpWebRequest なら CredentialCache か何か使って NTLM 認証が可能。
TcpClient を使うなら、パケットキャプチャしてやりとりを確認すれ。
でもさー。Proxy 通れないケースが多いから、インターネット経由だと
かなり厳しいと思うよ。
javaはpublicクラスは1ファイル1クラスで名前を合わせる必要があるが、 デフォルトスコープ(internal相当)のクラスはその限りではない。 関連のあるデフォルトスコープクラスはまとめてよい。 ただ、public enumをいちいち別ファイルにさせられるのはちとつらいね。 C#の場合はpublicなenumやらdelegateやらいろいろあるから分けてられないよ。
>>609 HttpWebRequestのCredentialCacheで認証して、
GetRequestStreamでStream取得してそこに書き込めばできそうですね。
ありがとうございます。
ちなみに、
>でもさー。Proxy 通れないケースが多いから、インターネット経由だと
>かなり厳しいと思うよ。
これってTcpClientに対してのコメントですか?
そういえばネストした型をpublicやprotectedにしたらガイドライン違反になるんだっけ
C#をはじめるならこの本がお勧め、って感じの入門書ってありますか?
C#以外の経験の有無くらいは書け
申し訳ない Cが文法なら大まかに覚えてる〜程度の素人です 他は無知です
>>609 すいません、HttpWebRequestのGetRequestStreamの使い方を調べてみたんですが、
ヘッダも含めて、直接HTTPリクエストを書き込める訳では無いみたいですね。
デバッグ用なので、中のデータがどうなっているのかを見るのが最優先なのですが、
そういうリクエストの指定ってできないものでしょうか。
>>614 マイコミが初心者テキストとしてもリファレンスとしても使いやすい
マイコミが理解できるレベルならMSDNで十分だろう
iを使わない場合最適化されるから一緒、つまり++iが速い。
一緒なのに早い?
ImageListの全画像をまとめて1つのファイルに 書き出す(読み出す)方法はありますか?
>>621 「前置の時と」同じコードに最適化される
>>611 違う。NTLM 認証の制限。ケルベロスならいけるのかもしれんけど、
試してないからわからん。
>>618 つかさ、デバッグ用なら、なんでパケットキャプチャしないの?
>>622 どうまとめんのさ
複数フレームの画像ならTIFFとかGIF
単に詰め込むだけで良いなら適当なヘッダつけて突っ込んでけ
ZipPackageとか
大きめのbmpオブジェクトを作って 任意の画像をそこに貼り付けて 適当に保存すればいいんじゃないの?
>>590 話はややずれるけど
private int a, b;
public void Swap(int a,int b)
{
this.a = a
this.b = b
}
という書き方って推奨されている?本来は
private int a, b;
public void Swap(int _a,int _b)
{
a = _a
b = _b
}
という書き方の方が正しいのかもしれないけど・・・
上が推奨 下はガイドライン違反 下のように書くとすれば、フィールドのa,bの方に_を付ける 「クラス外から見える名前が最優先」
このスレに出てくるSwapは俺が思ってるのと全然違うんだが
>>624 クライアント側で想定したリクエストを送れているかということと、
あるリクエストを送ったときのサーバ側の動作をみたいので。
前者だけならパケットキャプチャで拾えば良いと思いますけど、
後者のために任意のリクエストを送れるツールが欲しいのです。
public static void Swap(ref int a, ref int b) { int tmp = a; a = b; b = tmp; }
>>631 IIS リソキに含まれてるツールでも使えばいいじゃん。
KeyedCollectionのGetKeyForItemは何を書けばいいの?
return item.Name;みたいに 要素自身が含むキーとして使える値を返す
>>631 興味本位で調べただけだから外してるかも知れん。
NegotiateStreamってクラスがあるらしい。(.Net2.0から)
Object a=new Object(); Object b=a; Object c=b; の場合、cにはaの値のアドレスのコピーを持っているbの値が代入されるということですか? つまり、cの値を得ようとすると、コンピュータは一旦bを経由してからaにたどり着くの? もしそうなら、コピーするほど、処理が重くなる?
経由しないよ
ならない 全部同じ
こっちが分かり易い。 Object ^a = gcnew Object(); Object ^b = a; Object ^c = b;
>>638 ありきたりに、変数のアドレスってのを
コインロッカーのキー番号に例えると、
Object a = new Object();
の時点で、ロッカーを1箇所確保、そのキー番号を a に代入。
仮に、たとえば、そのキー番号が 5 (適当)だったとすると、
Object b = a; // キー番号 5 を b にコピー
Object c = b; // 同じく、5 を c にコピー
という状態になる。
a.Property も b.Property も c.Property も、
どれも 5 というキー番号を経由して、同じロッカーを参照。
>>629 > 上が推奨
> 下はガイドライン違反
マジっすか( ´・ω・)!
上が推奨だったとは・・・
毎回下の方式でやってて、 _a とか tmp_a とか名前考えるのが面倒だったんだよ。
上でいいならこれからジャンジャン this. を使わせてもらうよ
むしろ俺はメンバーには this. 必ず付ける派なんだが。
>>644 フィールドに毎回 this. つけるのって面倒だし見づらくない?
>>645 フィールドであることを区別する意味ではありだと思う。
それを _ つけて区別するくらいなら、this の方がタッチタイプしやすい。
アンダーバーとかの記号は打ちにくいのよね。
this付けるのはフィールドのみ? メソッドやプロパティにはどうする?
フィールドにアクセスするときにわざわざthis.を頭に付けることなんて推奨されてたか?
俺はつける。
お前の話なんてどうでもいいんだ黙ってろ
>>638 もしその考え方が正しいとするならば、
Object a=new int[] {1,2,3};
Object b=a;
Object a=new int[] {4,5,6};
このときにbの値を得ようとしてint[] {4,5,6}を取得することになるよ?
んな馬鹿な話あるわけない。
つーか上記のテストコード書いて試したらすぐ確認とれるだろ。
なんでも質問するようではプログラミングなぞ向いていない。
これくらいの疑問なら自分の頭使って自力で解決できないとちと厳しいぞ。
>>639-642 ありがとうございます。
ずっと疑問だったんで気になってました
高級言語になるほど、内部がどうなってるか見通し利かないでうよねぇ
全部付ける派の人は 継承されたメンバにアクセスするときもthis付けるのかな それともbase?
>>651 それの場合新しいインスタンスを代入しているんだから
bの値を得ようとするわけないのはバカでもわかります
というか、テストコードってどう書くんですか?
cに入っているアドレスが、aの値のアドレスかどうかなんて
あのプログラム動かしただけではわからないはずですけどね
参照の「コピー」というぐらいだから、コピー用に新しくメモリが割り当てられているのでは
と思ったのが勘違いです。だから、cにはaの参照がコピーされたメモリへの参照のコピーと思ったしだいです
これは参照です的な目印がないからな〜
struct Vector { public double X, Y, Z; public double Length { get { return Math.Sqrt(X * X + Y * Y + Z * Z); } set { //現在の長さを取得 double lng = this.Length; //成分を変更する X *= value / lng; Y *= value / lng; Z *= value / lng; } } } サンプル用の自作ベクトル構造体 全部付ける派の人ってのはこれにも全部つけるの? return Math.Sqrt(this.X * this.X + this.Y * this.Y + this.Z * this.Z); とか激しくキモいんだが。 俺はプロパティとフィールドの違いを見るためにプロパティは付ける。 あとはローカル変数とフィールドの区別が必要なときにも当然付ける。 あとは付けない。
メソッドに参照渡しするときに、宣言だけしたパラメータを渡そうとすると int[] a; HogeMethod( a ); 「未割り当てのローカル変数 'a が使用されました。」 てなエラーが返されてしまう。 int[] a = null; HogeMethod( a ); とすれば問題なくコンパイルは通るんだが、これって汚くない? わざわざnullを割り当ててから参照渡しするのはどうも無駄なステップを 踏まされているように思えて仕方がないんだが。上のようなスマートな 方法も通用して然るべきだと思わん?
>>657 こういう話じゃないの?
void HogeMethod(out int [] a) { a = new int [] { 1, 2, 3 }; }
int [] a;
HogeMethod(out a);
最近Javaから移ってきたのですが、構造体の使い道はこんなので合ってますか? バッチ大量データ登録時にトランザクション単位でエンティティビーン的な構造体に値を放り込む →参照渡しでクエリ実行 →構造体はトランザクション単位でfinalyでnull設定 →パフォーマンスアップな上にメモリ節約できて(゜Д゜)ウマー 現状エンティティビーンクラスにclearメソッド用意してインスタンス使い回してますが、果たして、、
>>659 いろいろ勘違いしている。Javaと同じでほとんどのケースでクラスを使うことになる。
>>658 ああ、出力パラメータを指定するという方法もあったね。
でもメソッドを呼び出すときも
> HogeMethod(out a);
"out"キーワードを付けないといけないんだよね。
呼び出すときくらい"out"キーワードは無視させてくれてもいいと思うんだが。
660 662 ご教示ありがとうございます。 構造体はあまり使わない的な文献はよく見かけたのですが、初見なものでなんか使い道あるのでは、と考えましたが、まだ修行がたりないようでしたね、、。
664 :
659 :2008/10/07(火) 03:50:03
連投すみません。 659の問題点は ・エンティティビーンで16バイト以下は現実的でない ・スコープ抜けたら勝手に解放されるのでnull設定は不要 ・パフォーマンスとはそもそも関係ない で合ってますでしょうか?
>>633 WFetchでしたっけ?
あれはSJISのみ対応だったかと思うのですが。
UTF8なのです
>>665 いろいろと制約が厳しいな。
HttpWebRequest の AddHeader でだめってことは、標準ヘッダを
ごにょごにょしたい、ってことかな?
リフレクションで一部書き換えられたようには思うけど、変に細かい技を
使うより、Tcp でちくちくやるのがよさげだね。
>>661 ダメ。
メソッド呼びだした先で勝手に値が書き換えられるってのは嫌われる。
C++ でも、参照渡しがあるにもかかわらず、const 参照しか使わないって人多い。
出力パラメータとして参照渡ししたいときはポインタを使う。
>>656 俺は全部付ける。
MS のガイドラインだと、特に this. つけるとはなってなかった気が。
でも、MS のソースコードの品質チェックツール通すと this. 付いてないと警告出た気が。
thisが必要なとこ以外にばらまかれてると かえって見づらい気がするのでつけないな
.NET的にマウスホイールをカーソル直下のコントロールに送るのって、プロパティとかあるの? MouseEnterでフォーカス移す以外であれば教えて(涙。
>>661 むしろ無いと怖いでしょ
>>664 >null
基本的に値型にnullは入れられません
Nullableを利用するとNullにできるけど…
>パフォーマンス
GCのスキャンコストが減ります
用途によってはボクシング/アンボクシングでかえって遅くなることもあります
と、これ以上はよくわからん
パス
>>661 そういう意味で参照渡しを前提とするパラメータには必ずrefかoutか付けないと
コンパイルが通らないようにすればいいと思ってるんだがC#はそうはなってない
んだよな。
値型の変数を参照渡しするときはoutなりrefなりつけないといけないが、参照型
の値を参照渡しするときは普通の変数のように渡せてしまう。
これじゃあとでコードを見たとき、この部分は参照渡しか値渡しなのか一目で
分からない。参照型の変数でも参照渡しするときはoutかrefを必須にすれば
よかったと思うんだがどうだろうか?
>>673 参照型もref/outが無ければ値渡し。参照渡しするならref/outが必要。
それに値型のなかの参照型メンバの値を変更とか考えると意味が無い。
C#の名称ってどうやって付けてる?どうにもVCとかVBの思考が抜けないんだが 自由なのは分かってるが一般的な付け方がしたいです 関数、プロパティ、名前空間、クラス名、定数は大文字から始める MainForm、UpdateMenbers、LineMax コントロールはプレフィックス(?)を付ける frmMain、btnCancel ローカル変数は小文字から caption、changed 引数はローカル変数と同名を避けるためアンダーバーから _caption 大体こんな感じでいいのかな・・・ あと、引数付きプロパティが使えないが、Get〜とかSet〜ってやらないで、 インデクサ(?)付きクラスでも返した方がC#っぽい?
>>674 > 参照型もref/outが無ければ値渡し。
え( ´・ω・)?
参照の値渡し、参照の参照渡しといいたいのだろう。 その辺はCでもいっしょっしょ。 ポインタの指してる中身を書き換えるだけならポインタをそのまま渡せばいいが、 ポインタそのものを書き換え戻したいなら、ポインタのポインタを渡さないといけない。
>>678 ああ、そういう意味か。
>>673 で言いたかったことはメソッドに値を渡すとき、その値をコピーして
元の値は書き換えないのか、それとも書き換えるのかがメソッドの宣言を
見ただけでは識別しにくいってことなんだよね。
当然この型は値型だから渡しても書き換えされないはず、この型は参照型
だから渡せば書き換えられるはず、という知識を持っておけば分かるけど、
複雑なコードになるとそこらへんをうっかり間違えてしまいトラブルの元に
なるんじゃないかなと。
だから参照渡しをするときは値型だけでなく参照型の変数でもref/outを
必須にすればよかったのにと思ったわけ。
え?
参照型の値渡しにref付けるならば 参照の参照渡しだとrefrefキーワードが必要になるな
>>679 普通にref/outしたい時に困るんじゃない?
>>681 参照型の実体(格納してる変数は単なるメモリの番地)を知ってる人には
その通りだと思うんだが、そういうことを利用者に意識させないのがC#の
利点であることを考えると値型だろうと参照型だろうと参照渡しするときは
ref/outを必須にするように決めた方がいいと思うんだが。
そして参照型をref/out無しでメソッドに渡したら、その参照型のコピーが
メソッドに渡されるようにすればいい。つまりref/outなしで参照型の値を
メソッドに渡して書き換えられても、オリジナルの値にはなんら影響が
出ないようにすると。
これでユーザーがポインタを意識する必要は100%無くなる。
それどうみてもただの値型
むしろパフォーマンスを意識してポインタを知ることになるんじゃね? refだらけになりそうだ
正直その主張はconstマンセーにしか読めない。
なんか初心者が好きなことを書き込むスレになってきてないか
元凶はC++だろ。早く無くなればいいのに・・・
↑なんでそんなに馬鹿なんですか?
>>正直その主張はconstマンセーにしか読めない。 できるよ。 意味不…
やっと*から抜け出せたのに今度はrefかよ それだったら、*のほうがマシだわ
>>688 数値もポインタもいずれも「値」がメソッドに渡される、という意味ではC#は「値渡し」
になるんだろうけど数値が渡されるのかポインタが渡されるのかは型によって
まちまちなわけで、その違いをもっとユーザーに意識させる仕組みが組み込まれて
然るべきじゃないかなと言ったわけよ。
どうやって参照型を自動でコピーするんだよ フィールド全部再帰的になめるのか? それでも駄目だけど そしてrefだらけになると あほかいな
あと文字列(string)は参照型にもかかわらずメソッドに渡すときは全く同じ 文字列がコピーされるからメソッド内でいくらいじくってもオリジナルの 文字列が変更されることはない。 でも文字列の配列(string[])をメソッドに渡すとメソッド内での操作が オリジナルの文字列の配列にも反映される。 ここらへんのルールの違いをもっと明確にユーザーに伝わるような仕組みを 構築すべきじゃないかな?特にC#は後発の言語なんだから。
そうじゃないよ
>>696 stringは確かに不変オブジェクト扱いだけどこの場合何の関係も無いよ
単に自分自身を操作するメソッド/プロパティが無いだけなんだから
リフレクションで値書き換えればちゃんと呼び出し元でも変更される
言いたいことをまとめると、 この型はメソッドに渡すと変更を受けるけど この型はメソッドでいじくり回しても一切の変更を受けない。 こういう型が区別も無く平然と並んでいるのがユーザーの混乱を招くってことよ。 どれが参照型でどれが値型かなんて言語ごとに違って当然なんだから それを曖昧なままごちゃまぜにしていればいつか間違いが発生する。 言語の進化というのはそういううっかりミスをなくす方向で発展していく必要が あると思うんだよ。
で、変更しないならconstつけることにした言語があったよね
型がimmutableかmutableかをその型の前提知識無しに コードを見ただけで一発で判定可能にするってことか?
>>699 値型的な扱いはintとstringだけなんだから
これを覚えるのに大した労力も必要としないだろハゲ
どうも
>>651 以降、 アフォが湧いてるようじゃのう…
C#だけ扱うならな。 だが現実にはC++やJava、VisualBasicと多岐にわたる言語を同時に扱うのが普通だろ。 記憶だけに頼る方式は後々重大なエラーを招く。 「てっきりstring型は呼び出したメソッド先での変更が反映されるものだと思っていました」 そう言いながら打ち上げロケットを派手に爆発させるミスが発生するかもしれない。
どうにも手がつけられない
一日でレス進んでると思ったら(ry。 Stringでも他の参照型でも動作は共通してると思うが、>704の頭の中ではどうなってるんかが疑問だな・・。 Stringクラスの編集系メソッドはすべて新たなインスタンスを返してくるわけで、実体の操作は出来ないんだが。 つまり、参照型であっても、値渡しされたStringメソッドがその先で変更されることがありえないので誤解のしようがない。 ref指定した場合、「メソッド内での値の変更=新しいインスタンスを参照」になるだけ。一貫してると思うが。
Stringメソッドがその先で→Stringがその先のメソッドで
ポインタ難しいスレにそっくりさんがいたのを思い出した そういう人にはサンプルコード書かせると言い逃れできなくていいかもね
>>707 他の言語のString型も同じだと言い切れるかな?
そしてもし他の言語のString型とC#のString型が違ったらどうするんだ?
という疑問を投げかけられて、
「そりゃそれぞれ違いを覚えるしかない」
と答えたらその時点でヒューマンエラーが紛れ込む余地が誕生したと思うべき。
近代の言語が、とくにC#がこの手のヒューマンエラーを極力排除することを
念頭に新たに作り直されたことを考えるとこの点に置いてC#は不十分な言語と
言わざるを得ない。
見方を変えればいまだにC/C++時代のポインタを引きずっているとも言える。
何のためのCTS(共通型システム)だと思ってんだ
正直その程度のリファレンスも見ない奴がマルチリンガル気取るのもどうかと思うけど(IntelliSenceで戻り値見るだけでも気付くはず)、 言語間の実装の違いや動作の相違は、そもそも無いほうがおかしい。 それより、言語内で一貫した基準があって、すべてのクラスがそれに則っていることが言語としては第一だろ。 C#の場合、引数は標準で値渡し、ref・outで参照渡し。それがすべて。そしてStringは参照型。 それを踏まえたうえで値渡しのStringが中で変更されると思うのは、参照のイメージが確立していないか、 Stringのメンバの使い方が分かってないかのどちらかじゃないか? 前者はマとして未熟。後者はウッカリというより、これから使うライブラリのリファレンスも見ない向こう見ずに思える。 皆、長文スマンな。
stringが参照型の値渡しなら string[]はどうなるんだ?
stringは参照型の値渡し string[]は参照型の値渡し stringはmutable string[]はimmutable
反対だ stringはimmutable string[]はmutable
class TaskMem { public IntPtr Ptr; ~TaskMem() { Marshal.FreeCoTaskMem(this.Ptr); } } [DllImport("hoge.dll")] static extern int Foo(out IntPtr ptr); // int Foo(void** ptr); TaskMem mem = new TaskMem(); Foo(out mem.Ptr); とした場合、Fooから返って来てmem.Ptrに格納される間に例外が起きない事は保証されているのでしょうか? それともCERで保護しないと駄目ですか?
>>714 string[]を値渡しするのとref付けて参照渡しするのとで、結果は違ってくる?
どちらもメソッドでの変更が反映されるだけで動作は全く同じになると思うんだが。
わかってないだろうな。
>>717 void f1(string[] a){ a = new []{"a","b"}; }
void f2(ref string[] a){ a = new []{"a","b"}; }
f1、f2が上のように定義されているとき、
string[] b = null;
f1(b); // bはnullのまま
f2(ref b); // bは{"a","b"}になる
>>717 public static void hoge(string[] s)
{
s = new[] { "c", "d" };
}
public static void hage(ref string[] s)
{
s = new[] { "e", "f" };
}
static void Main(string[] args)
{
string[] s = { "a", "b" };
Console.WriteLine("{0} {1}", s[0], s[1]);
hoge(s);
Console.WriteLine("{0} {1}", s[0], s[1]);
hage(ref s);
Console.WriteLine("{0} {1}", s[0], s[1]);
}
>>719 > void f1(string[] a){ a = new []{"a","b"}; }
> void f2(ref string[] a){ a = new []{"a","b"}; }
new演算子を使わずに
void f1(string[] a){ a = {"a","b"}; }
void f2(ref string[] a){ a = {"a","b"}; }
だったらどちらも結果は
bは{"a","b"}
にならない?
はぁぁあ?
string[] a = { "a", "b" }; //おk string[] b; b = { "a", "b" }; //だめ new[] を省略できるのは変数宣言の時だけだな ちゃんとコンパイルして試してから言ってるのか?
どのバージョンで通った?
それにnew[]を省略できるのは構文糖みたいなもんで 入れたり入れなかったりで挙動が変わるなんてこたあないんじゃないかな
なんかねえ 初心者を装ったものすごく巧妙な釣り師というか荒らしが常駐してる気がする
該当人物は置いといて、どこまでが初心者として受け入れられるかって難しいぞ 質問するほうだって、これは知ってます、それも知ってますって一々言うわけに行かないし
virtualは遅い?
>>716 SafeHandle使えば悩む必要なかろ
outなら大丈夫だったとは思うが覚えてない
まあなんだ、初心者はstructやref/outには手を出さないことだね
しかし、平日の昼間からこんなところでレスしてる人ってどういう人なんだろ。 いや別に他意(<=なぜか変換できない)はないんだけど。
職場での息抜きに。 自由な職場っていいよね。
モノさえ仕上げりゃエロゲしようがアニソン垂れ流そうが自由よ。
>>732 鉄は熱いうちに打てじゃないが、structとemunは若いうちから慣れておいた方がいい。
なまじstructやemunを使わなくてもプログラムが書けてしまうだけに。
classは案外早い GCも含めて わざわざstructを使う意義はほとんどない
ま、よほどタイトな処理内で使う場合じゃないと大して変わらんわな
無論状況によってはかなり変わるが、大抵は使い分けるデメリットのが大きい
>>737 ref/out使わずに結果を取り出したいならstructも少しは役に立つんでね?
>>739 言ってる意味が分からない。
いくらふらっとスレでもトンデモなことを言いすぎだろう。
使い分けないデメリット、なら話もわかるが使い分けるデメリットってどういう意味だよ。
あるいはどちらでも用が足りる用途なら迷わずクラスを選べ、
というのなら正しいし理解もできる。
だが構造体に存在意義がないかのような意見はおかしい。
俺は
>>739 じゃないが「それがstructかどうか」を意識しなきゃならなくなるのは苦痛だ
PointやRectangleをいちいちnewしなきゃならんのは実に面倒くさい
しかしform.Location.X = 100;みたいな記述を可能にするためには
Pointに親への参照が必要になってしまいかねないんだよな
なかなか難しい
enumイラネってWin32SDKみたいな定数の溢れたカオスワールドがイイって事?
つーかお前らほどのアニソンマスターなら放送される曲全て持ってるんだろ 公共ラジオで丸一日垂れ流しする意味ねーじゃん
>>742 まあPointにイベント(XChanged)を追加することでも可能だと思うけどね。
746 :
デフォルトの名無しさん :2008/10/07(火) 20:28:06
どとねとの構造体ってinteropでAPIとのやりとりのためにあえて残した もんだと思ってた。win form のrect とかpointが構造体なのはwin32の ラッパだからしかたねーんだなと 勝手に思っていた…。
書き方が悪かったが、使い分けなきゃならないデメリットというのか、 構造体特有の注意点とか意識しないといけないとか、 そういう点をデメリットって言ったんだよ。
巨大な構造体使う奴とか見たもんでな。 基本的に使うな、の方が無難なことが多い。 ちゃんと分かってる奴だけが使うならいいが。
メソッドいらない場合structだと思、
>>749 Cから来た人たちが引っかかる罠なんだよね。
ユーザー定義の値型にstructのキーワードを当てはめたのが失敗だったといわれている。
全然話の流れが分かってないけど、こういう使い方って問題無い? こうしろよってのがあれば教えて下さい。 private List<Data> list = new List<Data>(); struct Data { public string Key; public string Value; }
>>750 そんな穴に落ちる奴はいないだろ。
入門者を斜め読みしただけで別物と普通は分かるよ。
「参照」って言葉の意味がC++と似てるけど別物だったりするのが落とし穴というのならわかるが、
構造体で引っかかる人間なんていないと思う。
リンク先の「変更できない。」という特性を守る場合 KeyやValueの値が可変なら、というか、readonlyだと駄目な状況では 構造体じゃなくクラスを使うべきなんですかね。 Listにクラスを放り込む場合どう書けば???
class Data { public string Key; public string Value; } こんな感じのクラスを用意して Data data = new Data(); で初期化して使う感じでしょうか?
ジェネリックなコレクションにstructを使う場合の注意としては、 IEquatable<T>.Equals(T o)と、大小比較する場合はIComparable<T>.CompareTo(T o)を実装すること。 そうしないと比較のたびにボクシングが頻発して悲惨なことになる。 もっとも基本配列であるListの場合はあまり問題ない。 実装しないなら非ジェネリックのコレクションの方が効率がいい。 登録時ボクシングは1回だけですむ。
>>745 そんなことしたら使い方によってはおっそろしく遅くなるよ
>>755 [TypeConverter(typeof(Design.DataConverter))]
struct Data : IEquatable<Data> {
public string Key { get; set; }
public string Value { get; set; }
public override int GetHashCode() {...}
public override bool Equals(object obj) {...}
public bool Equals(Data alt) { ... }
...
}
namespace Design {
class DataConverter : TypeConverter { ... }
}
>>758 構造体に自動プロパティを使うのは良くない
コンストラクタ書けなくなる
760 :
758 :2008/10/07(火) 22:01:42
そいやそうだな、ごめん
>>757 さすがに意味がわからない突っ込みだ。
そもそもパフォーマンスが重要な場面に適合的なケースの話はしてないと思うんだけど。
762 :
758 :2008/10/07(火) 22:07:04
ん、いや、
>>759 は正確じゃないな
こうすれば書ける。自動プロパティやめとけは同意
struct Data {
public Data() : this() { ... }
}
763 :
758 :2008/10/07(火) 22:08:37
ああもう、 struct Data { public Data(string key, string value) : this() {...} } な
>>751 って以下と変わらない気がするのですが、それでも
>>763 みたいにするべきなのでしょうか。
private List<KeyValuePair<string, string>> MainList = new List<KeyValuePair<string, string>>();
そもそもがstring同士なので大小比較なども行わないし、私の頭では
どうするのが一番良いのかイマイチ理解できない…orz
>>764 ・IL 上はだいぶ変わる(バイナリ互換の問題)
メソッドコールかフィールドアクセスになる
コード互換で言えば、ref で渡せるかどうか程度かな
・リフレクションもだいぶ変わる(バインディングで問題)
var props = TypeDescriptor.GetProperties(typeof(Data));
var prop = props["Key"];
・パフォーマンスかなと考えてもメンバ string だし
まとめると、少しでも変更に耐性のあるプロパティにしとけ
みたいな。というかフィールドにする意味ないなぁと
フィールドのほうが「あえて」立場なんだよ要するに
>>758 の例は struct 作るときに標準的にやっといたほうが
いい処理が含まれてる実装ですなただの
KeyValuePair 使うかどうかはそれ(表現したい対象)が
KeyValuePair の機能しか将来的にも持たないんなら
それでいいんじゃね
>>719 で引数がList<T>にしてみたんだけど
void hoge( ref List<int> a )
{
List<int> a = new List<int>();
}
失礼。 void hoge( ref List<int> a ) { List<int> a = new List<int>(); } としてコンパイルしてみたところ ローカルの変数 'a' をこのスコープで宣言することはできません。 これは、'親またはカレント' スコープで別の意味を持つ 'a' の意味が 変更されるのを避けるためです。 というエラーが返されてしまった。 ref→out に変更しても同じエラーが返される。 なにかまずいことでもしちゃったかな?
参照渡しが値渡しがどうのとか考えるレベルにすら達してないね ローカル変数の宣言になっちゃってる
>>767 {
a = new List<int>();
}
>>768 ちょっと言い訳がましいことを言わせてもらうとList<T>があまりにも最新の技術なもんで
手持ちの参考書に一言も触れられてないのね。暗中模索状態だからつまらないところで
ミスしてしまう(;^ω^)
ちなみに
a = new List<int>();
↑
この()の部分ってコンストラクタの()の名残という認識でok?
名残っていうか引数なしのコンストラクタの呼び出しそのもの
List<int>もintもStringBuilderも全部型の名前 new StringBuilder() new List<int>() ほら同じ
List<T>ってC#の短い歴史から考えると全然最新じゃないんだけど
C#2.0が出たのって4年くらい前だっけ
>>771 ナカーマ
5-6年前に独習C#買って放置→最近また始めたら
ジェネリクスやらLINQやらとんでもないことになっててもうね
>>773 int a = new int();
string b = new string();
もokだっけ?
>>777 stringは引数なしコンストラクタが存在しないので無理だな
FileNotFoundExceptionをToString()で書き出すと System.IO.FileNotFoundException: 指定されたファイルが見つかりません。 ファイル名 'image\hoge.png' です。 デバッガ上での実行だと、↑みたいにFileNameが出力されるのに 実行ファイルを直接開くと無視されるのね。そんなものなの?
>>779 Windowsプロンプトから起動してみたけど
そんな感じのメッセージと一緒にスタックトレースが表示されるよ
783 :
764 :2008/10/08(水) 07:50:28
784 :
783 :2008/10/08(水) 08:46:30
何度もすいません。 最終的に、クラスにしてKey、Valueのプロパティを持ち、その都度 インスタンスを生成する事で上手くいきました。 今の使い方ではあまりパフォーマンスにも影響は無さそうですが 今後の事を考えてクラスで運用します。 また、値型、参照型の違いが何となく分かった気がします。 有り難う御座いました。
C#ってJAVAと同じなの?
釣られないぞ
釣られてみる あえて言おう!違うと! まず名前が違う!これだけでじゅうぶんだ。
君と私は名前が違うけど同じ人間だよねえ。
JavaとJ++とJ#が同じかどうかとなると哲学なのだが
790 :
タイマーについて :2008/10/08(水) 11:35:13
一括りにすればC#もJAVAもプログラム
public PerformanceCounterCategory pcc = new PerformanceCounterCategory("LogicalDisk"); private void GetLogicalDiskRead() { this.listView1.Items.Clear(); foreach (string s in pcc.GetInstanceNames()) { foreach (PerformanceCounter p in pcc.GetCounters(s)) { if (p.CounterName == "Disk Read Bytes/sec" && p.InstanceName != "_Total") { this.listView1.Items.Add(new ListViewItem(new string[]{ p.CategoryName, p.CounterName, p.InstanceName, p.NextValue().ToString() })); } } } } 論理ディスクのReadを調べるためにこんなコードを書いたのですが、 エラーも何も無く実行できるものの値がずっと0になってしまいます。 これは何が問題なんでしょうか?
793 :
792 :2008/10/08(水) 11:57:49
書き忘れです。タイマーで1秒毎の更新にしています。 private void timer1_Tick(object sender, EventArgs e) { GetLogicalDiskInfo(); }
794 :
デフォルトの名無しさん :2008/10/08(水) 12:53:59
>>790 失礼しました、これはタイマーのTickイベントの中で、フォルダの存在を
チェックしていて発生していたようです。メモリの消費量がイベントのたび
に0〜5バイトぐらいずつ増えていくのでなんだろうと思いましたが、タイマー
とは無関係でした。すみません。
795 :
790 :2008/10/08(水) 12:58:04
>>794 ただ、Directory.Exists(_strDirectory)これを行うたびにI/Oのメモリが
消費されるというのは正常なのでしょうか?
>>792 カウンタ毎回取得してたら駄目だろ
欲しいPerformanceCounterを保持しておく
C#とJAVAってできることはほぼ同じなの? 動く環境も。
799 :
デフォルトの名無しさん :2008/10/08(水) 13:41:01
質問 VC++みたいな独自のイベントってどうやって実装するんですか?。 VC++ならWM_USER以下にならない様な番号ふってWM_HAGEとか定義して afx_msgにつけ加え定義 MESSAGE_MAPにつけ加えて て感じだったと思うんですが C#ではどうやるのでしょうか
取りあえずヘルプでイベントの項目読め
>>796 色々と書き直してみてとりあえず動くようにはなったんですが
我ながら何をやってるのかよくわかって無いですorz
変なことやってないですかね?
private List<PerformanceCounter> prfList = new List<PerformanceCounter>();
private void Form1_Load(object sender, EventArgs e){
SetReadInfo();
GetLogicalDiskRead2();
}
private void SetReadInfo(){
foreach(string s in pcc.GetInstanceNames())
{
if (s != "_Total"){
PerformanceCounter p = new PerformanceCounter("LogicalDisk", "Disk Read Bytes/sec", s);
prfList.Add(p);
}
}
}
private void GetLogicalDiskRead2(){
this.listView1.Items.Clear();
foreach (PerformanceCounter x in prfList){
this.listView1.Items.Add(new ListViewItem(new string[]{
x.CategoryName,
x.CounterName,
x.InstanceName,
((long)x.NextValue()).ToString()
}));
}
}
つぎのようなメソッドを定義し、(処理1)でエラーが発生したときただちに関数を抜け出すためには どんな方法を採用するのが推奨されていますか?GOTO文で関数の終わりの方まで一気に 飛ばすのはあまり推奨された方法ではないと聞きました。 void Hoge() { ・・・・ tyr{(処理1)} catch{・・・} tyr{(処理2)} catch{・・・} ・・・ }
>>802 何やってるか分からないてのが一番まずいな
>>803 Microsoft曰く「内部実装なんてどう書こうが知らね勝手にしろ」
>>804 こんな感じでいいでしょうか?
void Hoge()
{
・・・・
tyr{(処理1)}
catch{・・・; return;}
tyr{(処理2)}
catch{・・・; return;}
・・・
}
>>806 catch{ ... ; throw ...}という手もある
C#ってgoto文が実は生き残ってたのかよw
下向き限定なら絶対ダメってほどでもないでそ
switchで使えるのはいけるかもと思った。まだ使ってないけど。
gotoをなくしても break ラベル とか別の文法が増えるだけ。 もう大人なんだからgotoの扱いは自分で責任をもてるだろってこと。 こういう考えでgotoを残してる言語はわりとある。
>>807 throw・・・例外を投げるメソッドでしたっけ?
これをそこで使うことにはどういう意味があるんですか?
例外投げればとにかく処理は呼び出し元に戻せる 場合によるけど何も考えずreturnよりは適切かも
>>814 > 例外投げればとにかく処理は呼び出し元に戻せる
void Hoge()を呼び出した元にもtry&catchの構文を書いて
そこのcatchに例外をthrowするということですか?
↑こんな感じでしょうか? try{ void Hoge(); } catch(Exception e){・・・・} ↑のcatch(Exception e){・・・・}に例外をスローすればvoid Hoge()を抜けられるという発想ですか?
JavaのTreeSetみたいなやつはない?
フォルダ名とファイル名のstringを合成してファイルへのフルパスを生成しようと思ってます。 string folder = @"c:\folder"; string file = "test.dat"; string fullPath = folder + @"\" + file; ここでもし人によってフォルダ名を string folder = @"c:\folder\"; のように末尾に\マークを入れてしまう人がいるかもしれません。 フルパスを合成する前にフォルダ名の末尾に\マークがあるかないか場合分けする必要が あるわけですが、C#のクラスにこのあたりの処理を自動化してくれるものはありませんか? 無ければフォルダ名の末尾に\マークがあるかないかで場合分けして対処する必要があります。
Path.Combineあたり できるかは知らないけどその辺に無かったら無い
ユーザに見せる必要がなければ、\が幾つ並んでも問題ない。 それでも受け付けてくれる。
配列のラストが\\なら消す。
>>816 そういうこと
抜けるだけならreturnを使うけど、例外の時はthrowを使うという手段もある。
特に、その関数無いでは対処仕切れない場合とか、例外の再throwをすることがある。
string GetMessage()
{ try {...} catch (ry) { return " tell a lie :p";} }
より
{ try {...} catch (ry) { throw (new Exception("ごごご、ごめんなさい");} }
のほうが良い
>>823 それやるなら、前の例外も付けてやったほうがいいんじゃない?
catch(Exception e) {
throw (new Exception("ごごご、ごめんなさい", e);
}
普通のrethrowでいいよ
>>825 それもそうだな。ネタを考えてて変なことやっちゃったよ
>>797 C#とJavaって言語だけ見るとダメで、
バックについてるのが Microsoft か SUN かという違いを見ないとダメ。
SUN がクソ。
Linux等でも普通に動くところがJavaと違うんだよな。 だから、おれんとこでは、クライアントアプリがC#、VBどとねと でASPXより、Tomcat−JBOSS-Apatchがまだまだ主流だ。。。 業務サーバーとなれば、どうしてもDB+Unix系がまだまだ主流で 顧客に高級感という付加価値があびせれる。 制御系は、以外とWindowsOnlyでいけること多いんでCのDLL をC#で呼び出す系統のものを提案できるな。
829 :
デフォルトの名無しさん :2008/10/08(水) 22:57:47
>>828 制御の世界でも確かに.netで組む例多くなってきてるな。
ただ、制御もSWもわかる技術者をあつめるのが難しいから
IT側とコントローラ側を分離してるだけで決してwindows オンリーでいける
というわけではない。コントローラ側はむしろ組み込みの世界に近いと思う
コントローラ側は、電気屋がシーケンサからの応答をメモリアドレス指定で 書いてくれるから、それ以降をやればいい。 電気回路、ロボット含めて全体を提案したいのなら、懇意の電気屋で全体 わかるやつと提案したほうが利益お互いとくする。
JAVAってどこでも動くっていうのがウリでしょ? でも結局Java仮想マシンが入ってないと動かないんでしょ? じゃあWindowsでしか動かないとかと一緒で、Java仮想マシン上じゃないと動かないじゃん。 ただ違うのが多くの環境でJava仮想マシンをSUNが提供するよって事だけだよね?
>>831 あの当時のSUNはほんとにすべての環境にJava VM作る気だったと思うよ。
一時は、Java バイトコードをネイティブ実行するプロセッサというか
ハードウェアアクセラレータまで考えられてたし。
実際のところ、「どこでも動く」を狙いすぎて、
コスト係りすぎと、パフォーマンス面での開発者の不満を招いただけな気が。
あと、「どこでも動く」であるためには pure Java である必要があって、
それがとにかく不評。
それに対する MS の答えが、言語間相互運用。
Javaはアプリにしても重いし、アプレットにするとブラウザごと落ちるしほんと糞
>>833 それもね、SOLARIS 上では結構軽いらしいよ。
Windows の牙城を崩したいって思惑があったから
Windows 版最優先で開発しなかったのが痛い。
あと、IBM 版の Windows 用 VM はそれなりに軽快だったのに、
それすらも SUN は認めなかった。
どこでも動くってのも、 そもそも色んな環境があるってのも、それぞれ異なる目的に応じる為なわけで。 それを、全ての環境で共通なことしか出来ないよ、だと使えないよな。
でも確かに。サーバーってのは、普通は大体同じ毎をするもので、 その同じ事が環境によって細々と差異が有って面倒くさかったから。 SUNの考え方もサーバーの世界に限れば非常に正しいことだけどね。
windows用最強言語出来たお。規格化しとくから後は勝手に使ってもいいよ。 あっそれから、繁盛するようならそっちからも集金するから(笑)
↓web上にリクエストを出して、そこから取得したStreamReaderを返すメソッドがあるとします。
void Method(ref StreamReader sr)
{
HttpWebRequest req = (HttpWebRequest) WebRequest.Creat("
http://www.msn.co.jp ");
HttpWebResponse res = (HttpWebResponse) req.GetResonse();
Stream st = res.GetResponseStream();
sr = new StreamReader(st);
}
あとは返ってきたStreamReader srを使って取得したデータを表示したり保存したり好きなように
使えるわけですが、上記のMethod関数で開いた
res
st
は同メソッド内で .Close() しておく必要は無いでしょうか?
ただ同メソッド内で .Close() してしまうと参照で呼び出したsrがそれ以降使えなくなって
しまう気がします。こういう時は放置してしまっても構わないでしょうか?
一般的にはStreamReader引き回すなんてやらないんじゃないか Disposeが必要なオブジェクトは可能な限りスコープ小さくする
>>839 > 一般的にはStreamReader引き回すなんてやらないんじゃないか
そうですか・・・
面倒でもいったんstringかなにかに保存して参照渡しし、その他のストリームは一切
Disposeするという方法が定石なんでしょうか?
やるにしても StereamReaderを返して 使う側でusingするとかかな なんにせよ、ref と書くのは変だ
MSDNより >ストリームを閉じて、再使用のための接続を解放するために Stream.Close メソッドまたは > HttpWebResponse.Close メソッドを呼び出す必要があります。 >Stream.Close と HttpWebResponse.Close の両方を呼び出す必要はありません。 >ただし、両方呼び出してもエラーは発生しません。ストリームを閉じないと、 >アプリケーションで接続が不足する原因となります。 >StreamReader オブジェクトと、その基になるストリームを閉じ、 >リーダーに関連付けられたすべてのシステム リソースを解放します。 ということでsrをCloseすれば連鎖的にCloseされるので問題なし。 それでも普通refは使わないぞっと。 StreamReader Method()
どうもでし( ´・ω・)ノシ
>>842 > ということでsrをCloseすれば連鎖的にCloseされるので問題なし。
> それでも普通refは使わないぞっと。
> StreamReader Method()
return sr;
する前にsrをCloseしたらそもそもreturnするものが無くなるんじゃね?
かといってreturnしてメソッドを閉じた後にCloseしても意味無いしな。
何を言ってるのだ…
何もかもスレ違いだ
以下のようにswitchステートメントの中にif文とかfor文を挿入することってできますか? switch (hoge) { case 1: ・・・・ break; case 2: ・・・・ break; default: if ( ・・・ ) {・・・} else {・・・} break; }
何故まずやってみてから質問しないのだ? 君って誇張なしでどこか精神病んでるんじゃないの?
これ完全に釣りだからほっておいたほうがいいよ 最近いる概念理解できて無い君でしょ いじめられたから荒らしに転じちゃったかなw
>>842 >StreamReader オブジェクトと、その基になるストリームを閉じ、
2つ閉じないといけないんじゃないか?
うんにゃ そいつはStreamReader.Closeの説明だ
ファイナライザがよきに計らってくれる
>>853 Stream 系はよきに計らってくれないことがある。
ある意味仕方ないんだが
明示的にDisposeしないとメモリリークするようなつくりのものもあるよ
Streamを保持し続けて、必要に応じてStreamReaderで読みたい時ってどうやるの? 一度StreamReaderにアタッチしちゃったらもうStreamもろともCloseされちゃうんだよね? やっぱりStreamReaderを保持し続けるのかな?
プロパティに初期値を記憶させようとコンストラクタでプロパティに値を代入しようとしたところ エラーが返ってきてしまいました。 コンストラクタでプロパティの初期値を設定しようという考えはまずいのでしょうか?
>>857 StreamReaderはClose(=Dispose)しなければ勝手にBaseStreamを閉じたりしない
というか、その為のIDisposableだろ
バッファリングがあるからCanSeekじゃないStreamは大変だけどなー
>>858 エラーの内容ぐらい書け
rsl\]tylhorzh;f@eeyq@9
>>858 構造体だろそれ
構造体のメンバをコンストラクタで初期化するときはプロパティは使えない
構造体のメンバはクラスと違って自動的に初期化されないから、 すべてのメンバが初期化されるまでは使えない。 それは構造体の内部でthisを使うのも同じ。
言っている意味がよくわからないんだが どの段階の初期化? なんで自動でできないの?
パフォーマンスのためじゃないの
>>763 みたいなことしたら二重の初期化で無駄
>>864 は
クラスは
コンストラクタに入った時からthisが初期状態で出来上がるけど
構造体だと
コンストラクタを抜けるまでthisが出来上がらないから
コンストラクタ内部ではthisが使えない
……という意味? 間違った行間読みならスルーしてくれ
いいんじゃね 初期化されてない構造体のインスタンスは「使えない」というのは、ほかのメソッドに渡せないということ 自身のインスタンスメソッドにthisとして渡すのも同じことだよ
構造体は実は宣言した時点で値が0に初期化されていたりする。 newするしないに関わらず。
>>870 ってことは自動で初期化できているのは構造体じゃないの?
クラスはnewしないと初期化できないんだし
「ローカル変数は初期化しないと使えない」という、意味的なC#の制限に付随したお約束だよ
プロパティーはgenericに出来ない?
>>870 されないよ。
C#じゃどの道コンパイルエラーになるから確認できないが。
>>873 まともなgetter/setter書けないだろ
プロパティのsetter/getterで初期値を設定できるようにしなかったのはなぜ?
そのほうが自然だから 構造体なんてどうせパフォーマンス目的のニッチで低レベルなものなんだから
何を言ってるのかね?
879 :
デフォルトの名無しさん :2008/10/10(金) 16:17:21
Windowsエクスプローラの右クリックメニューで出て来る「新規作成」の 機能をシミュレートしようと思っています。 その場合、可能であればですが、エクスプローラが使っているDLLか 何かのファイルを横から使うことでも実現できるものでしょうか?その場合は DLL内のAPIを使うために必要な知識としてはどんなものがあるでしょうか?
880 :
879 :2008/10/10(金) 16:21:56
>>879 また、もし .NETFramework のメソッドから可能であるとしたら、
レジストリーから行うことになりそうですが、
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew
という、途中の Discardable なるやっかいな代物を扱う必要が
ありそうでした。このキーはときどき何かの事情で削除されてしまう
場合があるもののようで、
無いときは自分で作成しなければならないようでした!この場合、
そうしたことを実際にしないといけないでしょうか?もし何かうまい
別法があるようでしたら教えて戴けないでしょうか、よろしくお願い
します!
C#のOSS教えてください
staticなメソッドかプロパティを表せるinterfaceのようなものは無いでしょうか。 あるいは実現方法はありますでしょうか。
staticならinterfaceである意味が無いだろ interfaceにstaticメンバを書きたくなることならたまにあるけど
genericsの制約として使いたいって事かな? A<T>を継承する制約をつけても、 A<T>のTに具体的な型を入れないとA<T>のメンバを呼び出せないので、 たとえ出来たとしても意味ないけど。
ジェネリクス導入前まではな > 意味ない 2.0 開発中の頃オペレータまわりの解決策でコネクト提案されたことが あったんだけどふゅーちゃーばーじょんで考えるよとかえってきたんだっけかな 今考えると動的にごにょごにょ出来るし拡張メソッド出来たから必要か どうかは微妙かなあ
>>881 CodePlexとか見たら腐るほどある
888 :
883 :2008/10/10(金) 20:14:05
とりあえずはないということですね。 ありがとうございました。
どういうときにどういう風に使いたかったのか書けば なんか代案が出るかもよ?
890 :
デフォルトの名無しさん :2008/10/10(金) 21:03:10
たまに、ファイル名とかの前に@がついてたりする。 @"input.txt" この文字列の前にくっついてる@ってなに?
121 名前: 民主工作員(群馬県)[] 投稿日:2008/10/10(金) 20:39:47.22 ID:VTMqhhSp
http://up2.pandoravote.net/img/pandora00017620.gif ▼ 123 名前: 四十代(茨城県)[] 投稿日:2008/10/10(金) 20:40:21.77 ID:wpKX9nNW
>>121 マジキチ
▼ 130 名前: 米政府(岐阜県)[sage] 投稿日:2008/10/10(金) 20:41:08.60 ID:fem/bSGF
>>121 kwsk
とりあえず値段が知りたい。商品名もな
▼ 142 名前: 尿管結石(神奈川県)[sage] 投稿日:2008/10/10(金) 20:43:15.93 ID:kbe8vbE3
>>121 小せえw
南くんの恋人か
▼ 149 名前: 給食費未納者(高知県)[sage] 投稿日:2008/10/10(金) 20:44:44.29 ID:OD4/gqiJ
>>121 これはかなり危ない
詳細
表示レス数:5
コピペ君って馬鹿だな、まで読んだ。
>>890 a = @"C:\HOGE\""FOO"""
b = "C:\\HOGE\\\"FOO\""
@付きの場合VBっぽいリテラルにできる。
ファイルのパスや正規表現のときに便利。
Form1を閉じる方法を詳しく教えてください
895 :
デフォルトの名無しさん :2008/10/10(金) 21:48:39
今からプログラム始めたいんですけど 何からしたらいいですか?
897 :
デフォルトの名無しさん :2008/10/10(金) 21:51:22
適当に処理系見繕って、適当にはじめろよ
899 :
895 :2008/10/10(金) 21:54:17
>>898 ありがとうございます。
処理系って何ですか?
901 :
895 :2008/10/10(金) 21:59:27
Form1を閉じる方法をふらっと教えてください
>>902 Close とかそんなメソッドないか?
プログラムで何をしたいのかわからないって時点で向いて無いと思うんだがな やりたいことが多すぎて、背伸びしすぎてパニックになるぐらいが向いていると思う
メニューに終了作ってクリックしたところに this.Close; って書いたらエラーになる
エスパー居ないんですか? エラー 1 割り当て、呼び出し、インクリメント、デクリメント、および新しいオブジェクトの式のみがステートメントとして使用できます。 C:\(中略)Form1.cs 21 13 WindowsFormsApplication1
>>905 this.Close(); な、
メソッドとプロパティの区別をつけよう。
あと、初心者がいきなりGUIは厳しい。
なんですかその意味の無いカッコは ムカついたのでカッコの中に「笑」を入れたらエラーが出ました this.Close(笑); エラー 1 名前 '笑' は現在のコンテキスト内に存在しません。
今、メモ帳をまんまパクったようなやつ作ろうとしてるんです で、メニューバー貼り付けてメニュー周りからやってるんです プロになるとかお金稼ぐとか関係無いですメモ帳まるパクリ作ってみたいだけなんです
意味がないとは失礼ない。 それがメソッド呼び出しであるという意味を与えている。
メモ帳を作るのがどれだけ難しいかを知るのはいいことだ 多分完成はしないだろうけどな
検索・置換とかを実装しなければらくちん
検索・置換なんぞなんも難しくないわ 総合的な機能を持った一つのGUIアプリを作るということ自体が難しいんだ テキストボックス貼り付ければ楽だけどな
開く(O)の処理できた やばいなこれ 天才かもしれん
〜〜ばれ注意〜〜 ・火村夕・・・妹を震災で亡くしており、当時の記憶を思い出させる優子を邪険にしていたが 優子がクラスで虐められている事や、義理の兄にレイプをされている事を聞き 少しずつ優子に心を開き始めることになる。 優子の死後は大学に進学しオーストラリアに日本の音羽と言う町と殆ど同じ町を作 るプロジェクトに携わる。 死んだ優子が日本の教会に居るという噂をミズキから聞き、日本の音羽に向かう。 ・久瀬修一・・・心臓の病気で死が近づいている恐怖に怯えて生活している。 衰弱していくみっとも無い姿を見られたく無いので 前の彼女もレイプして追い出した。 そこで羽山ミズキという厄介な存在に出会ってしまう。 ミズキに絶縁を迫るが言う事を聞かなかったのでミズキをレイプする事に。 ・雨宮優子・・・初恋の人と再会出来た嬉しさの裏に、希望の無い自分と比べると明らかに 恵まれていながら自分を不幸だと思っている火村を憎む事になる。 ある日上靴が盗まれ、その時火村が優しくしてくれたのでそれに漬け込む事にした。 靴をずたずたに裂いたのは自作自演。自分の傷を見せ、更にレイプされて いた事も告白した。これで火村は何も出来ない自分の無力さに自虐し、火村に深い傷 を残させる事が出来るはずだった。しかし火村は自分を騙していた事に関しては 何も言わず、優子の事を守ってやると言ってくれたので優子はそれに頷き、 明良と戦う事を決意する。明良が死んだ後妊娠まで発展したが結局交通事故 で死ぬ。しかし奇跡が起きて優子は幽霊となって再び日本の音羽に現れる。
・雨宮明良・・・優子の義理の兄。 自分の実の妹が死んだ事へのこの世の中への復讐と掛けて優子を 毎日暴行を加える事に。 そして優子が明良の実の妹と同じ年になったクリスマスの日に、 強引に優子の処女を奪った。それ以降、毎日優子をレイプした。 学校で火村と優子に責められたので自宅を放火し家ごと焼死。 ・羽山ミズキ・・・家族一家で車ごと海に突っ込み自殺、母親に首を絞められ水を あまり飲まなかったのでミズキだけが助かった。 又幼い頃に自分が車に轢かれそうな時に優子がかばってくれたおかげで 助かった。(その代わりに優子は死んだ) そして中学3年の夏、ミズキはオーストラリアの音羽に行く。 そこで強がっていて気の弱い久瀬に恋をしてしまう。 ある日久瀬にレイプされしばらく久瀬と会わなくなるが、今死の恐怖から 久瀬を救えるのは自分しか居ないと思い再び久瀬の元へ復縁を求めに行く。
コピペ君って馬鹿だな、まで読んだ。
昔メモ帳作ってみたけど、 元に戻すを複数回できるようにするのが難しいので諦めた。 軽いことが取り得のメモ帳なのに、起動が無茶苦茶遅いメモ帳ができた。
全く関係ないんだけど、 メモ帳って検索とかアンドゥついてたっけ?と思ってしまった
>>920 DelphiならTStringListそのままオブジェクトをつっこめるから
そこにTStringListを入れてた。
C#ならStack<String>を使えば楽ちんだな。(Delphiでもスタック的なものはあったはずだが、なぜか使わなかったな)
>>921 9xのは付いてなかったような気がする。
そんなわけないだろ。 読めるファイルのサイズの上限とANSIにしか対応してないの以外は XPやVISTAのと違いはないでしょ。
例えばVistakソリティアはDirectXになってる
>>922 今ならもっと簡単にできるんだね。
遊びだしSDK1.1のままで十分だったけど勉強し直してようかな。
>>922 stringってファイルサイズが5MBあったら
何か書くたびに5MB使用メモリが増えるのか?
隠しコマンドの現在時刻の挿入がメニューに載った、Vistaメモ帳
自分で定義する「俺様例外クラス」も1クラスごとに1ファイルに保存していくのが流儀なの?
using って使いまくった方がいいの?
うん
クラスのメンバとか使えないよ