ふらっとC#,C♯,C#(初心者用) Part31

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

前スレ

ふらっとC#,C♯,C#(初心者用) Part30
http://pc11.2ch.net/test/read.cgi/tech/1219220127/
2デフォルトの名無しさん:2008/09/29(月) 12:40:21
C#, C♯, C#相談室 Part48
http://pc11.2ch.net/test/read.cgi/tech/1219481054/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/

Live2
http://pc11.2ch.net/test/read.cgi/tech/1203674757/

初心者のためのプログラミング言語ガイド Part11
http://pc11.2ch.net/test/read.cgi/tech/1218282605/
3デフォルトの名無しさん:2008/09/29(月) 12:40:49
4デフォルトの名無しさん:2008/09/29(月) 13:20:37
(前スレ続き)
ってゲームのセーブデータみたいな移動・コピー不可属性のことか?
あれは自分で好きにプログラム組めないからできる話。
5デフォルトの名無しさん:2008/09/29(月) 13:24:49
スレタイの「ふらっと」ってどういう意味なんでしょう(?_?)
6デフォルトの名無しさん:2008/09/29(月) 13:30:13
>>998
そこまで規制する必要ってのも無いとは思うけどなぁ。
機密文章の持ち出しを禁止するため?

簡単に破られても良いなら、ファイルパスがキーになってファイルの暗号化を解くとかその程度で良いんじゃないかな?

それにしても、NTFSにダビング10とかコピーワンスとかあったらいやだなぁ
保護されたファイルを開くと OSがそのプログラムを監視して そのファイルに類似したデータを作成させないようにしたりして
すごく息苦しくていやになるなぁ。

7デフォルトの名無しさん:2008/09/29(月) 13:31:59
8前スレ993:2008/09/29(月) 13:40:28
>>4>>6

そうです、フォルダ自身やファイル自身に属性があれば制限が可能になる
のだとは思うのですが、少なくともWindows系ではそういう制限はやはり
存在しない、ということですよね?

あればそれをそのフォルダやファイルの作成者が設定可能になっていれば
できると思うのですが、今後そういうものは追加される可能性はないでしょうか?

9デフォルトの名無しさん:2008/09/29(月) 13:48:44
いやだから、読めることができるデータがあって、どこかに書き込みできる権限があれば、
コピー不可だろうがいくつでもコピーできちゃうでしょ、ここはプログラム板だよ?
ファイラーが提供されたものしかない世界じゃないと無理。
10デフォルトの名無しさん:2008/09/29(月) 13:52:36
> あればそれをそのフォルダやファイルの作成者が設定可能になっていれば
> できると思うのですが、今後そういうものは追加される可能性はないでしょうか?
誰かエスパーのひと解読頼む
11デフォルトの名無しさん:2008/09/29(月) 13:58:54
>>9
>どこかに書き込みできる権限があれば、コピー不可だろうが
>いくつでもコピーできちゃうでしょ

だから、そのデータ(=フォルダ、ファイル)に色がついていて、
色がナンであるかで、書き込みを制限する属性があれば、という
ことですよ。

>>10
その属性を、それらデータ(=フォルダ、ファイル)の作成者が、
OSのサービス機能(プロパティ->セキュリティタブ、など)を使って
設定すればそれが有効になる、というような仕組みということです。
12デフォルトの名無しさん:2008/09/29(月) 14:00:56
>>11
その属性を律儀に守らないと無理だろ。
プログラム書いたことあるのか?
13デフォルトの名無しさん:2008/09/29(月) 14:02:33
>>11 続き

だから、例えば、「複製作成」の許可と言った感じで、「削除」の許可
の次あたりに追加してあれば、それをチェックすることで、そのフォルダや
ファイルに色がつくわけで、

そのデータを「書き込み」する時点で、それを操作を制限する、という
仕組みということです。これが可能になれば、複製してほしくないフォルダや
ファイルというものを作ることが可能になるわけです。
14デフォルトの名無しさん:2008/09/29(月) 14:04:20
>>12

まあ、ですから、「書き込み」という操作にも影響が及ぶような
仕組みでないといけないわけではありますですが・・・。
15デフォルトの名無しさん:2008/09/29(月) 14:04:56
16デフォルトの名無しさん:2008/09/29(月) 14:05:58
いや、だからさ。
Explorerでのコピー操作ならそれでいいかもしれないよ?

でもさ、プログラム上、ファイルデータは単なるバイト配列として扱われるわけ。
で、単なるバイト配列を適当に作ったファイルに書き込むのを制限しようがないよね?
17デフォルトの名無しさん:2008/09/29(月) 14:13:38
>>16

確かに、どこまでのレベルで制限するのか、という問題はありますね。

ただ、ファイルシステム上の操作と言われる操作機能では制限される、
ということにしておけば、いわゆる 「ファイラ・ソフト」 レベルでは簡単
にはコピーされないで済む、という感じにではできないでしょうか。

ファイラを、そうやって原初レベルのI/Oの操作から作成されてしまえば
確かにできてはしまうのでしょうが・・・。

18デフォルトの名無しさん:2008/09/29(月) 14:17:29
その属性のファイルを読み込んだプログラムはファイルの作成
や書き込みが失敗するように
またほかのプログラムとの通信までできないようにOS側で徹底
的に管理するのか
そこまでやったとしても抜け道は存在するような気がするが
19デフォルトの名無しさん:2008/09/29(月) 14:18:08
>>17 続き

少なくとも、Win32APIや.NETFramework上のファイルシステム関係のメソッド
からは制限できる、といった感じで。それをやっても、制限としては価値は
ないでしょうか。

20デフォルトの名無しさん:2008/09/29(月) 14:22:19
>>18

フォルダやファイルのデータの中身そのもの仕掛けを作り、
それを所定のAPIやメソッドのコピー操作で書き込むときに
引っ掛ける、という感じまででいいかとは思っています。

21デフォルトの名無しさん:2008/09/29(月) 14:28:25
一切ないね
バックアップソフト作る会社が迷惑蒙るだけだろ
22デフォルトの名無しさん:2008/09/29(月) 14:37:06
なんにせよC#でやるべきじゃないのは確か
23デフォルトの名無しさん:2008/09/29(月) 14:50:53
>>21-22

わかりました。アドバイスくださり、
ありがとうございました。
24デフォルトの名無しさん:2008/09/29(月) 15:15:28
新しいFSを開発するスレはここですか?
25デフォルトの名無しさん:2008/09/29(月) 15:16:59
いや、つまんないから。
26デフォルトの名無しさん:2008/09/29(月) 15:29:33
>>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の例外処理に何か間違いでもあったのでしょうか?
28デフォルトの名無しさん:2008/09/29(月) 18:21:20
変数のスコープを考えろ。

それから、直接は関係ないがcatch(Exception)はやめたほうがいい。
29デフォルトの名無しさん:2008/09/29(月) 18:21:28
そりゃスコープから外れたから。
HttpWebResponse res;
ここだけ外に出してごらん。
3027: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;

と書き直してみたところエラーも発生することなくコンパイルが通りました。
これでよかったのでしょうか?
3127:2008/09/29(月) 18:29:37
>>28
> それから、直接は関係ないがcatch(Exception)はやめたほうがいい。

そうするよう参考書に書かれていたんですが(´・ω・`)・・・
32デフォルトの名無しさん:2008/09/29(月) 18:36:38
初心者向けの本なんだろうからしょうがない
本当はMSDNに書いてある形でキャッチするようにしないと
33デフォルトの名無しさん:2008/09/29(月) 18:40:03
tryで例外出してcatch後にもresを使ってるだろ。
それで未初期化のresを使う可能性があるという警告だよ。
tryブロックに入れるか、catchしたらres使う行に行かないようにしなくちゃ。
3427:2008/09/29(月) 19:04:09
>>32
> 初心者向けの本なんだろうからしょうがない
> 本当はMSDNに書いてある形でキャッチするようにしないと

(WebException e)で受け取り、e.Messageあたりでエラーを表示するようにすればいいでしょうか?

>>33
なるほどresは全てtry文の中に収めたほうが堅牢性が増しましたか。
35デフォルトの名無しさん:2008/09/29(月) 19:17:35
引数に渡されたStreamのデータのフォーマットが正しくないときにはどの例外を投げたらいい?
自作?
36デフォルトの名無しさん:2008/09/29(月) 19:23:25
自作しても良いがArgumentExceptionでいいんじゃね
3727:2008/09/29(月) 19:24:30
>>35
自作です。

よく考えたらStreamで受け取ったデータを見て、フォーマットが正しいか否かで
正しくデータを受信できたかどうか判定するのがいいかもしれません。

GetResponse();

の例外ってあまり使う機会は無いかも知れませんね。
38デフォルトの名無しさん:2008/09/29(月) 19:30:32
> GetResponse();
> の例外ってあまり使う機会は無いかも知れませんね。

や、普通は503返されたりとかしたときの対応が必要だと思うが
39デフォルトの名無しさん:2008/09/29(月) 20:17:36
問題は例外キャッチしたあとどうしようとしてるかだ
40デフォルトの名無しさん:2008/09/29(月) 21:08:34
質問です。

生徒、Aさん Bさん Cさん.... がいます。
それぞれの人に、国語や数学のテストの成績があったとして、

(名前,科目,点数)

というようなデータを、それぞれの人がもつ変数に入れていくプログラムを作りたいと考えています。
ここで、(名前,科目,点数)のデータはイベントでランダムに送られてきます。

Aさん、Bさん、... は、生徒クラスを作成し、1人1インスタンスでnewしたとして、

問題1)Aさん、Bさん、... 別のインスタンスを作成する方法がわからない(それぞれにユニークなインスタンス名を与える方法?)

問題2)問題1が解決したとして、ランダムに送られてきたデータを、それぞれのクラスに振り分ける方法がわからない。

というよりも、なんかもっとスマートな解決策があると思うのですが、、、
41デフォルトの名無しさん:2008/09/29(月) 21:10:43
なんかスマートじゃない方法なら、コードが書けるような口ぶりだな。
42デフォルトの名無しさん:2008/09/29(月) 21:11:36
普通は生徒クラスに名前プロパティ用意するんじゃね?
つかクラスに振り分けるって何よ
43デフォルトの名無しさん:2008/09/29(月) 21:20:16
>>40
「インスタンス名」とは変数名のことだと思うが、そんなものはユニークである必要どころか
名前をつける必要すらない。(データベースのレコードに名前なんて必要ないように)

単純化していえばデータ構造は「生徒クラス」のリストでよく、
要は名前なら名前からそれに一致する「生徒クラス」のインスタンスを
検索できる機能を考えればそれで済む。

それができれば問題2も自動的に解決するでしょ。
44デフォルトの名無しさん:2008/09/29(月) 21:20:40
>>40
class クラス:List<生徒> // 生徒Collectionでもおk
{ String 名前; int Get平均点(科目名 科目);}みたいなクラスにAddしていけばいいんじゃない?
45デフォルトの名無しさん:2008/09/29(月) 21:20:51
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
テキストエディタ作ってみました
TeraPad風ですが、プラグインの追加機能などあります
http://www.dotup.org/uploda/www.dotup.org7215.zip.html
47デフォルトの名無しさん:2008/09/29(月) 21:32:37
素早い返信ありがとうございます。

>>41さん
すいませんでした。

>>42さん
プロパティに名前を入れておき、送られたデータに対して名前が一致するかしらべるメソッドを用意して、一致すれば科目データを入れるというやり方の場合、
すべてのインスタンスにデータを送る方法がわかりません。そして、そういう処理は効率が悪いと思います。
変な説明で申し訳ないです。

>>43さん
「生徒クラス」のリスト、という意味が分かりません。クラスのリスト?クラスをリストにする?っていう意味が・・・
リストの項目にクラスのアドレスを入れておいて呼び出す?

48デフォルトの名無しさん:2008/09/29(月) 21:44:11
>>45
そのStudentのコンストラクタ引数は不自然とおもふw
49デフォルトの名無しさん:2008/09/29(月) 21:48:42
dic.Add(d.Name, new Student(d.Name, new[] { new SubjectScore(d.Subject, d.Point) });
こんな感じか
5040:2008/09/29(月) 21:51:08
具体的な例文まで示していただいて頭が上がりません。

>>44さん

class クラス:List<生徒>

の意味が分かりません。すいません勉強不足です。
Listを継承してるというのは分かるんですが、<生徒>という部分がどういう意味なのか、、、

>>45さん

Dictionaryの次の< > でくくった部分の意味が44さんと同じくどういう意味を示すのか分かりません。

Data[] data = GetData(); の意味が分かりません。要素数を指定しない場合の配列は後で要素数をしていしないといけないのでは?
51デフォルトの名無しさん:2008/09/29(月) 21:51:59
オウム返しに聞くな
馬鹿丸出しじゃないか
52デフォルトの名無しさん:2008/09/29(月) 21:59:33
ちなみにList<T>を継承するのは非推奨だからね
53デフォルトの名無しさん:2008/09/29(月) 21:59:35
>>51
まあしかし、そういうスレでしょ。

>>47
リストが分からないならとりあえず配列だと思えばいいよ。
「生徒クラス」の(インスタンスの)配列。

その配列の中から、名前なら名前を使って目的の「生徒クラス」のインスタンスを
検索する方法を考えればいい。

他の人が書いているようにList<T>とかDictionary<T>を使った方が簡単なんだけど、
いきなりそれらのクラスを理解しろって言っても無理っぽいからまずは配列で
やってみたら?
54デフォルトの名無しさん:2008/09/29(月) 22:00:47
55デフォルトの名無しさん:2008/09/29(月) 22:01:08
ごめんDictionary<T>ってそんなのないなw
56デフォルトの名無しさん:2008/09/29(月) 22:03:48
>>50
Dictionary
http://msdn.microsoft.com/ja-jp/library/xfhwa508.aspx
まあこれを読め

配列は

int[] array = GetArray();

...

int[] GetArray()
{
return new int[]{ 1, 3, 5 };
}

こんなことも出来るんだ
57デフォルトの名無しさん:2008/09/29(月) 22:09:58
名前だけをキーにしてdicに入れたら、複数の教科に対応できないじゃん。
いいの?
58デフォルトの名無しさん:2008/09/29(月) 22:14:30
>>57
複数の強化に対応できない、ってのは意味不明だけど、
>>40の話はとりあえず名前のみで検索できれば必要十分に聞こえるけど。
5940:2008/09/29(月) 22:16:46
みなさん本当にありがとうございます。

馬鹿丸出しで申し訳ないですが、みなさんのアドバイスが充分に理解できませんでした。
コメントや参照サイト先をじっくりと読んでみます。

解決の方法は示して頂きましたので、あとは自分で理解してみます。

こんな初心者の為に貴重な時間を裂いていただき本当にありがとうございました。
では
60デフォルトの名無しさん:2008/09/29(月) 22:27:50
>>57
それぞれの生徒が教科と点数のセットのコレクションを持てばいい
61デフォルトの名無しさん:2008/09/29(月) 23:38:39
>>58
Aさんの国語の成績、数学の成績ってデータが入ってきたら、「A」だけのキーでdicに
入れてたら、片方の成績しか入らないじゃん。
62デフォルトの名無しさん:2008/09/29(月) 23:42:01
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 }); // 成績情報の追加
63デフォルトの名無しさん:2008/09/29(月) 23:45:32
>>49
は配列を入れてるZE
64デフォルトの名無しさん:2008/09/29(月) 23:58:48
>>61
いや意味わからんよ。
だからDictionary使うのであれば、Valueは「生徒(の成績)クラス」のインスタンスなんだよ?
65デフォルトの名無しさん:2008/09/30(火) 10:46:45
staticなクラスとかって、どういう時に使うものなんでしょうか?
無理して使う位なら普通のクラスにしてインスタンス生成した方が
いいんでしょうか?
インスタンス生成しなくて良いという事位しか分かりません…。
66デフォルトの名無しさん:2008/09/30(火) 10:57:37
大雑把に言うと状態を持たない(フィールドがない)ことを保証できるクラスならstatic classにできるな
Mathとかね
まあ慣れん間はわざわざ作ることもないか
67デフォルトの名無しさん:2008/09/30(火) 11:15:06
なるほど。「フィールドがない」というパターンで考えると
分かり易いですね。参考になりました。有り難う御座いました。
68デフォルトの名無しさん:2008/09/30(火) 13:19:51
フィールド持っててもOO的に複数のクラスと関連があるけど
決してそのクラスがほかのクラスの参照を持つわけではなかったりした時
staticクラスにする方がいいの?
69デフォルトの名無しさん:2008/09/30(火) 13:31:25
フィールドが全部static readonlyまたはconstでない限りはやめたほうがいい
7069:2008/09/30(火) 13:38:53
static readonlyっていうのはおかしいな
同じメソッドを同じ引数で呼び出したらいつも同じ結果が得られるならstaticでおk
71デフォルトの名無しさん:2008/09/30(火) 16:16:17
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");
}

のようなプログラムを組めばよろしいでしょうか?
それとももっと適切なプログラムがありますか?
72デフォルトの名無しさん:2008/09/30(火) 16:22:44
何をもって存在したのかという定義は?
res.StatusCode が200ならというだけじゃダメなのかな。
73デフォルトの名無しさん:2008/09/30(火) 16:23:21
200つーか、 HttpStatusCode.OKか
74デフォルトの名無しさん:2008/09/30(火) 16:29:22
リダイレクト考えると大変かもね
FileNotFoundのときにリダイレクトで200 OKな404.html返してきたり
75デフォルトの名無しさん:2008/09/30(火) 16:42:49
>>71
それだと HTTP GET してしまうので
req.Method = "HEAD"; するとか
7671:2008/09/30(火) 16:54:42
>>72-74
そうなんですよ。リダイレクトするサーバーだと指定したファイルが存在しない
違うページに飛ばされた上で200:OKが返されたりするんで判定に使うには
今一歩信頼性が無いんです。
77デフォルトの名無しさん:2008/09/30(火) 17:02:39
いやだから定義は?
URL完全一致なの?
別の場所にリダイレクトするけど同じファイル名だったりするのはどうなの?
78デフォルトの名無しさん:2008/09/30(火) 17:03:28
とは言えどうしようもないんじゃないかなHTTPの仕様上
リダイレクトされたら存在しないとするってんなら多少は簡単になるが
存在しなくても200 OKを返すって挙動も可能なんだし(負荷が大きくなるから普通はしないだろうが)
7971:2008/09/30(火) 17:08:26
>>77
はい、指定した場所にURLが一致するファイルが存在しなければ
そのURLは無効というふうに判断したいです。
リダイレクトされた場合は存在しないと判断したいです。
80デフォルトの名無しさん:2008/09/30(火) 17:14:07
あと、どっちかというと

Uri uri = new Uri("http://hoge.com/ahya.txt");
if (uri.Equals(res.ResponseUri))

だろうなあ。
81デフォルトの名無しさん:2008/09/30(火) 18:15:00
HttpWebRequestのメンバにリダイレクトを処理するかどうかのプロパティあったろ。
それ無効にしといて、200帰るかどうかみりゃいいんじゃないのか。
82デフォルトの名無しさん:2008/09/30(火) 18:18:29
>リダイレクトを処理するかどうかのプロパティ
そんなのあったのか、知らなかった
83デフォルトの名無しさん:2008/09/30(火) 19:00:04
ListViewやStringなど標準ライブラリのソースを見る方法はないですか?
84デフォルトの名無しさん:2008/09/30(火) 19:07:21
ちょっとは検索しろ
85デフォルトの名無しさん:2008/09/30(火) 19:08:13
MSのを見るのは会社の規模&審査とすさまじい金額がかかったはずなので、MONOのソースでも見たら?
86デフォルトの名無しさん:2008/09/30(火) 19:11:02
87デフォルトの名無しさん:2008/09/30(火) 19:12:52
>>85
今は閲覧目的に限り無償一般公開されてるんだよ
88デフォルトの名無しさん:2008/09/30(火) 19:52:54
へー
89デフォルトの名無しさん:2008/09/30(火) 20:07:15
独学でC#はじめたんですがsetとgetの使い方がよくわかりません。
よろしければ御教授ください、お願いします。
90デフォルトの名無しさん:2008/09/30(火) 20:09:22
それを言うなら御教示だ
9189:2008/09/30(火) 20:30:45
>>90
すみません間違えました
92デフォルトの名無しさん:2008/09/30(火) 20:31:23
>>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;}と書くことができる
9389:2008/09/30(火) 20:42:27
>>92
すごく丁寧な説明ありがとうございます。なんとか理解できました。
9471:2008/09/30(火) 20:43:19
>>81
どうもです。

req.AllowAutoRedirect = false;

でオートリダイレクトを拒否することができるようになりました( ´∀`)ノシ
95デフォルトの名無しさん:2008/09/30(火) 20:45:20
>>92
それだったらメソッドで書けばいいだろ
なんでプロパティ使うんだよ
96デフォルトの名無しさん:2008/09/30(火) 20:46:52
>>95
だったら、とはどういう意味?
97デフォルトの名無しさん:2008/09/30(火) 20:47:17
プロパティにする利点は使う側にある
98デフォルトの名無しさん:2008/09/30(火) 20:54:38
String と string ってどうちがうの?
99デフォルトの名無しさん:2008/09/30(火) 20:55:50
まったく同じであることが言語仕様に明記されています
100デフォルトの名無しさん:2008/09/30(火) 21:00:25
ごめんなさい
101デフォルトの名無しさん:2008/09/30(火) 21:22:37
質問です。
クリップボードからテキストボックスに文字を貼りつけています。
単に貼りつけると、テキストボックスで文字入力できなくなるので、
・クリップボードの文字をメモリーする。
・クリップボードの文字がメモリーと異なるときは、貼りつける。
・クリップボードの文字がメモリーとおなじときは、なにもしない。
という処理を考えました。

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回は動くのですが、そのあとは取得できなくなってしまいます。
アドバイスお願いします。
102デフォルトの名無しさん:2008/09/30(火) 21:27:03
すみませんが、何をおっしゃっているのか理解できません
103デフォルトの名無しさん:2008/09/30(火) 21:38:31
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とかやらん方がいいと思うよ
104デフォルトの名無しさん:2008/09/30(火) 21:44:42
>>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;
                                   }}}} //行が長すぎるってしかられた

105デフォルトの名無しさん:2008/09/30(火) 21:49:30
>>103
なるほど。
ありがとうございました。
106デフォルトの名無しさん:2008/09/30(火) 22:07:46
>>104
ありがとうございました。
SelectedTextだと追記なんですね!
ちなみに、いまの状況でいちおう文字入力は試してうまくいってました。
107デフォルトの名無しさん:2008/09/30(火) 22:13:33
>>101
だからお前は基礎から学べと言ってるだろ
2度と来るな
108デフォルトの名無しさん:2008/09/30(火) 22:30:51
初心者を煽る荒らしはほんと二度と来ないで欲しいんだけど
109デフォルトの名無しさん:2008/09/30(火) 22:42:47
初心者を甘やかす荒らしはほんと二度と来ないで欲しいんだけど
110デフォルトの名無しさん:2008/09/30(火) 22:50:13
下らんレスの応酬はそれこそ荒らし行為そのものだから二人とも止めとけって。
しかし、初心者っていっても程度問題だと俺も思うけどな。

確かに初心者って真面目に学習してても分からないところ出てきたりするから
そういうのを質問するスレ(つまりここ)があっていいと思うんだが、
最初から地道に学習することを放棄してる奴のケツを拭いてやるなんて作業は
普通の人間はお断りだろ。

それ以前に「日本語の文章表現の初心者」まで救ってやる必要なんてさらさらないと思う。
111デフォルトの名無しさん:2008/09/30(火) 22:52:49
お前の意見を取り入れる気はさらさら無いがな。
112デフォルトの名無しさん:2008/09/30(火) 22:53:55
>>1を読めない奴は二度と書き込むなよ
113デフォルトの名無しさん:2008/09/30(火) 22:59:39
>>1にあてはまらない書き込みがあるの?
114デフォルトの名無しさん:2008/10/01(水) 00:04:19
>>1をC#でおながいします。
115デフォルトの名無しさん:2008/10/01(水) 00:08:17
>>1 なんかいちいち読むかよ。
116デフォルトの名無しさん:2008/10/01(水) 00:33:37
>>1
117デフォルトの名無しさん:2008/10/01(水) 01:03:52
制限時間付きオセロを作りたいのですが、どの様にすれば良いのでしょうか?
118デフォルトの名無しさん:2008/10/01(水) 01:04:59
オセロのアルゴリズムとGUIを作ればいい
119デフォルトの名無しさん:2008/10/01(水) 01:15:32
俺もオセロ作っているんだけど

@どこに石をおけるかを調べる
置ける場所を保存
どこに置くか選ぶ
置いた場合どの石が裏返るから調べる
相手や自分の置いた石を盤面に反映する
@ヘ

それぞれどのクラスに記述すればいいかわからなくなる
120デフォルトの名無しさん:2008/10/01(水) 01:18:51
>>119
オブジェクト指向な人々から見るといろいろ意見はあるんだろうけど、
あんまり気にせずまとめて作っちゃえばいいんでね?
121117:2008/10/01(水) 01:20:21
自分はほとんど知識がないのに今日の朝7時までに提出しろと言われたもので・・・


死亡フラグですよね?
122デフォルトの名無しさん:2008/10/01(水) 01:21:16
>>119
これ読めば?
コンピュータ麻雀のアルゴリズム―AIインターフェイスと思考ルーチンを作る (I/O BOOKS)
123デフォルトの名無しさん:2008/10/01(水) 01:21:33
>>121
うん。
124デフォルトの名無しさん:2008/10/01(水) 01:21:45
>>121
無理諦めろ
サボってたお前が悪い
125デフォルトの名無しさん:2008/10/01(水) 01:23:13
本すすめるならこっちだろ

リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS) (単行本)
126デフォルトの名無しさん:2008/10/01(水) 01:26:15
どこに置くかを決定するアルゴリズムは面倒そうだね。
簡単なのは、四隅、端、その他、って感じで順位づけをしておいて、
置けるときに置く、って感じかな。
127デフォルトの名無しさん:2008/10/01(水) 01:28:39
>>121
俺昔作った奴あるけど人類よりはるかに強いから
お前が作ったことにして提出したら不正がばれるだろ
128デフォルトの名無しさん:2008/10/01(水) 01:29:05
オセロは一枚返しの定跡があるから、まぁそのあたりで評価関数作れば簡単そうだが
終盤はきちんと全幅探索して読み切る
129規制解除ヒャッホーウ:2008/10/01(水) 01:29:11
まったくわからんが俺も考えてみよう
オセロ板クラス
どこに石が置いてあるか
石を置いて石が置ける場所じゃなかったらエラーを返すとかやるクラス
入出力はインデクサとか使って置いたり置いてあるのを調べたりとかか?

相手CPUクラス
石の置いてある箇所からどこに置くのか決めて適切な位置に置く
これが一番ムズそう

審判クラス
順番になったらイベントで通知してくれたり制限時間はかったり


先に謝っておこうなんていうかごめんなさい
130デフォルトの名無しさん:2008/10/01(水) 01:30:27
>>129
いいんだよ
131デフォルトの名無しさん:2008/10/01(水) 01:31:21
>>129
グリーンだよ
132デフォルトの名無しさん:2008/10/01(水) 01:35:34
夏休み最後の日まで宿題とっておいていいのは小学生までだろ
133デフォルトの名無しさん:2008/10/01(水) 01:38:46
課題だったら、多少くそ重くても総当たりやっちゃえばいいんじゃなかろうか。
134デフォルトの名無しさん:2008/10/01(水) 01:41:14
総当り(笑)
アホだろ
135デフォルトの名無しさん:2008/10/01(水) 01:43:21
もうランダムで置く場所決めればいいじゃん
136119:2008/10/01(水) 01:44:23
>>129
大体そんな感じだろうと思って作ってみたら
CPUクラスで盤面情報を取得したり、どこに置くか?置けるのか?
などが、オセロクラスと機能が微妙にかぶるんですよね
それでこんがらがっちょになるわけで。

よくあるオブジェクト指向の考え方の例で
人間クラス>学生クラス。名簿クラス。なんかがあるけど
こういう考えで作ろうと思うと、非常に難しい

どこに置けるかなどは、オセロ板が考えるんじゃなくて人間が考えるわけで
盤面の情報も頭の中にあるわけで、じゃあ、盤面は石の状態だけ保存させておいたほうがいいのか
とか考えて、でも、CPUクラスごとにルールクラスを保持させるのも変な感じだし
とまあ、こんな感じで途方にくれてます
137デフォルトの名無しさん:2008/10/01(水) 01:52:17
>>136
とりあえずCPUは後回しにして
人間二人が交互に打てるところまで作れば?
138デフォルトの名無しさん:2008/10/01(水) 02:02:48
>>130
>>131
どうも
>>136
どこに置けるか?とかは
オセロ盤クラスの置いてpublicにするかもわからんなー
そうすればCPU側やUI側(マウスが置けないマスに入ったら×マークを表示するとか)とかからも使えるような気がする
139デフォルトの名無しさん:2008/10/01(水) 04:02:51
IBMとマイクロソフトが作った昆虫のゲームの名前なんでしたっけ?
dllで昆虫を作ってプログラマーが競い合うものなんだけど
140デフォルトの名無しさん:2008/10/01(水) 04:16:08
上の方見て、何となくClipboardWatcherというクラスを作った
イベントはまだ実装してない(Trace.WriteLineしてるだけ)けど、
コメントほとんどなしの状態で240行程度
141119:2008/10/01(水) 04:17:27
相手と自分を同じクラスで処理してたから混乱していたのかも
Playerという基底クラスを作って
先手、後手の派生クラスを作って処理してみます
142デフォルトの名無しさん:2008/10/01(水) 07:26:15
同じ自作コントロールを複数生成したいが、
他のフォームで使う予定はまったく無い、
といった場合、ユーザーコントロールを作るより、
フォームのファイル内に自作コントロール用のクラスを作ったほうがいいですかね?
143デフォルトの名無しさん:2008/10/01(水) 07:32:46
>>141
質問ついでに答えてみる。
OOPは、登場人物(モノも含む)を全て洗い出すことから始めてみるといい。
144デフォルトの名無しさん:2008/10/01(水) 07:35:24
>>139
いじったことないけど Terrarium?
145デフォルトの名無しさん:2008/10/01(水) 09:39:46
>よくあるオブジェクト指向の考え方の例で
>人間クラス>学生クラス。名簿クラス。なんかがあるけど

ねーよ。
いや例はよくあるけど。
146デフォルトの名無しさん:2008/10/01(水) 10:33:21
hoge.comって実在するんだなw
147デフォルトの名無しさん:2008/10/01(水) 13:02:16
>>140
それってコントロール派生?
私的にNativewindow使用が良いなー
148デフォルトの名無しさん:2008/10/01(水) 16:33:12
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は
型が違うと言われてコンパイルエラーになってしまいました・・・
149デフォルトの名無しさん:2008/10/01(水) 16:37:39
WebException.Status の解説ぐらい読めよ
150デフォルトの名無しさん:2008/10/01(水) 16:48:45
>>148
またかよ。少しはぐぐって自分で調べろ。
「WebException プロトコルエラー」 とかでぐぐっても
解決のヒントになるページがいくつも見つかるだろ。
151デフォルトの名無しさん:2008/10/01(水) 16:49:01
全然使ったこと無いけどMSDNのサイトをちょっと回ってみた結果、

if (WebException.Status == WebExceptionStatus.ProtocolError)
{
if (((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable)
{
とかやるんでないの?
}
}
聞くより検索して、実際にやってみたほうがはやいぜ。
152デフォルトの名無しさん:2008/10/01(水) 17:56:25
>>147
System.Windows.Forms.Timerあたりのソースを参考に、
ComponentのサブクラスでNativeWindowを使用
一応、lock, PostMessageもしてるから、多分マルチスレッドでも使える
153デフォルトの名無しさん:2008/10/01(水) 18:03:45
>>149-151
ありがとうございますm(_ _)m

((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable

で通りました。Responseプロパティの中にさらにプロパティStatusCodeがある
とは思い至りませんでした(´・ω・`)
154デフォルトの名無しさん:2008/10/01(水) 19:00:41
Dictionary<T>をforeach使わずに
要素の変更される処理を施すことは出来ますか?
155デフォルトの名無しさん:2008/10/01(水) 19:01:19
はじめまして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();
}
}
156デフォルトの名無しさん:2008/10/01(水) 19:04:28
Mainメソッドにつっこめばおk
157デフォルトの名無しさん:2008/10/01(水) 19:06:23
どっから持ってきたコードなんだ。
まずはHelloWorldからやってみないか
158デフォルトの名無しさん:2008/10/01(水) 19:10:57
>>154
意味が分かりません
159デフォルトの名無しさん:2008/10/01(水) 19:54:44
>>155
マルチうざい
160155:2008/10/01(水) 19:57:42
>>158
おまえがうざい
やっぱC#スレってカスばっかだな
Delphiにしとくわ
161デフォルトの名無しさん:2008/10/01(水) 19:59:02
>>155です
マルチじゃないですよ
他すれで聞いたらここを紹介されたので改めてこちらで聞きました
よろしく

>>159
氏ねよ粘着
162デフォルトの名無しさん:2008/10/01(水) 20:00:39
>>160
おいおい
>>155は私ですよ
応援はありがたいけど
やりすぎです^^;
163デフォルトの名無しさん:2008/10/01(水) 20:53:45
>>154
Dictionary<T>なんてものはBCLに存在しません
164デフォルトの名無しさん:2008/10/01(水) 20:58:16
>>154
数字の添え字もNext系の操作も出来ないから無理だろ
165デフォルトの名無しさん:2008/10/01(水) 21:03:14
CやC++ならまだしも、string型が正式にサポートされたC#に
いまだchar型が存在する理由ってなんでしょうか?
CやC++に慣れ親しんだプログラマ用の救済措置ですか?
166デフォルトの名無しさん:2008/10/01(水) 21:03:19
GetEnumeratorでIEnumerator取って自分で操作すればおk
167デフォルトの名無しさん:2008/10/01(水) 21:04:58
>>165
パフォーマンスでしょ
文字列から一文字ずつ取り出すような処理を全部一文字のstringにしたら恐ろしいことになりそう
168デフォルトの名無しさん:2008/10/01(水) 21:07:33
いやそれ以前に char は文字で string は文字列なんで違うものだろというか
169デフォルトの名無しさん:2008/10/01(水) 21:21:31
>>167
C#ではcharもstringもみなクラス扱いされていますがそんなにパフォーマンスに
違いが出るものですか?

>>168
stringでも1文字だけ格納すれば実質的にcharと同じになると思うんですが。
170デフォルトの名無しさん:2008/10/01(水) 21:23:38
そもそも値型と参照型では?
171デフォルトの名無しさん:2008/10/01(水) 21:25:01
>>169
Charは整数型ですが
172デフォルトの名無しさん:2008/10/01(水) 21:25:11
ならintも長さ1のint[]があれば必要ないねそうだね。
173デフォルトの名無しさん:2008/10/01(水) 21:25:40
おいおい大丈夫か
174デフォルトの名無しさん:2008/10/01(水) 21:25:58
>>171
なにw

ユーザー定義型ではない値型で実質プリミティブ型になる。
175デフォルトの名無しさん:2008/10/01(水) 21:26:15
>>169
charはクラスじゃねーよカス
処理速度も倍違う

>stringでも1文字だけ格納すれば実質的にcharと同じになると思うんですが。
ならねーよバカ
176デフォルトの名無しさん:2008/10/01(水) 21:26:17
スクリプト言語だと文字列と文字を同一視するのもあるみたいだよ
177デフォルトの名無しさん:2008/10/01(水) 21:28:02
格納してるブツがそもそも違うだろ
stringは参照位置だけどcharはユニコードだろ?
178デフォルトの名無しさん:2008/10/01(水) 21:32:33
デュアルコアの時代に倍違うとかどうでもいいだろ
179デフォルトの名無しさん:2008/10/01(水) 21:33:29
string だけあれば char がいらないって発想なら、
int[] だけあれば int もいらないな。
180デフォルトの名無しさん:2008/10/01(水) 21:34:53
GCの負担にもなるから倍どころじゃないはず

stringって内部的にはやっぱりcharの配列なんだよ
fixed (char* p = str)でポインタ取れたりするw
181デフォルトの名無しさん:2008/10/01(水) 21:36:59
ここまでstringbuilderなし
182デフォルトの名無しさん:2008/10/01(水) 21:38:02
札束があれば札は要らないないってレベル
183165:2008/10/01(水) 21:40:11
釣りでした(^^)v
184デフォルトの名無しさん:2008/10/01(水) 21:40:49
>>182
それは何か変だ。
札は束にしても額が変わるだけだけど。
char と string は点と線くらい違う。次元がそもそも違うというか。
185デフォルトの名無しさん:2008/10/01(水) 21:43:00
>>165
救済措置っつーか、C/C++やってて、文字型のない言語に移っても、べつになんにも困らんだろ。
186デフォルトの名無しさん:2008/10/01(水) 21:43:23
string=文字列
char=文字

これはなんでこうなるの?
187デフォルトの名無しさん:2008/10/01(水) 21:44:03
VBにも文字単体あるだろ
188デフォルトの名無しさん:2008/10/01(水) 21:44:45
C#.NET でWindowsアプリを書くときに、メソッドをフォームのソース
(という言い方が正しいかどうか分かりませんが)に書くことも、
フォームではない別のクラスに書くこともできると思います。

ある画面内で完結する機能はフォームのソースに書くとか
なるべくフォームのソースには書かないようにするとか
方針はいくつか考えられますが、
C#.NET ではどうするのが主流なのでしょうか?

アドバイスよろしくお願いします。

ちなみに、Javaでコンソールアプリを書いたことはありますが
その程度の経験しかありません。
189デフォルトの名無しさん:2008/10/01(水) 21:46:00
フォームをコンソールだと思えばおのずと窓口なはず
190デフォルトの名無しさん:2008/10/01(水) 21:48:01
>>178
私も486DXで十分だと思っていた時がありました
191デフォルトの名無しさん:2008/10/01(水) 21:51:45
>>188
フォームとはイベントドリブンを処理するわけで条件反射みたいなもん
フォームに直接関係しない機能や重複した機能は別途クラスを用意する
192デフォルトの名無しさん:2008/10/01(水) 21:52:55
>>188
愚問だね。
OOPというかクラスを使ったプログラミングが分かればそんな疑問は持たない。

そんなウダウダ疑問を抱くのは一通り理解してからにすべきで、
物事の順序が違うんじゃないのかな?
193デフォルトの名無しさん:2008/10/01(水) 21:54:12
>>175
え( ´・ω・)?
194デフォルトの名無しさん:2008/10/01(水) 22:00:00
構造体です
195デフォルトの名無しさん:2008/10/01(水) 22:00:17
>>188
主流といえるほど主流な方法はないんじゃないかな
196デフォルトの名無しさん:2008/10/01(水) 22:01:04
フォームのボタンを押すことでクリップボードの文字列を取得する

@ボタンが押された
AFormクラスGUI-----処理するメソッドを呼び出し------>クリップボードを処理するクラス.GetText()
BFormクラスGUI<-----------文字列を返す-----------クリップボードを処理するクラス
CFormクラスGUI--------- 文字列を送る------------->テキストボックスに表示//Formクラス内で処理

クリップボードを処理するクラスを作ってしまえば、コンソールアプリにした場合も流用できる
197デフォルトの名無しさん:2008/10/01(水) 22:13:39
窓口のお姉さんと、お姉さんが操作する端末みたいなもん
198デフォルトの名無しさん:2008/10/01(水) 22:18:00
C#のフォームでMVCに挑戦するも、途中でめんどくさくなって結局イベントハンドラにロジック直書き。
199デフォルトの名無しさん:2008/10/01(水) 22:22:52
DirectXならウィンドウとか単なる依り代
200デフォルトの名無しさん:2008/10/01(水) 23:55:34
構造体の場合コンストラクタは1つだけしか無理ですか?
201デフォルトの名無しさん:2008/10/01(水) 23:59:13
いいえ
202デフォルトの名無しさん:2008/10/02(木) 00:00:21
と、思ったら1つも作れないのか・・・
データに値を入れるときが面倒だなぁ
203デフォルトの名無しさん:2008/10/02(木) 00:03:46
引数なしのコンストラクタが作れないだけ
引数のあるコンストラクタはいくつでも作れる
204デフォルトの名無しさん:2008/10/02(木) 00:03:51
>>155です
メインメソッドに突っ込むってどういう意味ですか?
VC#2008を立ち上げて
ファイル→新しいプロジェクトを開くと
Windowsフォーム、クラスライブラリー、WPFアプリケーション、WPFブラウザ、コンソール、空のプロジェクトとあります
どこを開いてどうすればよいですか?
>>155を動くように教えてください
205188:2008/10/02(木) 00:06:02
レスをくれた皆さんありがとうございました。

フォームに直接絡む機能以外は別のクラスに書く、という感じのようですね。
206デフォルトの名無しさん:2008/10/02(木) 00:09:02
>>204
ネタ?

コンソールでプロジェクトを立ち上げると
static void Main(string[] args)
{
}
というのが自動で書かれているからその間に実行させたいものを書く
static void Main(string[] args)
{
 Console.WriteLine("hoge");
}

207デフォルトの名無しさん:2008/10/02(木) 00:09:50
>>155です
よくわからないけど
下記のようなエラーでました
エラー 1 プログラム 'C:\Documents and Settings\don\Local Settings\Application Data\Temporary Projects\Project1\obj\Debug\Project1.exe' は、エントリ ポイントに適切な静的 'Main' メソッドを含んでいません Project1
208デフォルトの名無しさん:2008/10/02(木) 00:11:47
>>206さん
ありがと
今からやってみます
コンソールですね
209デフォルトの名無しさん:2008/10/02(木) 00:13:06
>>203
引数は無理なのねーやっぱり

かといって、クラスで定義するといろいろ面倒だったり
例えばListViewのような構造をもった自作クラスを作った場合
listView1.items=listView2.items
なんてしてもsubitemsまではコピーされなかったり、
また、参照コピーになるから、これは参照しているだけだって意識しながら
やらないとどこかで値を変更されたりするし、かといって、privateにしたりすると
値をコピーしたい場合非常に面倒だし
だから、できるだけ構造体でやってるんだけど

みんなどうしてんのかな?構造体なんて数学的な関数以外使わない?
210デフォルトの名無しさん:2008/10/02(木) 00:16:39
>>205
最初はフォームに全部書いちゃって、あとで必要になったときに
バラす、ってので十分だろ。
211デフォルトの名無しさん:2008/10/02(木) 00:17:23
>>207
だって、Main メソッドがないじゃん。
212デフォルトの名無しさん:2008/10/02(木) 00:22:02
>>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();
}
213デフォルトの名無しさん:2008/10/02(木) 00:24:24
>>212
だからお前は概念から勉強しろと言ってるだろカス
214デフォルトの名無しさん:2008/10/02(木) 00:24:49
>>212
ブレイクポイントでもはって確認するか、src をコンソールに出力すれ
215デフォルトの名無しさん:2008/10/02(木) 00:25:59
>>209
正確な理由は中の人しか知らないけれど、普通に考えると引数なしの
コンストラクタを用意できると配列確保したとき要素数だけコンストラクタ
呼ばないといけなくなるから、こうなっていると思われる。
・・・というかむしろ 3.0 以降の初期化はイニシャライザのほうが推奨かな
という気がする

後その質問に関して言えば「非常に面倒」というほどでもないとしか。
気になるほどでかいデータセットになるとバインディング(+同期機構利用)前提
で考えるわけだし
216デフォルトの名無しさん:2008/10/02(木) 00:28:31
効率が重視されるときは構造体にはイニシャライザ使っちゃダメ
無駄なコピーが発生する
217デフォルトの名無しさん:2008/10/02(木) 00:32:20
>>155です
何度もすいません
「C# src コンソールに出力」でググッたんですが
コンソールに出力されるって文字はいっぱい出てくるんですけど
コンソールへ出力の仕方わかりません
「srcをコンソールに出力」
↑これわかるかた教えてください
218デフォルトの名無しさん:2008/10/02(木) 00:35:57
>>217
Console.WriteLine(src);

参考書でも買った方が早いよ。俺はもうレスしないから。
219デフォルトの名無しさん:2008/10/02(木) 00:37:34
>>215
確かに構造体配列が問題なんだよねぇ。

.NETの規格上は構造体にも引数無しのコンストラクタが作れるんだけど、
配列確保のときには要素ごとにはコンストラクタが呼ばれない。
代わりにArray.Initializeメソッドを使うことになっている。
ttp://msdn.microsoft.com/ja-jp/library/system.array.initialize.aspx
220デフォルトの名無しさん:2008/10/02(木) 00:37:34
using namespace System::Diagnostics;

〜略〜

Debug::WriteLine(src);
221デフォルトの名無しさん:2008/10/02(木) 00:43:48
222デフォルトの名無しさん:2008/10/02(木) 00:44:43
違和感がするな
223デフォルトの名無しさん:2008/10/02(木) 00:46:53
>>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();
}
}
}
224デフォルトの名無しさん:2008/10/02(木) 00:49:56
>>217
1行命令文書く度に質問しているのかい?
ごくろうさま。死んでいいよ。
225デフォルトの名無しさん:2008/10/02(木) 00:51:35
実在するサイトのアドレスを書くな!
サイトへの攻撃とみなして報告しておく
226デフォルトの名無しさん:2008/10/02(木) 00:51:48
>>224
そだよ
粘着キモイぞ氏ね
227デフォルトの名無しさん:2008/10/02(木) 00:52:17
回答したい奴がすればいい
228デフォルトの名無しさん:2008/10/02(木) 00:53:35
>>225
実在するアドレス書いたら駄目だったのか
しらなんだ
これから気をつけるよ
あんまし細かいこと言ってたら神経性の病気になるよ
あなたも気をつけたほうがいいね
229デフォルトの名無しさん:2008/10/02(木) 00:54:29
>>227
質問回答以外はあおりですね
さよなら煽りくん
もうこなくていいからね
230デフォルトの名無しさん:2008/10/02(木) 00:54:42
Mainが二個
231デフォルトの名無しさん:2008/10/02(木) 00:56:10
>>229
質問回答以外はあおりですね
さよなら煽りくん
もうこなくていいからね
232デフォルトの名無しさん:2008/10/02(木) 00:56:30
>>230さん
それ>>155へのヒントですよね
メインってのを2個にすればいいんですか?
それとも現在2つあるので1つにすればいいですか?
何から何まですいません
よろしく^^
233デフォルトの名無しさん:2008/10/02(木) 01:00:06
>>232
氏ね低学歴。お前には一生プログラム無理
234デフォルトの名無しさん:2008/10/02(木) 01:00:32
書いてみるからちょっと待て
235デフォルトの名無しさん:2008/10/02(木) 01:01:05
>>233
お前は>>231を100万回読んでから氏ねカス
236デフォルトの名無しさん:2008/10/02(木) 01:01:55
>>235
質問回答以外はあおりですね
さよなら煽りくん
もうこなくていいからね
237デフォルトの名無しさん:2008/10/02(木) 01:02:59
あわわ、あわわわ
238デフォルトの名無しさん:2008/10/02(木) 01:03:58
>>155さんへ

お前が低学歴なのはこのスレの住民のせいではない
八つ当たりもほどほどにしておけよハゲ
お前はまず概念理解しろ
それすらもできない低学歴は2度と来るなカス
悔しいのか?悔しいから荒らすのか?
もっとポジティブな思考ができないのかねぇこの池沼はw
239デフォルトの名無しさん:2008/10/02(木) 01:05:01
ネットワークプログラミング相談室にいたやつだな
解決したんじゃなかったのか?
240デフォルトの名無しさん:2008/10/02(木) 01:06:02
>>236
わかったよ
あんまし怒らなくていいだろ
仲良くしよう
これからも応援よろしく^^
241デフォルトの名無しさん:2008/10/02(木) 01:11:26
>>238
質問回答以外はあおりですね
さよなら煽りくん
もうこなくていいからね
242デフォルトの名無しさん:2008/10/02(木) 01:14:34
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;
}
243デフォルトの名無しさん:2008/10/02(木) 01:18:34
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 じゃ無理なのかな
244デフォルトの名無しさん:2008/10/02(木) 01:22:20
>デバッグしたところ黒色の画面が数秒間出て終わりました
>エラー表示とかは無いです

コンソールが勝手に閉じるからだろ
245デフォルトの名無しさん:2008/10/02(木) 01:27:56
>>242
>>243
お疲れのところ本当にありがとうございます
>>243さんのコードでエラーなくリクエスト送信は成功していることを確認できました
ありがとうございます^^
246デフォルトの名無しさん:2008/10/02(木) 01:28:05
へッダから文字コード取れば?
247デフォルトの名無しさん:2008/10/02(木) 01:28:28
失せろゴミ
248デフォルトの名無しさん:2008/10/02(木) 01:33:42
>>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;
249デフォルトの名無しさん:2008/10/02(木) 01:35:35
>>246
応援ありがとう
ヘッダから文字列取得は今日のところはやめておくよ
ここの>>155に貼り付けたのと
リクエスト成功した>>243さんのコードとの違いを調べてみるよ
ありがと
250デフォルトの名無しさん:2008/10/02(木) 01:45:37
>>249
2度とくるなカス
251デフォルトの名無しさん:2008/10/02(木) 02:06:27
うっせーはげ
252デフォルトの名無しさん:2008/10/02(木) 02:59:46
   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;
   }

問)この場合コンソールには何が表示されるでしょうか?
253デフォルトの名無しさん:2008/10/02(木) 04:07:18
List<>が万能過ぎるんだけどあえて配列使う意味ってあるの?
254デフォルトの名無しさん:2008/10/02(木) 04:24:17
配列の方が速いだろ
255デフォルトの名無しさん:2008/10/02(木) 06:21:08
>>252
何かひねったのかと思いきや予想通り0なんだけど何が言いたいの…?
256デフォルトの名無しさん:2008/10/02(木) 09:06:40
.NET 4.0って何が変わるんですか
http://msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx
257デフォルトの名無しさん:2008/10/02(木) 09:18:07
>>256
それの日本語記事↓
http://itpro.nikkeibp.co.jp/article/NEWS/20080930/315630/

「詳細は,数カ月以内に発表する予定」だそうだ。
258デフォルトの名無しさん:2008/10/02(木) 10:37:40
>>253
とりあえず複数渡したい・返したいときは配列が速い
List<>を可視メンバの戻り値や引数にしたらマイクロソフトのガイドライン違反!
259デフォルトの名無しさん:2008/10/02(木) 11:11:51
Listは容量を増やす時にコピーが発生するし
最悪半分ぐらいの容量が使われてなかったりするし
気分的に嫌だから作業が終わったらすぐToArrayしちゃう
260デフォルトの名無しさん:2008/10/02(木) 11:14:52
>>258
せんせー、Enumerable.ToList がガイドライン違反ですー
261デフォルトの名無しさん:2008/10/02(木) 11:15:22
それはCollection<T>継承したの返してあとからいじれるようにしとけと
そういう意味合いだった気がするが
262デフォルトの名無しさん:2008/10/02(木) 11:25:32
生のListを渡すってことは
自分の知らないところでListの中身が増えたり減ったりするのを許容するってことだろ
じゃあそのListを管理してるのは誰なのよという話になるだろ
263デフォルトの名無しさん:2008/10/02(木) 11:35:26
>>260
同じの作ってFxCopで検査したら違反になるよ
ToListやToDictionaryはコンストラクタのヘルパみたいなもんなんだから
>>261の意味合いから考えれば問題ない
264デフォルトの名無しさん:2008/10/02(木) 11:36:56
>>259
ToArrayにする作業のほうが時間がかかったりすることはないの?

>>258
可視メンバって、privateメソッドとか?

>>262
なるほど。それはありますね

追加などの作業が終わったら、配列に戻すのがいいのかな
でも、戻り値を配列にした場合、foreach内でそのメソッドを使用するとなると
AddRangeができないから、手間ですよね?
265デフォルトの名無しさん:2008/10/02(木) 11:39:49
ガイドラインを問題にするときの可視メンバは
publicな型のpublicメンバとprotectedメンバ
266デフォルトの名無しさん:2008/10/02(木) 11:46:56
むむ、XNAでContentPipeline作ってLoad<>でList<>返してたが、もしかしてまずいのか。
267デフォルトの名無しさん:2008/10/02(木) 11:48:12
それこそ配列返せばいいじゃん
268デフォルトの名無しさん:2008/10/02(木) 11:48:14
>>265
publicで使っちゃだめなのかー
確かにわけわからなくなるもんなー
ガイドライン天才だなー
269デフォルトの名無しさん:2008/10/02(木) 11:59:57
>>266
Content.Loadってキャッシュでしょ?
弄る前提でList返すのはダメだろ
配列でも微妙だけど
270デフォルトの名無しさん:2008/10/02(木) 12:10:27
>>269
いや中身読んだら終わりなんだけど、中が配列の配列だったからさらに配列にしたくなかっただけ。
まあいったん配列にしますわ。
271デフォルトの名無しさん:2008/10/02(木) 12:21:10
ん?なんでList<>を返しちゃいけないのか詳しく
272デフォルトの名無しさん:2008/10/02(木) 12:32:22
オーバーライドできないから
フィールドじゃなくてプロパティを使うのは後で実装変えられるようにするためだけど、それと同じ
http://msdn.microsoft.com/ja-jp/library/ms182142.aspx
273デフォルトの名無しさん:2008/10/02(木) 12:33:01
>>271
List<>を返すということは元の値を直接操作してもいいよと言っているようなものだから
1人でプログラミングする分には覚えていればいいが、多分忘れる
274デフォルトの名無しさん:2008/10/02(木) 12:50:20
C#てWindows専用?
275デフォルトの名無しさん:2008/10/02(木) 12:58:11
配列で返すようにしたんだけど、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();
  }
}
276デフォルトの名無しさん:2008/10/02(木) 12:59:58
>>260
そいつは新しいListを作り出すメソッドだから問題なし。
内部のListの参照をそのまま見せるのがいけない。
ただしプロパティの場合は予防的コピーを返すことも非推奨となっている。
277デフォルトの名無しさん:2008/10/02(木) 13:10:59
264とか275が何を言いたいのか良く分からない
278275: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を返したらだめなんですよね?
こういう場合どうすればいいの?
279デフォルトの名無しさん:2008/10/02(木) 13:29:42
>>275
voidなのにreturnしてるとか、
foreachの中に何も書いてないとかは関係してないの?
280デフォルトの名無しさん:2008/10/02(木) 13:30:17
エラーが出る(笑)
281デフォルトの名無しさん:2008/10/02(木) 13:39:58
>>275
あとclass Main()ってのもおかしいな
282275:2008/10/02(木) 13:46:33
>>279
>>281
すいません。要点だけわかればと思って他はさらっと書いたので
foreach内は実際はいろいろ処理してます。
List<>を返して、AddRangeで追加していたときは普通にいけましたが
配列を返すようにしたら、どうすればいいかよくわかりません

エラー内容
'kitai' は 'foreach 繰り返し変数' であるため、このメンバを変更できません。
283デフォルトの名無しさん:2008/10/02(木) 13:48:14
どれをどこにAddRangeするのよ
284275: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<>ではなく、配列で返す方法がわからないんです
285デフォルトの名無しさん:2008/10/02(木) 14:00:56
kitai.AddRange(ZahyouKeisan.GetArray());

こんなんでいいだろ
AddRangeの中で内部のListのAddRangeを呼んでやればいい
286デフォルトの名無しさん:2008/10/02(木) 14:07:26
C#ってはやってるの?
Javaとどっちが強い?
287275:2008/10/02(木) 14:13:02
>>285
それって同じことじゃないんですか?
List<>.AddRangeに配列を格納することはできないですよね?
288デフォルトの名無しさん:2008/10/02(木) 14:13:12
>>286
当然Javaの方が主流。
ただし、Winアプリを作るだけならC#3.0の方が生産性が高い。

スキルとして持っていた方が有利なのはJava、
Winアプリのみを作る状況で生産性が高いのはC#。

Javaの求人の方がまだまだ多いな。
289デフォルトの名無しさん:2008/10/02(木) 14:20:44
C#で作ったアプリって.NETだったら
linuxでもmacでも動くんだよね?
290デフォルトの名無しさん:2008/10/02(木) 14:21:04
そして結局日本で一番多いのはVB/VBA
291デフォルトの名無しさん:2008/10/02(木) 14:23:16
>>287
コレクションなら全て入れられる
配列でもなんでも
292デフォルトの名無しさん:2008/10/02(木) 14:54:19
>>291
kitai.pList.AddRange(new List<Point>(ZahyouKeisan.GetToArray()));

適当に記述してたらこれでいけたっぽいんだけど、これでいいのでしょうか?
293275: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内はどう記述すればいいですか?
294デフォルトの名無しさん:2008/10/02(木) 14:59:56
>>282
> エラー内容
> 'kitai' は 'foreach 繰り返し変数' であるため、このメンバを変更できません。

このエラーが重要。

foreach(Kitai kitai in Guntai){
kitai = Zahyou.GetArray(); // (A)
}

(A)のように、foreachの()内部で宣言した変数は
変更できない。だから、エラーがでてるんだと思う。

これが、

foreach(Kitai kitai in Guntai){
kitai.pArr = Zahyou.GetArray();
}

のように、変数のメンバーとかなら変更可能。
295294:2008/10/02(木) 15:01:39
あれ。違うか。
メンバも変更出来ないんだっけ?
296デフォルトの名無しさん:2008/10/02(木) 15:10:07
違う。
foreach(var item in collection)
のitem変数はコレクション内のオブジェクトのコピーだから、
構造体配列等の値型のコレクションにおいてそれをやってもダメだよ〜って話。
変数のメンバといってもその変数自体がコピーされたものだから、メンバを変更しても
元のコレクションには当然反映されない。

参照型のコレクションだったらコピーされた変数はそのまま参照が渡されているので、
foreach内でメンバの変更が可能となる。

せっかくC#を使っているのにCでゴリゴリ書いているコードとレベルが変わらんぞ。
297294: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();
   }
298デフォルトの名無しさん:2008/10/02(木) 15:13:19
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を返せる理由が分からない
299294:2008/10/02(木) 15:22:29
>>296
解説どうもです。
300デフォルトの名無しさん:2008/10/02(木) 15:35:35
>>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();
 }
}
301デフォルトの名無しさん:2008/10/02(木) 15:38:06
変数名が now_enemyCount と new_enemyCount ってのは殺人的だぞ
302300: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();
 }
}
303デフォルトの名無しさん:2008/10/02(木) 15:59:34
あまりにも汚いコードなんで俺が書き直してやったぞ

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;
}
}
304300: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());
}
}
}
305デフォルトの名無しさん:2008/10/02(木) 16:50:39
だめだめじゃないか

- GetZahyouメソッド
  × 戻り値がList<T>
- ZahyouArrプロパティ
  × 型が配列
  × ToArrayが内部状態のコピーとみなせる

てか、それ以前に値型使ってること自体が不適切という指摘をしてあげないと
ttp://msdn.microsoft.com/ja-jp/library/ms229017.aspx
306デフォルトの名無しさん:2008/10/02(木) 17:02:04
WebBrowserコントロールで、DocumentCompleteを使ってElementにマウスイベント登録すると、
javascriptトリガー用の"href=http://hoge.com/#"をクリックしたときにまでNavigate系のイベントが発生するようになるんだが、
コレは仕様なの?(登録先がBody又は対象のA要素のとき発生)
しかも結果的にナビゲートに失敗するから困ってる。

イベント登録しなければ発生しないみたい。
またハンドラの中身が空でもなるみたい。
誰か回避方法知らない?
307300:2008/10/02(木) 17:47:30
>>305
すまん良く分からないんだが、戻り値がList<T>の関数がガイドライン違反なのか?
リンク先を見てみたがその記述はどこにあるの?
この場合は特に問題ないと思うんだけどなあ。

ZahyouArrプロパティについても、配列を返すプロパティがもしかしてガイドライン違反?
っていうか俺よくList<T>のカプセル化のときにこういうプロパティをよく使ってた・・・
インデクサを使えってことなのかな。

仮に返されるものが参照型の配列だったりしたら内部を変更される可能性があって良くないとは思うけど、
この場合は構造体の配列だし、private List<Point> pListについては安全なように見えるんだけどな。
内部状態のコピーが危険なのは参照型コレクションだけとかではないの?
いまいち納得出来ん。

まあTekiki構造体についてはクラスにすべきだと言う意見は納得できる。
308デフォルトの名無しさん:2008/10/02(木) 17:52:37
グーグーレーカースー
309300:2008/10/02(木) 18:09:52
オーケー分かった。

配列を返す操作と内部状態のコピーの時はメソッドを使用して下さいと書いてあったな。
ZahyouArrプロパティ
の代わりに
public Point[] GetZahyouArr(){
return pList.ToArray();
}

とでもしておくか。

しかし戻り値がList<T>のメソッドは使うなという記事は見つけられんかった。
リンク先おせーてくれよ。
310デフォルトの名無しさん:2008/10/02(木) 18:11:36
その代用で使う
〜Collectionってやつがうざい
311デフォルトの名無しさん:2008/10/02(木) 18:22:46
俺もList<T>を返すメソッドを書く事はある
だめだというガイドラインがあるなら俺も知りたい
312デフォルトの名無しさん:2008/10/02(木) 18:24:22
リスト返したらセットアクセッサが無意味化するぞ
313デフォルトの名無しさん:2008/10/02(木) 18:28:44
314デフォルトの名無しさん:2008/10/02(木) 18:29:29
とゆーかカプセル化が崩壊
315デフォルトの名無しさん:2008/10/02(木) 18:30:56
ジェネリック リストを公開しません
http://msdn.microsoft.com/ja-jp/library/ms182142.aspx
Code Analysis Team Blog : FAQ: Why does DoNotExposeGenericLists recommend that I expose Collection<T> instead of List<T>? [David Kean]
http://blogs.msdn.com/fxcop/archive/2006/04/27/585476.aspx

だそうです。
316デフォルトの名無しさん:2008/10/02(木) 18:31:05
>>275
特別にいいもの教えてやる。

っ インデクサ
317デフォルトの名無しさん:2008/10/02(木) 18:32:13
"do not return list" c# とか適当な英文でググるといいよ
ttp://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx
318デフォルトの名無しさん:2008/10/02(木) 18:35:34
>>315
それはprivateフィールドのList<T>を公開するなってことでしょ?
そんなことがまずいのはみんな知ってるだろw

static List<Point> GetZahyou()
{
List<Point> pList = new List<Point>();
//いろいろ計算
return pList;
}

このメソッドがガイドライン違反というのが納得できないだけ。
中でnewしたListをいろいろ計算して、その結果を返すメソッドがガイドライン違反という説明にはなってない。
319デフォルトの名無しさん:2008/10/02(木) 18:41:49
計算結果を返すだけなら別にいいんじゃね
それをどういじくろうが誰も困らないし
320デフォルトの名無しさん:2008/10/02(木) 18:45:04
constがないからな
321デフォルトの名無しさん:2008/10/02(木) 18:46:05
List<T>返す云々以前にまずまともな設計をするべき
322デフォルトの名無しさん:2008/10/02(木) 18:49:40
>>318
わざわざList<T>で返されたら追加することに意味があるのかと思っちゃうじゃないか……
323デフォルトの名無しさん:2008/10/02(木) 18:54:56
>>273
List<>を返すのも配列を返すのもかわらなくね?
結局どうすればいいんだろ
324デフォルトの名無しさん:2008/10/02(木) 18:57:16
パフォーマンスを考えればToArrayしとくべきだろ
で、引数や返り値の配列は変更しないというのは暗黙の了解にしとく
325デフォルトの名無しさん:2008/10/02(木) 18:59:55
Dictionary.ValueCollection みたいに
326デフォルトの名無しさん:2008/10/02(木) 19:01:04
>>323
だよね
わざわざ、ToArrayしてまたList<>にいれるわけでしょ?
変換するのは無意味な気がするんだが
327デフォルトの名無しさん:2008/10/02(木) 19:03:32
> わざわざ、ToArrayしてまたList<>にいれるわけでしょ?
これが言い切れるようなinternalな場合はどうでもいいよ
328デフォルトの名無しさん:2008/10/02(木) 19:03:52
書き込み可能な配列で返すのもよろしくない。
329デフォルトの名無しさん:2008/10/02(木) 19:19:57
それを言ったらオブジェクトを返すこと自体良くないきがするんだが
330デフォルトの名無しさん:2008/10/02(木) 19:21:55
たとえば>>325のは返す本人以外は要素の取得しか出来なかったりする
331デフォルトの名無しさん:2008/10/02(木) 19:25:54
親戚も弄れるけどなw
332デフォルトの名無しさん:2008/10/02(木) 19:27:01
今時ならジェネレータにして使う側がToList()なりToArray()なりするというのが良さそう
333デフォルトの名無しさん:2008/10/02(木) 19:34:11
>>321
まともな設計をお願いします
334デフォルトの名無しさん:2008/10/02(木) 19:41:17
引数なしのstaticメソッドで座標を作ってそれを様々な敵機に入れるなんてのはまともな設計じゃないな
普通に考えたら全部同じ座標になるし、それなら何度もメソッドを実行する意味がない
335デフォルトの名無しさん:2008/10/02(木) 19:58:19
なるほど
やっぱりガイドライン違反じゃないんだな
336デフォルトの名無しさん:2008/10/02(木) 20:23:45
>>334
引数無しなのは質問の要点をわかりやすくするために省略しただけ
実際は玉をよけたり、当たり判定だったりあるし、
敵機の目的地点までの経由地点の座標群を敵機ごとに保持しているだけ
「usingディレクティブがない」と揚げ足取るぐらい蛇足な指摘だと思うんだがな
337デフォルトの名無しさん:2008/10/02(木) 20:29:41
>>335
お前がそう思うんなら そうなんだろう お前ん中ではな
338デフォルトの名無しさん:2008/10/02(木) 20:30:54
>>334
怒るな
怒ったら負けだ
339デフォルトの名無しさん:2008/10/02(木) 20:39:39
既に負けてる
340デフォルトの名無しさん:2008/10/02(木) 20:48:35
なんでわざわざ作りにくい実装にするのよ
341デフォルトの名無しさん:2008/10/02(木) 21:03:40
>>340
作りやすい実装をお願いします
342デフォルトの名無しさん:2008/10/02(木) 21:30:54
戻り値の型にList<T>がまずいのは当然として、
IList<T>なら遥かにいいと思っているんだが違う?
343デフォルトの名無しさん:2008/10/02(木) 21:49:22
List<T>を返すのがなんでまずいんだ?初めて聞いたぞ
それを言ったらオブジェクトの中にList<T>が含まれてたら何にも返せなくなっちゃう
344デフォルトの名無しさん:2008/10/02(木) 21:50:05
>>343
ラッパを返せばいい
345デフォルトの名無しさん:2008/10/02(木) 21:56:16
346デフォルトの名無しさん:2008/10/02(木) 22:04:54
いちいち継承してらんねーよ
347デフォルトの名無しさん:2008/10/02(木) 22:10:43
今日のレスは勉強になったなー
348デフォルトの名無しさん:2008/10/02(木) 22:14:52
なんしか、フィールド変数の値を返す場合はプロパティで
オブジェクトを返す場合メソッドを通して値のやり取りをしろってことでしょ?
349デフォルトの名無しさん:2008/10/02(木) 22:28:04
ボタンをクリックしたら、エクスプローラで全選択するように、ボタンに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") ;}
}
}
350デフォルトの名無しさん:2008/10/02(木) 22:28:11
変更可能なオブジェクトの参照を流出させることのリスク、
そのリスクの管理ができていればどうしようとかまわないと思う。
ようは外部から参照経由で変更された場合に、
そのオブジェクトを内包させているクラスが
値が変わったことを知ることができないということ。

メソッドの場合はメソッド名で内部の参照をさらしているのか、安全なコピーを返しているのか
区別が付くような名前にしておくとか工夫して置けばよい。
プロパティの場合はメソッドを使うよりはいろいろルールがある。
351デフォルトの名無しさん:2008/10/02(木) 22:34:21
>>349
エクスプローラの画面のハンドルが必要になるような。
どうやるかはWin32APIの範疇になる。
352デフォルトの名無しさん:2008/10/02(木) 22:38:51
>>350
>そのリスクの管理ができていればどうしようとかまわないと思う。
そのリスクを減らすためのものがガイドラインでしょ?守らないと不幸なことが起きるかもしれないのがガイドライン。
俺仕様がしっかりしてるならそれでもかまわないが、それが通用しないところではガイドラインが役に立つ。

Delphiで言うと、クラス名はTうんちゃらで始めるという習慣があるが、厳密な言語仕様でもないので守る必要はない
ただ、守らない理由なんて無いけどな(Delphi.netは例外)
TTBaseって支援ソフトがあるんだが、これのプラグインSDKにはTTTBasePluginというクラスがあって、1カ所(ry
353デフォルトの名無しさん:2008/10/02(木) 22:50:36
>>346
何を継承して何をしたいのか知らんが、
>>344-345をするならAsReadOnly()呼ぶだけじゃん
354デフォルトの名無しさん:2008/10/02(木) 22:57:18
>>352
プロパティに関してはそういうガイドラインがあることは承知しているが、
通常のメソッドに関しては見たことがないな。
メソッドの場合は自己責任じゃないかと。
355デフォルトの名無しさん:2008/10/02(木) 23:08:30
まとめるとFramework Design Guidelines第二版買ってねってことだな
ttp://www.amazon.co.jp/dp/0321545613

おk、アジソンからマージンゲット
356デフォルトの名無しさん:2008/10/02(木) 23:18:33
そういえば全然関係ないけど名前付け関係なら我等が .NET
ライブラリにも MessageSecurityVersion とかいうネタクラスが
ありますよ。
この命名規則はさすがにどうなんだろうね
357デフォルトの名無しさん:2008/10/02(木) 23:30:56
>>356
あれはよくわからないけどWS-*とかSOAPとかのネーミングルールなんじゃない(笑
358デフォルトの名無しさん:2008/10/02(木) 23:51:55
MessageSecurityVersionのどこが変なの?
359デフォルトの名無しさん:2008/10/02(木) 23:58:35
ガイドラインって本しかないの?
360デフォルトの名無しさん:2008/10/03(金) 00:08:32
361デフォルトの名無しさん:2008/10/03(金) 00:09:20
>>358
WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005
WSSecurityPolicy11BasicSecurityProfile10 プロパティとか。

ちなみにサンプルコード片。

CustomBinding binding = new CustomBinding();
binding.Elements.Add(
 SecurityBindingElement.CreateMutualCertificateDuplexBindingElement(
  MessageSecurityVersion.WSSecurity10WSTrustFebruary2005
   WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
 )
);

横スクロールはいやというやむを得ない事情により改行を入れさせていただきました
本来識別子なので入れてはいけません
362デフォルトの名無しさん:2008/10/03(金) 00:13:05
>>318はガイドライン違反じゃないよね?
363デフォルトの名無しさん:2008/10/03(金) 00:13:11
>>360
なんだその記事w
日本語でおkなんだがw
364デフォルトの名無しさん:2008/10/03(金) 00:13:47
>>361
これはギャグなのか?w
365デフォルトの名無しさん:2008/10/03(金) 00:15:30
>>361
ネームスペースというのが使えるのにこれだけ長い名前になるんでしょ?
C言語時代のメソッドや変数の名前って相当長かったんだろうな
366デフォルトの名無しさん:2008/10/03(金) 00:27:33
C言語時代は8文字規制とかあたじゃん
36740:2008/10/03(金) 00:27:36
ディレクトリの操作をするときのパス指定で

@"c:\tmp\path"

というような書き方をしますが、 @ ってどういう意味ですか?
368デフォルトの名無しさん:2008/10/03(金) 00:30:42
36940:2008/10/03(金) 00:33:12
>>368さん

参照URLを拝見しました。理解できました。ありがとうございました。
370デフォルトの名無しさん:2008/10/03(金) 00:36:55
>>367
\ -> \\

本来、文字列の中で \ はエスケープなので、\\ と書かなくちゃいけない。
それを \ で済ますことができるようになる
371デフォルトの名無しさん:2008/10/03(金) 00:37:04
>>367
「@文字列」ですな。
例えばファイルのパスを記述する時、「\」はエスケープ文字を意味する記号になるので
通常は「"C:\\Windows"」など[「\\」と\を2個記述しなければいけないのですが、
@を先頭に付ければ「\」を文字列として扱い、一つしか記述しなくても済みます。
37240:2008/10/03(金) 00:41:57
>>370さん, 371さん

丁寧な補足解説ありがとうございます。
おかげでよくわかりました。
373デフォルトの名無しさん:2008/10/03(金) 00:43:01
>>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で設定と参照ができることはわかったのですが、
これをそのファイルごとに非表示にしたり表示したりできれば思います。
375デフォルトの名無しさん:2008/10/03(金) 00:48:04
@"blah\" とかやっても平気なのは何気に凄いね
376デフォルトの名無しさん:2008/10/03(金) 00:50:55
MSDNって、どうしてあんなに遅いんですか?
377デフォルトの名無しさん:2008/10/03(金) 00:51:13
スペッコ不足です
378デフォルトの名無しさん:2008/10/03(金) 00:53:15
つーかパスはC:\\\\\\\\\\\\\\\windows\\\\\\\system32\\\\\\
とかやっても動くぞ
二つ以上連続の\は勝手にOSが読み替えてくれる
379デフォルトの名無しさん:2008/10/03(金) 00:54:41
>>376
仕様です。

IE で見るのが苦痛なサイトを自前で作ってるって笑われてる。
380デフォルトの名無しさん:2008/10/03(金) 00:55:43
MSDNの分かりづらさはなんとかならないのか
専門の校閲係とか雇って分かりやすくしとけよ
381デフォルトの名無しさん:2008/10/03(金) 00:56:13
>>374
プログラムというより、OS の設定の領域。
プログラム的には、シェルエクステンションの仕組みでうんぬんかんぬん・・・
382デフォルトの名無しさん:2008/10/03(金) 00:59:37
>>379
文字が小さくて
拡大すると、どうでも良い部分も拡大されて読めなくなるのは?
383デフォルトの名無しさん:2008/10/03(金) 01:11:39
>>382
仕様です。

JavaScript で文字調整やってやがるから、
フォントサイズいじっても無駄とかだと思う。
拡大鏡の類で拡大すればちゃんと大きくなると思うが。
384デフォルトの名無しさん:2008/10/03(金) 01:18:44
いやかしましは百合ものだろ
初期設定がアレなだけ
385デフォルトの名無しさん:2008/10/03(金) 01:32:23
どこの誤爆だよw
386デフォルトの名無しさん:2008/10/03(金) 01:32:35
かしまし噴いたwww
387デフォルトの名無しさん:2008/10/03(金) 02:30:50
コーラ返せww
388デフォルトの名無しさん:2008/10/03(金) 18:53:33
どなたーか EachWithIndex 実装してる人いませんか?
389デフォルトの名無しさん:2008/10/03(金) 19:54:51
390デフォルトの名無しさん:2008/10/03(金) 20:57:23
>>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();
}
}
391デフォルトの名無しさん:2008/10/03(金) 20:58:07
>>389

これIEnumerable<T>への拡張メソッドにしたほうがいいよね
回りくどくて格好悪い
392391:2008/10/03(金) 21:07:27
意味解らんこと言ってるな
わざわざ余計なインスタンス作ってDo呼び出させる意味がわからない
393デフォルトの名無しさん:2008/10/03(金) 21:13:01
元記事に書いてあるじゃん。
> I still like the "Do" keyword in Ruby to signify the start of a block
394デフォルトの名無しさん:2008/10/03(金) 21:29:54
>>390
Action<T, int>使えよ
395390: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++);
}
}
}
396デフォルトの名無しさん:2008/10/03(金) 21:48:15
IEnumerable<T>はどうした
397デフォルトの名無しさん:2008/10/03(金) 21:50:43
引数名はactionだろ常考
398デフォルトの名無しさん:2008/10/03(金) 21:51:42
Union of Soviet Socialist Republics
399デフォルトの名無しさん:2008/10/03(金) 22:03:47
>>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++);
}
}
}

400デフォルトの名無しさん:2008/10/03(金) 22:11:48
Enumerableの拡張メソッド見た感じじゃthis IEnumerable<T>の引き数名は
sourceだがここでもsourceでいいのかね
401390: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++);
}
}
}
402デフォルトの名無しさん:2008/10/03(金) 22:29:27
派生クラスでプロパティを違う型に変えるのは出来ないの?

class Class1
{
 public Class1 Owner { get{〜} }
}

class Class2 : そlass1
{
 public Class2 Owner { get{〜} }
}
403デフォルトの名無しさん:2008/10/03(金) 22:32:57
>>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++);
    }
  }
}
404デフォルトの名無しさん:2008/10/03(金) 22:33:57
new すればいいんじゃない?
405デフォルトの名無しさん:2008/10/03(金) 22:35:50
オーバーライドでの共変・反変性はサポートされとらんねー
406403:2008/10/03(金) 22:36:48
>>401
参考までにこれも
ttp://msdn.microsoft.com/ja-jp/library/system.linq.enumerable.select.aspx

Enumerable.Selectにもインデックス付きのバージョンがあるんだけど
Enumerable.SelectWithIndexとはならない。
407デフォルトの名無しさん:2008/10/03(金) 22:36:57
じぇねりっく!
408デフォルトの名無しさん:2008/10/03(金) 22:38:04
_
409デフォルトの名無しさん:2008/10/03(金) 22:42:16
public Class1 Owner2 { get{〜} }
public Class2 Owner1 { get{〜} }

( ^▽^)
410デフォルトの名無しさん:2008/10/03(金) 22:45:43
>>399
俺も>>403に一票。てか、俺が書いたとしてもforeachを一行で書くくらいの違いで
クラス名、変数名まで全く同じになりそう
あ、でも型パラメータは一応Enumerableに合わせてTSourceにしとくかな
411デフォルトの名無しさん:2008/10/03(金) 23:10:13
プロジェクトによって、インテリセンスのコメントが
出てきたり、出てこなかったりするんだけど、
何が違うんでしょう?

同じソリューション内にa, b, zの3つのプロジェクトがあったとして、
aからはzのコメントが出てくるのに、bからだとzのコメントが出てこない、
みたいな状態です。
参照設定も同じようになってます。
412デフォルトの名無しさん:2008/10/03(金) 23:25:52
>>403
なるほどなるほど
413デフォルトの名無しさん:2008/10/03(金) 23:32:32
超初心者の質問ですがどなたか願いします
名前空間ってあるじゃないですか
あれって使わないものもusingで指定しても大丈夫ですか?
自分がちょっとテストしてみたところ問題ないような感じなんですよ
めんどくさいので全名前空間usingセット作っておいたら便利なのかと思うんです
何か不都合がおきますか?
414デフォルトの名無しさん:2008/10/03(金) 23:37:32
クラス名が時々衝突する
Timerなんか3つあるしな
415デフォルトの名無しさん:2008/10/03(金) 23:39:39
>>414
わかりました
横着は駄目ですね
ありがとうございました
416デフォルトの名無しさん:2008/10/03(金) 23:43:33
型名をタイプしてからShift+Alt+F10が便利
417デフォルトの名無しさん:2008/10/04(土) 00:06:48
418デフォルトの名無しさん:2008/10/04(土) 15:17:26
c#ってマックで動きますか?
419デフォルトの名無しさん:2008/10/04(土) 15:17:44
動きます。
420デフォルトの名無しさん:2008/10/04(土) 15:26:44
.Net frameworkがインストール可能な環境なら
どこでも動くってことでおk?
421デフォルトの名無しさん:2008/10/04(土) 15:28:06
いいえ
.NetFrameworkに限りません
422デフォルトの名無しさん:2008/10/04(土) 15:44:15
メガマック食いてえー
423デフォルトの名無しさん:2008/10/04(土) 16:06:44
>>422
スーパーサイズで良いですか?マックマクにしてやんよ
424デフォルトの名無しさん:2008/10/04(土) 17:48:38
メモリ上にある画像(byte[]で保持しているjpg画像)を、
HTMLで好きなようにレイアウト組んで表示させたいんだけど、
WebBrowser使ってできるかな?
画像データはファイルに落とさないこと前提で。
425デフォルトの名無しさん:2008/10/04(土) 18:02:57
プロトコルハンドラを書けばいいんじゃない?
それで、<img src="foo:ID"/>とかできるとおもう。

IInternetProtocolとかでぐぐれ
426デフォルトの名無しさん:2008/10/04(土) 18:07:15
何しようとブラウザに画像ファイルとしてキャッシュされる可能性は捨てられんがそれはOK?
427デフォルトの名無しさん:2008/10/04(土) 18:25:09
今ペイントソフト的なのを作ろうとしているんだが…
範囲選択、塗り潰し、グラデーションが上手くできなくて困ってる。
塗り潰しはピクセルごとに色を取得してクリックしたとこと同じなら…とやろうとしたがそれだと離れた場所にある同じ色のピクセルも色が変わってしまう。
グラデーションはLinearGradientBrushでやろうとしたが、グラデーションが繰り返されてフォトショとかみたいにならない。

初心者で悪いんだが、助言もらえると助かる。
428デフォルトの名無しさん:2008/10/04(土) 18:25:21
或いはNetscapeプラグイン、或いはActiveX
429デフォルトの名無しさん:2008/10/04(土) 18:32:05
困ったときはPaint.NET見てみる
俺は見たことも使ったことも無いから参考になるかどうかは知らん
430デフォルトの名無しさん:2008/10/04(土) 18:43:47
無料のSicence Libraryなかなかいいのないよね。
431427:2008/10/04(土) 19:07:47
>>429
前に見たんだが、ファイル数多くてどれがどれだか分からないし、さらに理解もできなくて…
オープンソースの奴がある程度は理解できるようにはならないと駄目だよな…
432デフォルトの名無しさん:2008/10/04(土) 19:35:11
>>425
ありがとう。
ググってみるわ〜。
むずそうだったらファイルに落とすか、
諦めてDataGridに表示とかにするわ。

>>426
全然おk
433デフォルトの名無しさん:2008/10/04(土) 19:44:41
塗りつぶしは上下左右のピクセルを調べて同じ色なら塗る
を上下左右に再帰的に適応していけばできる気がするな
それよりもいい方法があるかもわからんけど
434デフォルトの名無しさん:2008/10/04(土) 19:59:07
>>433
極めて正しいが多分今のPCでは実用速度的に厳しいと思う
塗りつぶしは昔から研究されてるからちょっと調べればアルゴリズム色々転がってるよ
435デフォルトの名無しさん:2008/10/04(土) 19:59:31
>>433
そのまま再帰で書くとSystem.StackOverflowExceptionしそうだな。
多少きれいじゃなくなるけど、非再帰に書き直さないとな。
スタックを使えばできないこともないと思う。

それと、直接塗りつぶすんじゃなくて、
画像と同じサイズの配列(Bitmapでも可)を用意して 塗りつぶすところと塗りつぶさないところのフラグ(マスク)を作ってから
重ね合わせで塗りつぶせば、グラデーションやテクスチャの流し込みとかにも応用できそう。

あと、塗りつぶす前にマスクをぼかしておけば、よりきれいにぬれているように見えるはず
436デフォルトの名無しさん:2008/10/04(土) 22:32:15
ソースコードを記述したファイルの管理について質問させてください
C#はソースの場所と名前空間に特に関連が無いようですが、一般的に従うファイルの置きかたなどあるのでしょうか?
今はVC#がソースを置くディレクトリに全てのファイルをそのまま置いてます
また、クラスとファイルの関係ですが、どうするのが普通なのでしょうか?
Javaみたいに1個のpublic classに対して1個のファイルを作るのが普通でしょうか?

よろしくお願いいたします
437デフォルトの名無しさん:2008/10/04(土) 22:34:42
好きにすればいいよ
438デフォルトの名無しさん:2008/10/04(土) 22:37:45
>>436
> C#はソースの場所と名前空間に特に関連が無いようですが、一般的に従うファイルの置きかたなどあるのでしょうか?

ありません。

> 今はVC#がソースを置くディレクトリに全てのファイルをそのまま置いてます

ファイル数が少ないときはそれでよいかと。

> また、クラスとファイルの関係ですが、どうするのが普通なのでしょうか?
> Javaみたいに1個のpublic classに対して1個のファイルを作るのが普通でしょうか?

一般的にはそんな感じですが、Java と違って、ひとつのファイルに複数のクラスが書けるので、
機能的にまとまったクラス群はひとつのファイルにまとめることもあると思います。
439デフォルトの名無しさん:2008/10/04(土) 23:02:47
>>437-438
レスありがとうございます
参考にさせていただきます

ついでに、もう1個質問です
C#にはパーシャル クラス機能があり、1個のクラスを複数のファイルに分割して記述できると知りました
しかし、使う場面が思いつきません
パーシャル クラスの一般的な使い方とかあるのでしょうか?
440デフォルトの名無しさん:2008/10/04(土) 23:03:38
>>439
VS でウィンドウアプリを作れば、プロジェクトがどういう風にパーシャルクラスを
使ってるかわかるよ
441427:2008/10/04(土) 23:17:19
>>433-435
レスThx、参考になった
塗りつぶしアルゴリズムでググってみたら良さげなのが出たからそれを利用してみる事にする。

続けてで悪いんだが、範囲選択はどうしたら出来るか助言を貰いたい。
442デフォルトの名無しさん:2008/10/04(土) 23:38:10
>>439
基本的に、機械生成コードと手書きコードを合わせて1クラスにするための機構。
443435:2008/10/04(土) 23:47:52
>>441
矩形だけなら始点(sx,sy)と終点(ex,ey)を保持するだけで良いが
それ以外を選択するには、Bitmapで形を保持すると良い
PictBearは選択範囲をBitmapで保存できたから、多分そんな形でやってるはず。

>>442
WPF,XAMLがある今、いらない子?
444デフォルトの名無しさん:2008/10/04(土) 23:50:45
>>443
いや、WPF 以外にもいろいろ使われてる。

WPF の XAML も、ビルドの途中で partial class を自動生成してる。
445デフォルトの名無しさん:2008/10/04(土) 23:50:50
>>443
形の保持ならGraphicsPathでよかろうよ
446デフォルトの名無しさん:2008/10/05(日) 00:07:30
ラスタ形式の画像の選択範囲は、
αチャンネルで持つのが普通な気が。
447デフォルトの名無しさん:2008/10/05(日) 01:03:01
splitで出力された1次元配列にいくつの要素があるかわかるメソッドってない?
448デフォルトの名無しさん:2008/10/05(日) 01:04:24
Count()
449デフォルトの名無しさん:2008/10/05(日) 01:05:07
>>447
ubound
450デフォルトの名無しさん:2008/10/05(日) 01:05:29
ごめん、VB と勘違いした
451447:2008/10/05(日) 01:08:36
即レスサンクス!
Count()はVBで>>448=>450でおk?uboundを使ってみます!
452427:2008/10/05(日) 01:11:46
助言してくれた人たち、ありがとう。
教えてもらった方法をなんとか試してみる。
453447:2008/10/05(日) 01:16:32
ん、、?
uboundがVBかorz
454デフォルトの名無しさん:2008/10/05(日) 01:25:10
現実では無理だと悟ったので、人工知能の少女を作って仮想世界で彼女作ろうと思うのですが
C#でできますか?
455デフォルトの名無しさん:2008/10/05(日) 01:28:10
C#はそんな貴方の夢を叶えます
456デフォルトの名無しさん:2008/10/05(日) 01:53:29
>>440
レスありがとうございました
自分は今のところコマンドプロンプトで実行するアプリケーションしか作ってないので、そのうち勉強させてもらいます


すみませんが、またまた質問させてください。
今度は例外処理に関してです。
C#だと、例外は必ずしもtry~catchしなくて良いのでしょうか?

Encoding.GetEncoderメソッドを使うプログラムを考えているのですが、特に例外処理しなくても、コンパイルも実行もできてしまいます
おそらく、このメソッドは存在しない文字コードを指定すると例外を発生させますよね?
そのための例外処理が必要だと思うのですが、どうなってるんでしょ?
Javaで言うところのRuntimeExceptionが出ているのでしょうか?

APIを調べたのですが、ttp://msdn.microsoft.com/ja-jp/library/system.text.encoding.getencoder.aspxを読んでも、例外関係の情報が入手できません。

例外の基本的な処理の考え方や、ドキュメントからの例外情報の入手方法を知りたいです。
よろしくお願いいたします
457デフォルトの名無しさん:2008/10/05(日) 01:59:56
>>456
いちいち Java と比べるのはやめれ。

例外処理をしなければ、UnhandledException が出て、アプリが終了するだけ。
458デフォルトの名無しさん:2008/10/05(日) 09:04:26
GetEncoder自体はEncoderオブジェクト返すだけだし例外投げる要素が無いな
459デフォルトの名無しさん:2008/10/05(日) 10:33:11
>>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のような違いはないのでしょうか?

よろしくお願いいたします。
460デフォルトの名無しさん:2008/10/05(日) 10:34:34
>>456
変な引数与えたときはたいてい ArgumentException。

Java と比べてってことは、「throws リストはないの?」ってことだろうけども。
あれは、「内部実装を外部に漏らしてしまう」って欠点がある割に、
どうせ「面倒だったらException型でcatchしちゃえ」って人が多くて
対して役に立たないから C# では採用しなかった。
461デフォルトの名無しさん:2008/10/05(日) 10:38:38
>>459
http://msdn.microsoft.com/ja-jp/library/system.exception_derivedtypelist(VS.80).aspx

例外処理の強要は、Java みたいに throws リストでやるんじゃなくて、
単体テスト書いて、ちゃんとコーナーケースのテストもして、
例外が出たらテスト通さないようにするのがいいと思う。
462デフォルトの名無しさん:2008/10/05(日) 11:11:25
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等ありましたら、教えてください。
宜しくお願いします。
463デフォルトの名無しさん:2008/10/05(日) 11:19:38
はじめに入ってるのはそういうテンプレートだから
消えるのは多分使ってないと判断されたから
追加されるのは使うから

IContainerはComponent派生クラスの後片付け(Dispose呼び出し)のルール
自分がDisposeされるときに自分の持ってるComponentもまとめてDisposeするため
464デフォルトの名無しさん:2008/10/05(日) 11:42:59
>>460-461
レスありがとうございます
確かにJava使ってたときもなんでもかんでもExceptionでcatchなさる御仁は多かったですね
うちの会社はルールが厳しくて許されませんでしたけど、下請けに出した古いコードはcatch(Exception e)の嵐…
しかも、何も処理して無いことも多いですし、酷いときはVMが突然終了するコードもありましたね


現実問題、例外処理はどうするもんなんでしょ?
たとえば、ArgumentExceptionとかはそもそもメソッドの使い方を間違えているわけだから、例外が出たらプログラマの責任でテスト失敗てのは納得できます
だから、ArgumentExceptionをcatchして例外処理を記述する必要は無いと思います

しかし、ファイル読み込みに失敗とかのケースはやはりcatchしてなんだかの処理をすべきですよね(少なくともアプリが突然終了はないですよね)
catchして処理すべき例外とプログラマの責任でそもそも例外が出ないようにテストする例外と、なんか、その辺を解説している記事とか本とかないですかね
465462:2008/10/05(日) 11:43:51
>>463
レスありがとうございます。

Component派生クラスのオブジェクトをFormの
System.ComponentModel.IContainer componentsに登録させておき、
フォームをDisposeするときに一緒にDisposeさせる…

上記のような処理のためcomponentsが存在している。
といった理解でよろしいでしょうか?
466デフォルトの名無しさん:2008/10/05(日) 11:47:56
>>465
うん
467462:2008/10/05(日) 11:50:22
>>466
ありがとうございました。
468デフォルトの名無しさん:2008/10/05(日) 11:51:50
Silverlight2RC0来たね
469デフォルトの名無しさん:2008/10/05(日) 12:21:11
半透明なコントロールを親コントロールに貼り付けたとき、
親コントロールが子コントロールの領域を描画しなくなって
表示がおかしくなるのを防ぐために設定するのって何だっけ?

変な日本語ですまn
470デフォルトの名無しさん:2008/10/05(日) 13:06:53
>>465
厳密に言うとそれだけじゃなくて Container Site Componentの
結合のために存在している。
しかし、この辺は ComponentModel の基本的なことだから押さえた
ほうがいいともいえるけどコンポーネントを作るんじゃなく使うだけ
なら気にしなくてもいいからわかんなくてもいいかも。
471469:2008/10/05(日) 13:12:09
追記

Win32で言うところの
WS_CLIPCHILDREN と WS_CLIPSIBLINGS
を外したいってことなんだが。
472デフォルトの名無しさん:2008/10/05(日) 16:26:58
例外処理はこれで十分

static void Main(string[] args)
{
  try{
     //ほげほげ
  }
  catch(Exception){
    MessageBox(e.ToString(), "えら〜");
  }
}
473デフォルトの名無しさん:2008/10/05(日) 16:28:36
hogeってなんなの?
474デフォルトの名無しさん:2008/10/05(日) 16:32:19
hageやhigeの変種
475デフォルトの名無しさん:2008/10/05(日) 16:32:58
>>472

e
476デフォルトの名無しさん:2008/10/05(日) 16:33:04
hogeの定義は無いよ
適当とか未確定とかニュアンスでいいんじゃないでしょうか?
477デフォルトの名無しさん:2008/10/05(日) 16:37:12
では、ハナモゲラ語とはなんですか?
478デフォルトの名無しさん:2008/10/05(日) 16:59:13
Lengthだろ
479デフォルトの名無しさん:2008/10/05(日) 17:05:41
!
480デフォルトの名無しさん:2008/10/05(日) 17:13:57
想定外の例外は最上位でキャッチしてログ書いてメッセージ出して終了。
普通に想定される処理続行可能な例外はその場でキャッチして適度に処理。
続行出来ないようなのはあえてキャッチせず最上位に任せるか、
ラップして再スローしてやっぱり最上位に任せる。

例外処理って、厳密にやろうとすると細かいルールばかりになって、
しかもかなり慎重に考えないと意味なかったりやたらコーディングが複雑になったりして、
結局シンプルに決めた方がましなことが多い。
481デフォルトの名無しさん:2008/10/05(日) 17:37:48
変数と配列・リストで命名規則の違いとかってありますか?

たとえば変数の場合は出だしが小文字でそれ以降は大文字

例) int variableNumber;

みたいな感じにするのが一般的とされていますが、これと似たような暗黙上のルールは
配列・リストにありますか?
482デフォルトの名無しさん:2008/10/05(日) 17:54:20
>>481
暗黙っていうか、それはcamelスタイルって名前がついてる。
MSのクラスライブラリ作成のガイドラインに、なににどのスタイルを使うとか書いてある。
483デフォルトの名無しさん:2008/10/05(日) 17:58:11
配列やリストだって変数に入れるインスタンスじゃん?
484デフォルトの名無しさん:2008/10/05(日) 18:02:20
ローカル変数に大文字二十日湾だろ不通
485462:2008/10/05(日) 18:10:02
>>470
基本的なことなら理解したいのですが、
解説サイトとしてはMSDNの「Visual Studioによるコンポーネント」
のあたりを読むしかないですかね?

コンポーネントのありがたみというかコンポーネントでないと
出来ない事なんかがよくわかりません。
486デフォルトの名無しさん:2008/10/05(日) 18:56:11
どうしてプロパテーはジェネリックに出来ないの?
487デフォルトの名無しさん:2008/10/05(日) 19:13:51
うまく質問している内容が伝わるか不安ですがよろしくお願いします

やりたいのは、データをファイルに保存するクラスを作りたいのですが
テキストファイル形式で保存するんじゃなくて、テキストエディタで開いても
みれないデータ形式ありますよね?.exeとか
そんな感じで保存したいんだけどどういう知識が必要なのかな?

保存したいのは計算結果の数値や文字列データです
488デフォルトの名無しさん:2008/10/05(日) 19:16:59
>>487
好きにフォーマットを考えて、好きに読み書きすればよろし。
489デフォルトの名無しさん:2008/10/05(日) 19:45:24
>>488
だから、普通に書き込んだらテキストファイルで見れるから
そうならないように書き込みたいからやり方教えろって言ってるんだけど
お前メクラか?
490デフォルトの名無しさん:2008/10/05(日) 19:50:21
お前がテキストで書き込んでるから見えるんだろボケ
491デフォルトの名無しさん:2008/10/05(日) 19:52:47
>>489
>>488は別に煽ってるわけでもないし、ましてメ○ラなわけでもない。
むしろ馬鹿でメ○ラでツ○ボでどうしようもないのは君の方だぞいやマジで。
492デフォルトの名無しさん:2008/10/05(日) 19:54:08
>>489

> だから、普通に書き込んだらテキストファイルで見れるから

ならない。

バイナリを見れる、って意味では見れるけどなw
493デフォルトの名無しさん:2008/10/05(日) 19:59:26
まあお前らKOOLになれよ

BinaryFormatterでシリアライズなんかどうかな
494デフォルトの名無しさん:2008/10/05(日) 19:59:56
昨日splitで出力された配列に何個要素が入ってるのかわかる関数を教えてくれってレスして
count()を教えてもらったんだけどこの関数どうやって使うんですか…?
ググってもそれらしい構文が見つからなくて…
495デフォルトの名無しさん:2008/10/05(日) 20:01:18
素直にLengthプロパティ見れ
496デフォルトの名無しさん:2008/10/05(日) 20:06:59
>>494
だからお前はオブジェクト指向の概念から学べよ猿

あと、countだと、nullだった場合エラー出るからお勧めできない
countなんて薦めた奴はバカだから放置しろ
497デフォルトの名無しさん:2008/10/05(日) 20:51:01
>>494
その人、たぶん Length って言いたかったんだと思うよ。
VBとか他の言語がいろいろ混ざっちゃってたっぽいので。

Split の結果って配列だから、それの長さ調べろってこと。
498494:2008/10/05(日) 20:56:07
>>495-497
そうかLength見ればいいのか…
なんか変な考え方してたみたいですorz
皆さん優しくありがとう
499デフォルトの名無しさん:2008/10/05(日) 21:10:30
初心者です。C#で

ある整数のセットに対して、最小値(か最大値)を配列で返す機能ってあります
でしょうか?ちょっと探してみたくらいじゃみつかりませんでした。

例 
[3,3, 5, 2, 2, 4, 4, 7] => [2,2]
[7,2,3,4,1,,-1,-1,-3,5] => [-3]
500デフォルトの名無しさん:2008/10/05(日) 21:11:32
あ、,,になっている部分は、nullみたいな感じで無視します。
501デフォルトの名無しさん:2008/10/05(日) 21:15:56
そのものはないけど、
new[] { data.Max() }
502デフォルトの名無しさん:2008/10/05(日) 21:20:37
>>501
複数あったらその数だけ作るらしいぜ
var max = data.Max();
var result = Array.FindAll(data, x => x == max);
503デフォルトの名無しさん:2008/10/05(日) 21:35:02
var min = data.Min()
var result = array.Where(n => n == min);
でもおk
504デフォルトの名無しさん:2008/10/05(日) 21:35:34
>>503訂正
var result = data.Where(n => n == min);
505デフォルトの名無しさん:2008/10/05(日) 21:41:21
みなさんありがとうござます。
早速ためしてから感謝しようとおもっておりましたが、
int[] d = {11,11,22,33,10,10};
d.Min()がない。
というような状況です。もしかして2.0には、Min,Maxないんでしょうか
(Math.Min,Maxはありましたが)
506デフォルトの名無しさん:2008/10/05(日) 21:55:20
ああ、そう。
Min, Max は 3.0 から。
507デフォルトの名無しさん:2008/10/05(日) 21:59:09
単に3.0って言うとややこしいぜ
.NET 3.5/C#3.0から
508デフォルトの名無しさん:2008/10/05(日) 22:07:38
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;
}
こうかな?
509デフォルトの名無しさん:2008/10/05(日) 22:10:48
>>508
もう少し短くまとめろよ・・・情けない
510デフォルトの名無しさん:2008/10/05(日) 22:17:36
2.0 でちゃんとやると508になる気がするが。
C# 3.0 使えという話ではある。
511デフォルトの名無しさん:2008/10/05(日) 22:18:10
>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];
省略
}
}
もうちょい悩んでみます。
512デフォルトの名無しさん:2008/10/05(日) 22:24:07
質問者です。以下でなんとかいきそうでした。
if (arr[i].CompareTo(max) == 0)
cnt++;
if (arr[i].CompareTo(max) > 0)
513デフォルトの名無しさん:2008/10/05(日) 22:24:08
>>511
.CompareTo
514デフォルトの名無しさん:2008/10/05(日) 22:27:46
>513
ありがとうございます。このスレでもでてきたEachForや今回のMaxsのような独自の便利
関数は、みなさんどのように管理されてるんでしょうか??なにかアドバイスあればお願い
します。
515508: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;
}
うーん、こうかな…
516デフォルトの名無しさん:2008/10/05(日) 22:37:19
>>515
まあ、まずまずだけど、ひとひねりほしいな
例えば再起処理を使うとかさ
forでやるのはダサイ

>>514
管理ってなんぞ?クラスで定義すればいいんじゃねーの?
517デフォルトの名無しさん:2008/10/05(日) 22:40:25
こんなんで再帰使う方がアレだわ
518508:2008/10/05(日) 22:41:45
よく見たらバグってんなこれ
519デフォルトの名無しさん:2008/10/05(日) 22:55:13
>>514
適当にinternal staticなクラス作って入れとく
よほど汎用的で便利なものでなければプロジェクトごとに書き捨て
520デフォルトの名無しさん:2008/10/05(日) 22:58:44
倹索とかで見つからなかった場合null帰すのとエラーはどっちがいいの
521デフォルトの名無しさん:2008/10/05(日) 23:00:22
場合による
「検索」という意味合いのメソッドなら例外は投げない方がいいかも
522デフォルトの名無しさん:2008/10/05(日) 23:00:59
>>514
CodeProjectに登録
523デフォルトの名無しさん:2008/10/05(日) 23:02:17
>>516
なんという関数型脳w
524デフォルトの名無しさん:2008/10/05(日) 23:06:52
この問題結構奥深いな…
最小値、最大値のセットだけでなく
2番目、3番目、そして一番多くはいってる数とか
だそうとして、
ヒストグラムに一旦入れて、やってみてたけど、朝までかかり
そうなかんじなんで、つかーれたのでエロみてくる。
525516:2008/10/05(日) 23:14:49
おまえらバカだから答え教えてやるよ

まず、配列をList<>に入れる
その後。Sort()
あとは言わないでもわかるな?
526デフォルトの名無しさん:2008/10/05(日) 23:18:27
>>521 そもそもnull使えない型とか…
527デフォルトの名無しさん:2008/10/05(日) 23:25:43
null許容型もだめな型ってあるの?
あるいはDictionary.TryGetValueみたいに可否と結果を別に表す方法もあるし。
528デフォルトの名無しさん:2008/10/05(日) 23:26:18
>>525
List<>に入れるときはforを使わず再帰処理を使うんですね
わかります
529デフォルトの名無しさん:2008/10/05(日) 23:28:44
数字なら最大値でも返えせば
530516:2008/10/05(日) 23:31:09
要素から最大値を抜き出す
その要素に-1を代入
また、要素から最大値を抜き出す
最初に取り出した最大値より小さい場合は
唯一の最初のが最大値

あとはわかるな?
531デフォルトの名無しさん:2008/10/05(日) 23:32:19
タイプつかってヒストグラムできた。が馬鹿でかいものになった。
歪度とかCV、σとか無意味につけてしまった。
532デフォルトの名無しさん:2008/10/05(日) 23:37:56
ダメだ、俺の頭では、-1を代入のところがよくわからん。。。
整数だからマイナス数値ばっかのセットだってあるんだよね
533デフォルトの名無しさん:2008/10/05(日) 23:42:09
これに速度の差とかあるですか?

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;
534デフォルトの名無しさん:2008/10/05(日) 23:45:08
>>533
foreachのほうが早い
535デフォルトの名無しさん:2008/10/05(日) 23:52:39
516は突っ込んだら負けなんだろうか

要素は全部0以上とか元の配列を破壊してもいいとか勝手な条件付けすぎ
536デフォルトの名無しさん:2008/10/05(日) 23:53:23
>>530
最大値が負の数だったら?
537デフォルトの名無しさん:2008/10/06(月) 00:00:40
エレガントな解はまだかーい?
538デフォルトの名無しさん:2008/10/06(月) 00:08:52
>>535
>>536
屁理屈言うな

あくまで>>505の規格に即しただけ

誰が符号付整数なんて条件出したんだ?
539デフォルトの名無しさん:2008/10/06(月) 00:11:54
元々の質問は>>499でそ
540デフォルトの名無しさん:2008/10/06(月) 00:12:05
いや、499時点で負数出てきてるし…
541デフォルトの名無しさん:2008/10/06(月) 00:18:21
組み紐群ならったときに、エレガントな方法あったきがする。。。
が教科書すら全部研究室おいたまま10年以上たっとるな。
542デフォルトの名無しさん:2008/10/06(月) 00:36:00
ApplicationExceptionじゃなくて
ArgumentOutOfRangeExceptionとか
InvalidOperationExceptionとか
中の人以外が勝手に使ってもいいの?
543デフォルトの名無しさん:2008/10/06(月) 00:46:30
真面目な話、いくらふらっとスレだからって、>>499ってそんな悩む問題なのか?
そっちの方が悩ましい問題だ。
こんなのベタにやればいいだけじゃん。
間違いなく(負の数について簡単に説明してやりさえすれば)小学生でも書けるコードにしか思えないんだが。
544デフォルトの名無しさん:2008/10/06(月) 00:47:13
>>542
ApplicationExceptionは黒歴史になりました
545デフォルトの名無しさん:2008/10/06(月) 00:51:22
>543
小学生でも書けるかもしれないが、万人が使いたくなるような
汎用的なもの、もしくは、ロジックがみためにも美しいもの
をつくるのは、難しいぞ。

そんなに簡単に書けるコードだというのなら、手本をみせてほしい。
ヒストグラムに入れるという方法が私には、なるほど!と思わせてくれた。
546デフォルトの名無しさん:2008/10/06(月) 00:57:52
>>545
何を言っているのか意味がわからん。
汎用的?
汎用的かどうかがコードの書法によって変わるとでも言うのか?w
547デフォルトの名無しさん:2008/10/06(月) 01:02:27
振る舞いが重要であり、内部の構成には興味ありませんね
>>545は概念から学べ
548デフォルトの名無しさん:2008/10/06(月) 01:04:26
証明の結果よりも、証明の仕方に興味があるタイプです。
549デフォルトの名無しさん:2008/10/06(月) 01:06:42
なら数理論理学でも学べよ
C#とは関係ない
550デフォルトの名無しさん:2008/10/06(月) 01:13:31
>>548
それ自体はいいと思うんだが、だからといって三平方の定理レベルの話題で
悩むのはヤバいだろう。
551デフォルトの名無しさん:2008/10/06(月) 01:17:20
三平方の定理=立方体の体積の出し方だと思った俺の居場所は
552デフォルトの名無しさん:2008/10/06(月) 01:22:04
乱数なんてらんだむっぽいのがでりゃいいんだよ。
メルセンヌツイスターなんていらんわ。
553デフォルトの名無しさん:2008/10/06(月) 01:25:34
C#ってなんでメソッドの引数でデフォルト値を廃止してしまったんですか(´・ω・`)?
554デフォルトの名無しさん:2008/10/06(月) 02:16:15
>>553
メソッドオーバーロードで解決できるから
この質問いつも出るからテンプレに入れないか?
555デフォルトの名無しさん:2008/10/06(月) 02:18:06
>>554
C++もメソッドオーバーロードは実装してません?
556デフォルトの名無しさん:2008/10/06(月) 02:21:44
関数オーバーロードでデフォルト引数が表せるのだから
デフォルト引数なんていう分かりにくいものは使わないようにしようという方針
557デフォルトの名無しさん:2008/10/06(月) 03:12:09
C++作ったBjarneも多重定義があればデフォルト引数なんて構文糖、みたいなことを自著に書いていた気がする。
558デフォルトの名無しさん:2008/10/06(月) 03:46:50
デフォルト引数の方が直感的じゃないですか?

多重定義もいいですけどコードが冗長になって保守・管理が面倒くさくなりそうですが・・・
559デフォルトの名無しさん:2008/10/06(月) 08:35:26
デフォルト引数はオーバーロードで出来ても逆は無理だろ。その時点で
どっちがなんて議論じたい意味なし

それとシグニチャと呼び方もよろしくない、デフォルト引数は
560デフォルトの名無しさん:2008/10/06(月) 08:49:34
ドキュメントの保守が面倒だったりはしないのかね
ある機能の説明がオーバーロードされたメソッドごとにあるから
必然的に重複が多くなるし
561デフォルトの名無しさん:2008/10/06(月) 09:13:27
デフォルト引数って、使う人が結局その値を理解する必要があるからね。
単に、無い、という方が安全だよね。
562デフォルトの名無しさん:2008/10/06(月) 10:05:26
デフォルト引数無いのがC#の最大の欠点
563デフォルトの名無しさん:2008/10/06(月) 10:16:24
敢えて無くしたのに
それを欠点と思ってるようじゃC#は向いてないよ
564デフォルトの名無しさん:2008/10/06(月) 10:18:40
public void foo(bool bar = true){
 ・・・
}
で済むところを

public void foo(){
 foo(true);
}

public void foo(bool bar){
 ・・・
}
なんてダラダラ書くのは無駄すぎるな
565デフォルトの名無しさん:2008/10/06(月) 10:29:43
オーバーライドすると途端にカオス
566デフォルトの名無しさん:2008/10/06(月) 10:50:24
デフォルト引数は構造上、後ろから設定しなくてはならないし歯抜けができない。
567デフォルトの名無しさん:2008/10/06(月) 12:42:12
文句があるならC++使えばいいじゃん
568デフォルトの名無しさん:2008/10/06(月) 12:43:36
C++なんかもっと欠点だらけだろ
569デフォルトの名無しさん:2008/10/06(月) 13:06:49
usingとかDisposeを多用しなきゃならん状況になると
C++ならもっと簡単に書けるのに、とか思ってしまう。
570デフォルトの名無しさん:2008/10/06(月) 13:15:31
まそりゃ適材適所
C++の方が簡単に書けるならC++で書けばいい
DllImportだってC++/CLIによるラップだってできるんだから
571デフォルトの名無しさん:2008/10/06(月) 13:20:35
VisualC#2008を使っています。
C#をコンソールからコンパイルする方法を知りたいです。
csc filename.cs
でよいらしいのですが、cscにパスが通っていないようです。
cドライブをcscで検索しても見つからないです。
どなたかご教示いただけないでしょうか。
572デフォルトの名無しさん:2008/10/06(月) 13:25:26
スタートメニューに.NET 2.0 SDKみたいな項目あるだろ
それのSDKコマンドプロンプト使え
573デフォルトの名無しさん:2008/10/06(月) 13:43:18
>572
ないです。
Microsoft Visual C# 2008 Express Edition
はあります。

普通の(WindowsXP標準の)コマンドプロンプトではだめなんですか?
574デフォルトの名無しさん:2008/10/06(月) 13:50:10
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%
みたいなバッチファイルを用意してそれを使うとか
575デフォルトの名無しさん:2008/10/06(月) 13:51:35
%windir%\Microsoft.NET\Framework\v?.?
にあるからなあ、検索時Windowsのディレクトリは除外してたかな。
576デフォルトの名無しさん:2008/10/06(月) 13:55:05
標準のコマンドプロンプトからなら、vcvars32.batを実行すりゃいけるよ。
探してパス通ったとこにコピーしておいてみては。
577デフォルトの名無しさん:2008/10/06(月) 13:57:50
>574、575
あ、ありました。Prorgam Fliesばっかり探してました。
Windowsの下だったのですか。
検索はシステムファイルは除いていたかもしれません。
ありがとうございました。
578デフォルトの名無しさん:2008/10/06(月) 16:31:50
なぁ、クラスを作ってそこのメソッドで何らかの「閉じた」処理をさせるとき、
このメソッドは引数を取るようにすべきだと思う?
それとも必要ならクラス内のフィールドやプロパティを読めばいいわけだから
そもそもメソッドに引数なんて指定する必要も無いと思う?
579デフォルトの名無しさん:2008/10/06(月) 18:12:14
どっちかじゃなくて、適切に使い分けろ
580デフォルトの名無しさん:2008/10/06(月) 18:19:10
>>578
フィールドにあるものを利用するならわざわざ引数でやらなくてもいい
ほかのクラスやプロジェクトで利用するようなメソッドなら引数などを考えないといけないけどね
581デフォルトの名無しさん:2008/10/06(月) 18:29:09
くだらない質問ですみません
VC#2008無料版をインストールしたのですが.netFramework SDKのインストールも必要ですか?
それともVC#導入時に組み込まれていますか?
582デフォルトの名無しさん:2008/10/06(月) 18:35:03
大体は入ってる
できればMSDN Library for Visual Studio 2008 SP1を
必要になったらMicrosoft Windows SDK for Windows Vistaを
583デフォルトの名無しさん:2008/10/06(月) 18:41:17
>>582
ありがとう
584デフォルトの名無しさん:2008/10/06(月) 18:44:06
>>580
メソッド間の引数のやりとりだけで実現可能な場合は
わざわざフィールドにする必要ないだろうか?

いまいち変数をフィールドで表現すべきか、メソッド間の引数のやりとりですます
べきかの使い分けが分からないんだが。

フィールドってある意味一昔前のグローバル変数みたいなものだから
安易に多用するのは慎むべきだよな?
585デフォルトの名無しさん:2008/10/06(月) 18:51:59
>>584
privateにしておけば問題ないはずだけど
多分、そのソースに必要な改良はクラスに分割することじゃないかな?

大部分のメソッドはそのフィールド変数を利用しないとするならば
そのフィールド変数は混乱の元だし、そのフィールドを必要とする
メソッドと一緒にクラス化するべき

引数を取るかどうかの判断は、そのメソッドをpublicにするかもしれない場合
586デフォルトの名無しさん:2008/10/06(月) 18:58:12
>>585
裏を返せばそのクラスのフィールドを使わないメソッドは積極的に
違うクラスに分離していけ、ということ?
587デフォルトの名無しさん:2008/10/06(月) 19:16:36
あん裏はやめて
588デフォルトの名無しさん:2008/10/06(月) 19:18:29
っていうか、そもそも「普通は」メソッドの引数を省略する目的で
フィールドを使いたい、などとは思わないはず。

もしそんな欲求に駆られるとしたら何か考え方が間違ってると思うよ。
589デフォルトの名無しさん:2008/10/06(月) 20:11:24
フィールドあれ、と神は最初にいった
590デフォルトの名無しさん:2008/10/06(月) 20:16:53
>>586
public void Swap(int a,int b)
{
 //abの値をスワップ
}

↑ならメソッドの機能を忘れてても直感的どういう動作をするのかわかる

public void Swap()
{
 //フィールド変数のa,bの値をスワップ
}

↑これだとaとbはどういう型なのか、プログラム内でどういう意味を持つ変数なのか
毎回思い出したりしなければならない
591デフォルトの名無しさん:2008/10/06(月) 20:20:50
メソッドもクラスもできるだけ小規模で完結した機能を持ったほうが
のちのち見返した場合わかりやすい
592デフォルトの名無しさん:2008/10/06(月) 20:22:45
Swap(ref int a, ref int b)なら分かるけど
593デフォルトの名無しさん:2008/10/06(月) 20:24:00
>>592
どんな釣りだよ
594デフォルトの名無しさん:2008/10/06(月) 20:39:56
i++;と++i;どっちが速い?
595デフォルトの名無しさん:2008/10/06(月) 20:42:27
いっしょじゃね
596デフォルトの名無しさん:2008/10/06(月) 21:01:18
式の値を使わないならIL上で全く一緒
597デフォルトの名無しさん:2008/10/06(月) 21:23:11
アクセスに統合Windows認証が必要なWebサイトがあり、それのテストを行うために
HTTPリクエストを飛ばしてレスポンスを拾うテストツールを作っています。
デバッグ用なので、生のリクエスト文字列を送り、生のレスポンスを拾いたいため、
TcpClientを使って、HTTPヘッダもユーザが入力できるようにしました。

そこで困っているのですが、TcpClientでの統合Windows認証のやり方がわかりません。
TcpClientで統合Windows認証は可能でしょうか?可能であればどのようにすれば良いのでしょうか。
不可能であればHttpWebRequest等の代替手段を検討しなければ行けないのですが、
統合Windows認証が可能で、ヘッダも含めた生のHTTPリクエストを設定し、生のHTTPレスポンスを
取得できるクラスのようなものはありますでしょうか。

よろしくお願いします。
598デフォルトの名無しさん:2008/10/06(月) 21:24:25
Class追加するときって1クラスにつき1つファイル(拡張子は .cs)を用意して
そこに記述したほうがいい?それともMain()関数があるところの下につらつら
クラスを追加していってもいいんだろうか?
599デフォルトの名無しさん:2008/10/06(月) 21:29:40
内部クラスでないかぎりは1クラス1ファイル
600デフォルトの名無しさん:2008/10/06(月) 21:30:09
どこのJavaだよ
601デフォルトの名無しさん:2008/10/06(月) 21:31:17
クラスが増えてくると、何がなんだかわからなくなるな
UMLとか覚えたほうがいいのかねぇ
602デフォルトの名無しさん:2008/10/06(月) 21:38:35
privateな内部クラスを使えば結構減らせる気がする
一つのクラス内でしか使わなくて外に見せる必要もない型って案外多いよ
603デフォルトの名無しさん:2008/10/06(月) 21:49:26
>>594 前置
604デフォルトの名無しさん:2008/10/06(月) 21:56:32
605デフォルトの名無しさん:2008/10/06(月) 22:00:11
垂直方向のプログレスバーきぼんぬ
606デフォルトの名無しさん:2008/10/06(月) 22:02:58
気色悪い奴
607デフォルトの名無しさん:2008/10/06(月) 22:04:27
>>599
どうも(*^ー゚)b

>>600
Javaって一つのファイル内にクラスをつらつら書き連ねていくの?
608デフォルトの名無しさん:2008/10/06(月) 22:17:23
>>602
それらをツリービューで表示されるから、どのクラスがどのクラスと関連があるのかとか
わからなくなるんだよね

関連図をUML風に表示する機能があればいいんだけど
プロエディションならあるんだっけ?
609デフォルトの名無しさん:2008/10/06(月) 22:21:45
>>597
HttpWebRequest なら CredentialCache か何か使って NTLM 認証が可能。
TcpClient を使うなら、パケットキャプチャしてやりとりを確認すれ。

でもさー。Proxy 通れないケースが多いから、インターネット経由だと
かなり厳しいと思うよ。
610デフォルトの名無しさん:2008/10/06(月) 22:28:51
javaはpublicクラスは1ファイル1クラスで名前を合わせる必要があるが、
デフォルトスコープ(internal相当)のクラスはその限りではない。
関連のあるデフォルトスコープクラスはまとめてよい。
ただ、public enumをいちいち別ファイルにさせられるのはちとつらいね。

C#の場合はpublicなenumやらdelegateやらいろいろあるから分けてられないよ。
611デフォルトの名無しさん:2008/10/06(月) 22:36:33
>>609
HttpWebRequestのCredentialCacheで認証して、
GetRequestStreamでStream取得してそこに書き込めばできそうですね。
ありがとうございます。

ちなみに、

>でもさー。Proxy 通れないケースが多いから、インターネット経由だと
>かなり厳しいと思うよ。

これってTcpClientに対してのコメントですか?
612デフォルトの名無しさん:2008/10/06(月) 22:36:33
そういえばネストした型をpublicやprotectedにしたらガイドライン違反になるんだっけ
613デフォルトの名無しさん:2008/10/06(月) 22:37:45
C#をはじめるならこの本がお勧め、って感じの入門書ってありますか?
614デフォルトの名無しさん:2008/10/06(月) 22:39:28
C#以外の経験の有無くらいは書け
615デフォルトの名無しさん:2008/10/06(月) 22:41:19
申し訳ない
Cが文法なら大まかに覚えてる〜程度の素人です
他は無知です
616デフォルトの名無しさん:2008/10/06(月) 22:47:11
>>594
preインクリメントとpostインクリメントのコストの違い
ttp://d.hatena.ne.jp/Seasons/20080527/1211911965
617デフォルトの名無しさん:2008/10/06(月) 22:50:28
>>616
スレタイぐらい見ろ
618デフォルトの名無しさん:2008/10/06(月) 22:52:10
>>609
すいません、HttpWebRequestのGetRequestStreamの使い方を調べてみたんですが、
ヘッダも含めて、直接HTTPリクエストを書き込める訳では無いみたいですね。
デバッグ用なので、中のデータがどうなっているのかを見るのが最優先なのですが、
そういうリクエストの指定ってできないものでしょうか。
619デフォルトの名無しさん:2008/10/06(月) 22:56:02
>>614
マイコミが初心者テキストとしてもリファレンスとしても使いやすい
マイコミが理解できるレベルならMSDNで十分だろう
620デフォルトの名無しさん:2008/10/06(月) 22:57:12
iを使わない場合最適化されるから一緒、つまり++iが速い。
621デフォルトの名無しさん:2008/10/06(月) 23:00:01
一緒なのに早い?
622デフォルトの名無しさん:2008/10/06(月) 23:00:16
ImageListの全画像をまとめて1つのファイルに
書き出す(読み出す)方法はありますか?
623デフォルトの名無しさん:2008/10/06(月) 23:03:03
>>621
「前置の時と」同じコードに最適化される
624デフォルトの名無しさん:2008/10/06(月) 23:08:25
>>611
違う。NTLM 認証の制限。ケルベロスならいけるのかもしれんけど、
試してないからわからん。

>>618
つかさ、デバッグ用なら、なんでパケットキャプチャしないの?
625デフォルトの名無しさん:2008/10/06(月) 23:09:10
>>622
どうまとめんのさ
複数フレームの画像ならTIFFとかGIF
単に詰め込むだけで良いなら適当なヘッダつけて突っ込んでけ
626デフォルトの名無しさん:2008/10/06(月) 23:13:38
ZipPackageとか
627デフォルトの名無しさん:2008/10/06(月) 23:16:08
大きめのbmpオブジェクトを作って
任意の画像をそこに貼り付けて
適当に保存すればいいんじゃないの?
628デフォルトの名無しさん:2008/10/06(月) 23:17:41
>>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
}

という書き方の方が正しいのかもしれないけど・・・
629デフォルトの名無しさん:2008/10/06(月) 23:20:59
上が推奨
下はガイドライン違反
下のように書くとすれば、フィールドのa,bの方に_を付ける
「クラス外から見える名前が最優先」
630デフォルトの名無しさん:2008/10/06(月) 23:23:11
このスレに出てくるSwapは俺が思ってるのと全然違うんだが
631デフォルトの名無しさん:2008/10/06(月) 23:27:42
>>624
クライアント側で想定したリクエストを送れているかということと、
あるリクエストを送ったときのサーバ側の動作をみたいので。
前者だけならパケットキャプチャで拾えば良いと思いますけど、
後者のために任意のリクエストを送れるツールが欲しいのです。
632デフォルトの名無しさん:2008/10/06(月) 23:29:24
public static void Swap(ref int a, ref int b)
{
int tmp = a;
a = b;
b = tmp;
}
633デフォルトの名無しさん:2008/10/06(月) 23:29:50
>>631
IIS リソキに含まれてるツールでも使えばいいじゃん。
634デフォルトの名無しさん:2008/10/06(月) 23:34:24
KeyedCollectionのGetKeyForItemは何を書けばいいの?
635デフォルトの名無しさん:2008/10/06(月) 23:37:31
return item.Name;みたいに
要素自身が含むキーとして使える値を返す
636デフォルトの名無しさん:2008/10/06(月) 23:38:45
>>631
興味本位で調べただけだから外してるかも知れん。
NegotiateStreamってクラスがあるらしい。(.Net2.0から)
637デフォルトの名無しさん:2008/10/06(月) 23:41:42
>>675 どーも
638デフォルトの名無しさん:2008/10/07(火) 00:06:23
Object a=new Object();
Object b=a;
Object c=b;
の場合、cにはaの値のアドレスのコピーを持っているbの値が代入されるということですか?
つまり、cの値を得ようとすると、コンピュータは一旦bを経由してからaにたどり着くの?
もしそうなら、コピーするほど、処理が重くなる?
639デフォルトの名無しさん:2008/10/07(火) 00:13:03
経由しないよ
640デフォルトの名無しさん:2008/10/07(火) 00:13:06
ならない
全部同じ
641デフォルトの名無しさん:2008/10/07(火) 00:22:10
こっちが分かり易い。

Object ^a = gcnew Object();
Object ^b = a;
Object ^c = b;
642デフォルトの名無しさん:2008/10/07(火) 00:24:45
>>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 というキー番号を経由して、同じロッカーを参照。
643デフォルトの名無しさん:2008/10/07(火) 00:51:04
>>629
> 上が推奨
> 下はガイドライン違反

マジっすか( ´・ω・)!
上が推奨だったとは・・・

毎回下の方式でやってて、 _a とか tmp_a とか名前考えるのが面倒だったんだよ。
上でいいならこれからジャンジャン this. を使わせてもらうよ
644デフォルトの名無しさん:2008/10/07(火) 00:54:25
むしろ俺はメンバーには this. 必ず付ける派なんだが。
645デフォルトの名無しさん:2008/10/07(火) 00:58:01
>>644
フィールドに毎回 this. つけるのって面倒だし見づらくない?
646デフォルトの名無しさん:2008/10/07(火) 01:03:43
>>645
フィールドであることを区別する意味ではありだと思う。
それを _ つけて区別するくらいなら、this の方がタッチタイプしやすい。
アンダーバーとかの記号は打ちにくいのよね。
647デフォルトの名無しさん:2008/10/07(火) 01:08:30
this付けるのはフィールドのみ?
メソッドやプロパティにはどうする?
648デフォルトの名無しさん:2008/10/07(火) 01:16:21
フィールドにアクセスするときにわざわざthis.を頭に付けることなんて推奨されてたか?
649デフォルトの名無しさん:2008/10/07(火) 01:18:33
俺はつける。
650デフォルトの名無しさん:2008/10/07(火) 01:20:15
お前の話なんてどうでもいいんだ黙ってろ
651デフォルトの名無しさん:2008/10/07(火) 01:21:14
>>638
もしその考え方が正しいとするならば、

Object a=new int[] {1,2,3};
Object b=a;
Object a=new int[] {4,5,6};

このときにbの値を得ようとしてint[] {4,5,6}を取得することになるよ?
んな馬鹿な話あるわけない。
つーか上記のテストコード書いて試したらすぐ確認とれるだろ。

なんでも質問するようではプログラミングなぞ向いていない。
これくらいの疑問なら自分の頭使って自力で解決できないとちと厳しいぞ。
652デフォルトの名無しさん:2008/10/07(火) 01:24:48
>>639-642
ありがとうございます。
ずっと疑問だったんで気になってました
高級言語になるほど、内部がどうなってるか見通し利かないでうよねぇ
653デフォルトの名無しさん:2008/10/07(火) 01:26:42
全部付ける派の人は
継承されたメンバにアクセスするときもthis付けるのかな
それともbase?
654デフォルトの名無しさん:2008/10/07(火) 01:32:14
>>651
それの場合新しいインスタンスを代入しているんだから
bの値を得ようとするわけないのはバカでもわかります

というか、テストコードってどう書くんですか?
cに入っているアドレスが、aの値のアドレスかどうかなんて
あのプログラム動かしただけではわからないはずですけどね

参照の「コピー」というぐらいだから、コピー用に新しくメモリが割り当てられているのでは
と思ったのが勘違いです。だから、cにはaの参照がコピーされたメモリへの参照のコピーと思ったしだいです
655デフォルトの名無しさん:2008/10/07(火) 01:36:54
これは参照です的な目印がないからな〜
656デフォルトの名無しさん:2008/10/07(火) 01:47:44
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);
とか激しくキモいんだが。

俺はプロパティとフィールドの違いを見るためにプロパティは付ける。
あとはローカル変数とフィールドの区別が必要なときにも当然付ける。
あとは付けない。
657デフォルトの名無しさん:2008/10/07(火) 03:01:19
メソッドに参照渡しするときに、宣言だけしたパラメータを渡そうとすると

int[] a;

HogeMethod( a );

「未割り当てのローカル変数 'a が使用されました。」

てなエラーが返されてしまう。

int[] a = null;

HogeMethod( a );

とすれば問題なくコンパイルは通るんだが、これって汚くない?
わざわざnullを割り当ててから参照渡しするのはどうも無駄なステップを
踏まされているように思えて仕方がないんだが。上のようなスマートな
方法も通用して然るべきだと思わん?
658デフォルトの名無しさん:2008/10/07(火) 03:09:10
>>657
こういう話じゃないの?
void HogeMethod(out int [] a) { a = new int [] { 1, 2, 3 }; }

int [] a;
HogeMethod(out a); 
659デフォルトの名無しさん:2008/10/07(火) 03:10:38
最近Javaから移ってきたのですが、構造体の使い道はこんなので合ってますか?

バッチ大量データ登録時にトランザクション単位でエンティティビーン的な構造体に値を放り込む
→参照渡しでクエリ実行
→構造体はトランザクション単位でfinalyでnull設定
→パフォーマンスアップな上にメモリ節約できて(゜Д゜)ウマー

現状エンティティビーンクラスにclearメソッド用意してインスタンス使い回してますが、果たして、、
660デフォルトの名無しさん:2008/10/07(火) 03:15:18
>>659
いろいろ勘違いしている。Javaと同じでほとんどのケースでクラスを使うことになる。
661デフォルトの名無しさん:2008/10/07(火) 03:19:57
>>658
ああ、出力パラメータを指定するという方法もあったね。
でもメソッドを呼び出すときも

> HogeMethod(out a);

"out"キーワードを付けないといけないんだよね。
呼び出すときくらい"out"キーワードは無視させてくれてもいいと思うんだが。
662デフォルトの名無しさん:2008/10/07(火) 03:22:57
>>659
.NET Framework 開発者ガイド
クラスまたは構造体の選択
http://msdn.microsoft.com/ja-jp/library/ms229017.aspx
663デフォルトの名無しさん:2008/10/07(火) 03:28:59
660 662
ご教示ありがとうございます。
構造体はあまり使わない的な文献はよく見かけたのですが、初見なものでなんか使い道あるのでは、と考えましたが、まだ修行がたりないようでしたね、、。
664659:2008/10/07(火) 03:50:03
連投すみません。
659の問題点は

・エンティティビーンで16バイト以下は現実的でない
・スコープ抜けたら勝手に解放されるのでnull設定は不要
・パフォーマンスとはそもそも関係ない


で合ってますでしょうか?
665デフォルトの名無しさん:2008/10/07(火) 06:13:16
>>633
WFetchでしたっけ?
あれはSJISのみ対応だったかと思うのですが。
UTF8なのです
666デフォルトの名無しさん:2008/10/07(火) 07:23:11
>>665
いろいろと制約が厳しいな。

HttpWebRequest の AddHeader でだめってことは、標準ヘッダを
ごにょごにょしたい、ってことかな?

リフレクションで一部書き換えられたようには思うけど、変に細かい技を
使うより、Tcp でちくちくやるのがよさげだね。
667デフォルトの名無しさん:2008/10/07(火) 08:34:17
>>661
ダメ。
メソッド呼びだした先で勝手に値が書き換えられるってのは嫌われる。

C++ でも、参照渡しがあるにもかかわらず、const 参照しか使わないって人多い。
出力パラメータとして参照渡ししたいときはポインタを使う。
668デフォルトの名無しさん:2008/10/07(火) 08:41:53
>>656
俺は全部付ける。

MS のガイドラインだと、特に this. つけるとはなってなかった気が。
でも、MS のソースコードの品質チェックツール通すと this. 付いてないと警告出た気が。
669デフォルトの名無しさん:2008/10/07(火) 08:49:17
あっ、ごめん、668 の最後の行は気のせいだった。

今やっとツールの名前と使い方思い出して試してみたけど、
付けても付けなくても文句言われない。
ちなみに、StyleCop ってやつ。
http://code.msdn.microsoft.com/sourceanalysis
670デフォルトの名無しさん:2008/10/07(火) 08:56:25
thisが必要なとこ以外にばらまかれてると
かえって見づらい気がするのでつけないな
671デフォルトの名無しさん:2008/10/07(火) 08:57:47
.NET的にマウスホイールをカーソル直下のコントロールに送るのって、プロパティとかあるの?
MouseEnterでフォーカス移す以外であれば教えて(涙。
672デフォルトの名無しさん:2008/10/07(火) 08:58:20
>>661
むしろ無いと怖いでしょ


>>664
>null
基本的に値型にnullは入れられません
Nullableを利用するとNullにできるけど…

>パフォーマンス
GCのスキャンコストが減ります
用途によってはボクシング/アンボクシングでかえって遅くなることもあります

と、これ以上はよくわからん
パス
673デフォルトの名無しさん:2008/10/07(火) 11:04:56
>>661
そういう意味で参照渡しを前提とするパラメータには必ずrefかoutか付けないと
コンパイルが通らないようにすればいいと思ってるんだがC#はそうはなってない
んだよな。

値型の変数を参照渡しするときはoutなりrefなりつけないといけないが、参照型
の値を参照渡しするときは普通の変数のように渡せてしまう。
これじゃあとでコードを見たとき、この部分は参照渡しか値渡しなのか一目で
分からない。参照型の変数でも参照渡しするときはoutかrefを必須にすれば
よかったと思うんだがどうだろうか?
674デフォルトの名無しさん:2008/10/07(火) 11:13:23
>>673
参照型もref/outが無ければ値渡し。参照渡しするならref/outが必要。
それに値型のなかの参照型メンバの値を変更とか考えると意味が無い。
675デフォルトの名無しさん:2008/10/07(火) 11:28:12
C#の名称ってどうやって付けてる?どうにもVCとかVBの思考が抜けないんだが
自由なのは分かってるが一般的な付け方がしたいです

関数、プロパティ、名前空間、クラス名、定数は大文字から始める
MainForm、UpdateMenbers、LineMax
コントロールはプレフィックス(?)を付ける frmMain、btnCancel
ローカル変数は小文字から caption、changed
引数はローカル変数と同名を避けるためアンダーバーから _caption

大体こんな感じでいいのかな・・・
あと、引数付きプロパティが使えないが、Get〜とかSet〜ってやらないで、
インデクサ(?)付きクラスでも返した方がC#っぽい?
676デフォルトの名無しさん:2008/10/07(火) 11:45:44
>>674
> 参照型もref/outが無ければ値渡し。

え( ´・ω・)?
677デフォルトの名無しさん:2008/10/07(火) 11:50:08
678デフォルトの名無しさん:2008/10/07(火) 11:52:04
参照の値渡し、参照の参照渡しといいたいのだろう。
その辺はCでもいっしょっしょ。
ポインタの指してる中身を書き換えるだけならポインタをそのまま渡せばいいが、
ポインタそのものを書き換え戻したいなら、ポインタのポインタを渡さないといけない。
679デフォルトの名無しさん:2008/10/07(火) 11:59:31
>>678
ああ、そういう意味か。

>>673で言いたかったことはメソッドに値を渡すとき、その値をコピーして
元の値は書き換えないのか、それとも書き換えるのかがメソッドの宣言を
見ただけでは識別しにくいってことなんだよね。

当然この型は値型だから渡しても書き換えされないはず、この型は参照型
だから渡せば書き換えられるはず、という知識を持っておけば分かるけど、
複雑なコードになるとそこらへんをうっかり間違えてしまいトラブルの元に
なるんじゃないかなと。

だから参照渡しをするときは値型だけでなく参照型の変数でもref/outを
必須にすればよかったのにと思ったわけ。
680デフォルトの名無しさん:2008/10/07(火) 12:01:58
え?
681デフォルトの名無しさん:2008/10/07(火) 12:04:03
参照型の値渡しにref付けるならば
参照の参照渡しだとrefrefキーワードが必要になるな
682デフォルトの名無しさん:2008/10/07(火) 12:08:48
>>679
普通にref/outしたい時に困るんじゃない?
683デフォルトの名無しさん:2008/10/07(火) 12:14:15
>>681
参照型の実体(格納してる変数は単なるメモリの番地)を知ってる人には
その通りだと思うんだが、そういうことを利用者に意識させないのがC#の
利点であることを考えると値型だろうと参照型だろうと参照渡しするときは
ref/outを必須にするように決めた方がいいと思うんだが。

そして参照型をref/out無しでメソッドに渡したら、その参照型のコピーが
メソッドに渡されるようにすればいい。つまりref/outなしで参照型の値を
メソッドに渡して書き換えられても、オリジナルの値にはなんら影響が
出ないようにすると。

これでユーザーがポインタを意識する必要は100%無くなる。
684デフォルトの名無しさん:2008/10/07(火) 12:22:05
それどうみてもただの値型
685デフォルトの名無しさん:2008/10/07(火) 12:24:26
むしろパフォーマンスを意識してポインタを知ることになるんじゃね?
refだらけになりそうだ
686デフォルトの名無しさん:2008/10/07(火) 12:24:37
正直その主張はconstマンセーにしか読めない。
687デフォルトの名無しさん:2008/10/07(火) 12:25:14
なんか初心者が好きなことを書き込むスレになってきてないか
688デフォルトの名無しさん:2008/10/07(火) 12:33:32
> 値型だろうと参照型だろうと参照渡しするときはref/outを必須
C#は実際そう。参照渡しの語義を確認したほうがいい
ttp://ja.wikipedia.org/wiki/%E5%BC%95%E6%95%B0#.E5.8F.82.E7.85.A7.E6.B8.A1.E3.81.97

他の言語のスレでもこういう展開になることが多いんだけど
元凶はどこにあるんだろうね・・・
689デフォルトの名無しさん:2008/10/07(火) 12:34:56
元凶はC++だろ。早く無くなればいいのに・・・
690デフォルトの名無しさん:2008/10/07(火) 12:45:11
>>686
できるよ。
以上。
↓次の方どうぞ
691デフォルトの名無しさん:2008/10/07(火) 13:13:11
↑なんでそんなに馬鹿なんですか?
692デフォルトの名無しさん:2008/10/07(火) 13:32:09
>>正直その主張はconstマンセーにしか読めない。
できるよ。

意味不…
693デフォルトの名無しさん:2008/10/07(火) 13:33:36
やっと*から抜け出せたのに今度はrefかよ
それだったら、*のほうがマシだわ
694デフォルトの名無しさん:2008/10/07(火) 13:35:21
>>688
数値もポインタもいずれも「値」がメソッドに渡される、という意味ではC#は「値渡し」
になるんだろうけど数値が渡されるのかポインタが渡されるのかは型によって
まちまちなわけで、その違いをもっとユーザーに意識させる仕組みが組み込まれて
然るべきじゃないかなと言ったわけよ。
695デフォルトの名無しさん:2008/10/07(火) 13:36:31
どうやって参照型を自動でコピーするんだよ
フィールド全部再帰的になめるのか?
それでも駄目だけど
そしてrefだらけになると
あほかいな
696デフォルトの名無しさん:2008/10/07(火) 13:38:48
あと文字列(string)は参照型にもかかわらずメソッドに渡すときは全く同じ
文字列がコピーされるからメソッド内でいくらいじくってもオリジナルの
文字列が変更されることはない。

でも文字列の配列(string[])をメソッドに渡すとメソッド内での操作が
オリジナルの文字列の配列にも反映される。

ここらへんのルールの違いをもっと明確にユーザーに伝わるような仕組みを
構築すべきじゃないかな?特にC#は後発の言語なんだから。
697デフォルトの名無しさん:2008/10/07(火) 13:45:54
そうじゃないよ
698デフォルトの名無しさん:2008/10/07(火) 13:46:05
>>696
stringは確かに不変オブジェクト扱いだけどこの場合何の関係も無いよ
単に自分自身を操作するメソッド/プロパティが無いだけなんだから
リフレクションで値書き換えればちゃんと呼び出し元でも変更される
699デフォルトの名無しさん:2008/10/07(火) 13:49:15
言いたいことをまとめると、

この型はメソッドに渡すと変更を受けるけど
この型はメソッドでいじくり回しても一切の変更を受けない。

こういう型が区別も無く平然と並んでいるのがユーザーの混乱を招くってことよ。
どれが参照型でどれが値型かなんて言語ごとに違って当然なんだから
それを曖昧なままごちゃまぜにしていればいつか間違いが発生する。

言語の進化というのはそういううっかりミスをなくす方向で発展していく必要が
あると思うんだよ。
700デフォルトの名無しさん:2008/10/07(火) 13:56:00
で、変更しないならconstつけることにした言語があったよね
701デフォルトの名無しさん:2008/10/07(火) 14:00:00
型がimmutableかmutableかをその型の前提知識無しに
コードを見ただけで一発で判定可能にするってことか?
702デフォルトの名無しさん:2008/10/07(火) 14:06:57
>>699
値型的な扱いはintとstringだけなんだから
これを覚えるのに大した労力も必要としないだろハゲ
703デフォルトの名無しさん:2008/10/07(火) 14:15:01
どうも >>651以降、 アフォが湧いてるようじゃのう…
704デフォルトの名無しさん:2008/10/07(火) 14:17:16
C#だけ扱うならな。
だが現実にはC++やJava、VisualBasicと多岐にわたる言語を同時に扱うのが普通だろ。

記憶だけに頼る方式は後々重大なエラーを招く。

「てっきりstring型は呼び出したメソッド先での変更が反映されるものだと思っていました」
そう言いながら打ち上げロケットを派手に爆発させるミスが発生するかもしれない。
705デフォルトの名無しさん:2008/10/07(火) 14:31:50
どうにも手がつけられない
706デフォルトの名無しさん:2008/10/07(火) 15:14:53
>>699
参照型を含む値型の扱いはどうする?
707デフォルトの名無しさん:2008/10/07(火) 15:17:57
一日でレス進んでると思ったら(ry。
Stringでも他の参照型でも動作は共通してると思うが、>704の頭の中ではどうなってるんかが疑問だな・・。
Stringクラスの編集系メソッドはすべて新たなインスタンスを返してくるわけで、実体の操作は出来ないんだが。
つまり、参照型であっても、値渡しされたStringメソッドがその先で変更されることがありえないので誤解のしようがない。
ref指定した場合、「メソッド内での値の変更=新しいインスタンスを参照」になるだけ。一貫してると思うが。
708デフォルトの名無しさん:2008/10/07(火) 15:21:04
Stringメソッドがその先で→Stringがその先のメソッドで
709デフォルトの名無しさん:2008/10/07(火) 15:34:56
ポインタ難しいスレにそっくりさんがいたのを思い出した
そういう人にはサンプルコード書かせると言い逃れできなくていいかもね
710デフォルトの名無しさん:2008/10/07(火) 15:43:42
>>707
他の言語のString型も同じだと言い切れるかな?

そしてもし他の言語のString型とC#のString型が違ったらどうするんだ?
という疑問を投げかけられて、

「そりゃそれぞれ違いを覚えるしかない」

と答えたらその時点でヒューマンエラーが紛れ込む余地が誕生したと思うべき。

近代の言語が、とくにC#がこの手のヒューマンエラーを極力排除することを
念頭に新たに作り直されたことを考えるとこの点に置いてC#は不十分な言語と
言わざるを得ない。

見方を変えればいまだにC/C++時代のポインタを引きずっているとも言える。
711デフォルトの名無しさん:2008/10/07(火) 15:47:37
何のためのCTS(共通型システム)だと思ってんだ
712この話題にも飽きてきたが:2008/10/07(火) 16:23:06
正直その程度のリファレンスも見ない奴がマルチリンガル気取るのもどうかと思うけど(IntelliSenceで戻り値見るだけでも気付くはず)、
言語間の実装の違いや動作の相違は、そもそも無いほうがおかしい。

それより、言語内で一貫した基準があって、すべてのクラスがそれに則っていることが言語としては第一だろ。
C#の場合、引数は標準で値渡し、ref・outで参照渡し。それがすべて。そしてStringは参照型。
それを踏まえたうえで値渡しのStringが中で変更されると思うのは、参照のイメージが確立していないか、
Stringのメンバの使い方が分かってないかのどちらかじゃないか?
前者はマとして未熟。後者はウッカリというより、これから使うライブラリのリファレンスも見ない向こう見ずに思える。
皆、長文スマンな。
713デフォルトの名無しさん:2008/10/07(火) 16:30:19
stringが参照型の値渡しなら
string[]はどうなるんだ?
714デフォルトの名無しさん:2008/10/07(火) 16:32:48
stringは参照型の値渡し
string[]は参照型の値渡し
stringはmutable
string[]はimmutable
715デフォルトの名無しさん:2008/10/07(火) 16:33:31
反対だ
stringはimmutable
string[]はmutable
716デフォルトの名無しさん:2008/10/07(火) 17:10:42
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で保護しないと駄目ですか?
717デフォルトの名無しさん:2008/10/07(火) 17:17:25
>>714
string[]を値渡しするのとref付けて参照渡しするのとで、結果は違ってくる?
どちらもメソッドでの変更が反映されるだけで動作は全く同じになると思うんだが。
718デフォルトの名無しさん:2008/10/07(火) 17:23:26
>>717
参照渡しと値渡しの違い分かってる?
719デフォルトの名無しさん:2008/10/07(火) 17:26:11
わかってないだろうな。

>>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"}になる
720デフォルトの名無しさん:2008/10/07(火) 17:27:13
>>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]);
}
721デフォルトの名無しさん:2008/10/07(火) 17:41:25
>>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"}
にならない?
722デフォルトの名無しさん:2008/10/07(火) 17:45:59
>>721
コンパイルエラー
723デフォルトの名無しさん:2008/10/07(火) 17:51:00
>>722
いや、通ると思うんすけど・・・
724デフォルトの名無しさん:2008/10/07(火) 17:57:10
はぁぁあ?
725デフォルトの名無しさん:2008/10/07(火) 17:57:41
string[] a = { "a", "b" }; //おk
string[] b;
b = { "a", "b" }; //だめ

new[] を省略できるのは変数宣言の時だけだな
ちゃんとコンパイルして試してから言ってるのか?
726デフォルトの名無しさん:2008/10/07(火) 17:58:54
どのバージョンで通った?
727デフォルトの名無しさん:2008/10/07(火) 18:00:41
それにnew[]を省略できるのは構文糖みたいなもんで
入れたり入れなかったりで挙動が変わるなんてこたあないんじゃないかな
728デフォルトの名無しさん:2008/10/07(火) 18:04:31
なんかねえ
初心者を装ったものすごく巧妙な釣り師というか荒らしが常駐してる気がする
729デフォルトの名無しさん:2008/10/07(火) 18:08:58
該当人物は置いといて、どこまでが初心者として受け入れられるかって難しいぞ
質問するほうだって、これは知ってます、それも知ってますって一々言うわけに行かないし
730デフォルトの名無しさん:2008/10/07(火) 18:10:25
virtualは遅い?
731デフォルトの名無しさん:2008/10/07(火) 18:11:06
>>716
SafeHandle使えば悩む必要なかろ
outなら大丈夫だったとは思うが覚えてない
732デフォルトの名無しさん:2008/10/07(火) 18:11:54
まあなんだ、初心者はstructやref/outには手を出さないことだね
733デフォルトの名無しさん:2008/10/07(火) 18:42:37
しかし、平日の昼間からこんなところでレスしてる人ってどういう人なんだろ。
いや別に他意(<=なぜか変換できない)はないんだけど。
734デフォルトの名無しさん:2008/10/07(火) 18:49:45
職場での息抜きに。
自由な職場っていいよね。
735デフォルトの名無しさん:2008/10/07(火) 18:53:00
モノさえ仕上げりゃエロゲしようがアニソン垂れ流そうが自由よ。
736デフォルトの名無しさん:2008/10/07(火) 19:07:42
>>732
鉄は熱いうちに打てじゃないが、structとemunは若いうちから慣れておいた方がいい。
なまじstructやemunを使わなくてもプログラムが書けてしまうだけに。
737デフォルトの名無しさん:2008/10/07(火) 19:12:19
classは案外早い GCも含めて
わざわざstructを使う意義はほとんどない
738デフォルトの名無しさん:2008/10/07(火) 19:15:11
ま、よほどタイトな処理内で使う場合じゃないと大して変わらんわな
739デフォルトの名無しさん:2008/10/07(火) 19:16:56
無論状況によってはかなり変わるが、大抵は使い分けるデメリットのが大きい
740デフォルトの名無しさん:2008/10/07(火) 19:27:40
>>737
ref/out使わずに結果を取り出したいならstructも少しは役に立つんでね?
741デフォルトの名無しさん:2008/10/07(火) 19:33:34
>>739
言ってる意味が分からない。
いくらふらっとスレでもトンデモなことを言いすぎだろう。

使い分けないデメリット、なら話もわかるが使い分けるデメリットってどういう意味だよ。

あるいはどちらでも用が足りる用途なら迷わずクラスを選べ、
というのなら正しいし理解もできる。

だが構造体に存在意義がないかのような意見はおかしい。
742デフォルトの名無しさん:2008/10/07(火) 19:55:10
俺は>>739じゃないが「それがstructかどうか」を意識しなきゃならなくなるのは苦痛だ
PointやRectangleをいちいちnewしなきゃならんのは実に面倒くさい
しかしform.Location.X = 100;みたいな記述を可能にするためには
Pointに親への参照が必要になってしまいかねないんだよな
なかなか難しい
743デフォルトの名無しさん:2008/10/07(火) 19:57:51
enumイラネってWin32SDKみたいな定数の溢れたカオスワールドがイイって事?
744デフォルトの名無しさん:2008/10/07(火) 20:06:08
つーかお前らほどのアニソンマスターなら放送される曲全て持ってるんだろ
公共ラジオで丸一日垂れ流しする意味ねーじゃん
745デフォルトの名無しさん:2008/10/07(火) 20:06:58
>>742
まあPointにイベント(XChanged)を追加することでも可能だと思うけどね。
746デフォルトの名無しさん:2008/10/07(火) 20:28:06
どとねとの構造体ってinteropでAPIとのやりとりのためにあえて残した
もんだと思ってた。win form のrect とかpointが構造体なのはwin32の
ラッパだからしかたねーんだなと 勝手に思っていた…。
747デフォルトの名無しさん:2008/10/07(火) 20:31:52
書き方が悪かったが、使い分けなきゃならないデメリットというのか、
構造体特有の注意点とか意識しないといけないとか、
そういう点をデメリットって言ったんだよ。
748デフォルトの名無しさん:2008/10/07(火) 20:37:29
巨大な構造体使う奴とか見たもんでな。
基本的に使うな、の方が無難なことが多い。
ちゃんと分かってる奴だけが使うならいいが。
749デフォルトの名無しさん:2008/10/07(火) 20:40:18
メソッドいらない場合structだと思、
750デフォルトの名無しさん:2008/10/07(火) 20:42:00
>>749
Cから来た人たちが引っかかる罠なんだよね。
ユーザー定義の値型にstructのキーワードを当てはめたのが失敗だったといわれている。
751デフォルトの名無しさん:2008/10/07(火) 21:05:16
全然話の流れが分かってないけど、こういう使い方って問題無い?
こうしろよってのがあれば教えて下さい。

private List<Data> list = new List<Data>();
struct Data
{
    public string Key;
    public string Value;
}
752デフォルトの名無しさん:2008/10/07(火) 21:07:46
>>750
そんな穴に落ちる奴はいないだろ。
入門者を斜め読みしただけで別物と普通は分かるよ。

「参照」って言葉の意味がC++と似てるけど別物だったりするのが落とし穴というのならわかるが、
構造体で引っかかる人間なんていないと思う。
753デフォルトの名無しさん:2008/10/07(火) 21:10:10
struct Data
{
public readonly string Key;
public readonly string Value;
}

こうすべきじゃないかな

クラスまたは構造体の選択
http://msdn.microsoft.com/ja-jp/library/ms229017.aspx
754デフォルトの名無しさん:2008/10/07(火) 21:15:23
リンク先の「変更できない。」という特性を守る場合
KeyやValueの値が可変なら、というか、readonlyだと駄目な状況では
構造体じゃなくクラスを使うべきなんですかね。
Listにクラスを放り込む場合どう書けば???
755デフォルトの名無しさん:2008/10/07(火) 21:25:26
class Data
{
public string Key;
public string Value;
}
こんな感じのクラスを用意して
Data data = new Data();
で初期化して使う感じでしょうか?
756デフォルトの名無しさん:2008/10/07(火) 21:31:58
ジェネリックなコレクションにstructを使う場合の注意としては、
IEquatable<T>.Equals(T o)と、大小比較する場合はIComparable<T>.CompareTo(T o)を実装すること。
そうしないと比較のたびにボクシングが頻発して悲惨なことになる。
もっとも基本配列であるListの場合はあまり問題ない。
実装しないなら非ジェネリックのコレクションの方が効率がいい。
登録時ボクシングは1回だけですむ。
757デフォルトの名無しさん:2008/10/07(火) 21:51:59
>>745

そんなことしたら使い方によってはおっそろしく遅くなるよ
758デフォルトの名無しさん:2008/10/07(火) 21:58:05
>>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 { ... }
}
759デフォルトの名無しさん:2008/10/07(火) 22:00:44
>>758
構造体に自動プロパティを使うのは良くない
コンストラクタ書けなくなる
760758:2008/10/07(火) 22:01:42
そいやそうだな、ごめん
761デフォルトの名無しさん:2008/10/07(火) 22:06:00
>>757
さすがに意味がわからない突っ込みだ。
そもそもパフォーマンスが重要な場面に適合的なケースの話はしてないと思うんだけど。
762758:2008/10/07(火) 22:07:04
ん、いや、>>759 は正確じゃないな
こうすれば書ける。自動プロパティやめとけは同意

struct Data {
 public Data() : this() { ... }
}
763758:2008/10/07(火) 22:08:37
ああもう、

struct Data {
 public Data(string key, string value) : this() {...}
}

764デフォルトの名無しさん:2008/10/07(火) 23:28:02
>>751って以下と変わらない気がするのですが、それでも
>>763みたいにするべきなのでしょうか。
private List<KeyValuePair<string, string>> MainList = new List<KeyValuePair<string, string>>();

そもそもがstring同士なので大小比較なども行わないし、私の頭では
どうするのが一番良いのかイマイチ理解できない…orz
765デフォルトの名無しさん:2008/10/07(火) 23:46:17
>>764
・IL 上はだいぶ変わる(バイナリ互換の問題)
メソッドコールかフィールドアクセスになる
コード互換で言えば、ref で渡せるかどうか程度かな

・リフレクションもだいぶ変わる(バインディングで問題)
var props = TypeDescriptor.GetProperties(typeof(Data));
var prop = props["Key"];

・パフォーマンスかなと考えてもメンバ string だし

まとめると、少しでも変更に耐性のあるプロパティにしとけ
みたいな。というかフィールドにする意味ないなぁと
フィールドのほうが「あえて」立場なんだよ要するに

>>758 の例は struct 作るときに標準的にやっといたほうが
いい処理が含まれてる実装ですなただの

KeyValuePair 使うかどうかはそれ(表現したい対象)が
KeyValuePair の機能しか将来的にも持たないんなら
それでいいんじゃね
766デフォルトの名無しさん:2008/10/08(水) 00:04:34
>>719
で引数がList<T>にしてみたんだけど

void hoge( ref List<int> a )
{
List<int> a = new List<int>();
}
767デフォルトの名無しさん:2008/10/08(水) 00:05:54
失礼。

void hoge( ref List<int> a )
{
List<int> a = new List<int>();
}

としてコンパイルしてみたところ

ローカルの変数 'a' をこのスコープで宣言することはできません。
これは、'親またはカレント' スコープで別の意味を持つ 'a' の意味が
変更されるのを避けるためです。

というエラーが返されてしまった。
ref→out
に変更しても同じエラーが返される。
なにかまずいことでもしちゃったかな?
768デフォルトの名無しさん:2008/10/08(水) 00:08:21
参照渡しが値渡しがどうのとか考えるレベルにすら達してないね
ローカル変数の宣言になっちゃってる
769デフォルトの名無しさん:2008/10/08(水) 00:09:12
>>767
{
a = new List<int>();
}
770デフォルトの名無しさん:2008/10/08(水) 00:10:34
>>769
おっ、サンクス(;^ω^)ノシ

>>768
(´;ω;`)ブワッ
771デフォルトの名無しさん:2008/10/08(水) 00:12:46
>>768
ちょっと言い訳がましいことを言わせてもらうとList<T>があまりにも最新の技術なもんで
手持ちの参考書に一言も触れられてないのね。暗中模索状態だからつまらないところで
ミスしてしまう(;^ω^)

ちなみに

a = new List<int>();
           ↑
この()の部分ってコンストラクタの()の名残という認識でok?
772デフォルトの名無しさん:2008/10/08(水) 00:14:35
名残っていうか引数なしのコンストラクタの呼び出しそのもの
773デフォルトの名無しさん:2008/10/08(水) 00:18:42
List<int>もintもStringBuilderも全部型の名前
new StringBuilder()
new List<int>()
ほら同じ
774デフォルトの名無しさん:2008/10/08(水) 00:22:10
List<T>ってC#の短い歴史から考えると全然最新じゃないんだけど
775デフォルトの名無しさん:2008/10/08(水) 00:26:18
C#2.0が出たのって4年くらい前だっけ
776デフォルトの名無しさん:2008/10/08(水) 00:27:03
>>771
ナカーマ

5-6年前に独習C#買って放置→最近また始めたら
ジェネリクスやらLINQやらとんでもないことになっててもうね
777デフォルトの名無しさん:2008/10/08(水) 00:32:32
>>773
int a = new int();
string b = new string();

もokだっけ?
778デフォルトの名無しさん:2008/10/08(水) 00:34:20
>>777
stringは引数なしコンストラクタが存在しないので無理だな
779デフォルトの名無しさん:2008/10/08(水) 00:44:52
FileNotFoundExceptionをToString()で書き出すと

System.IO.FileNotFoundException: 指定されたファイルが見つかりません。
ファイル名 'image\hoge.png' です。

デバッガ上での実行だと、↑みたいにFileNameが出力されるのに
実行ファイルを直接開くと無視されるのね。そんなものなの?
780デフォルトの名無しさん:2008/10/08(水) 00:45:44
>>771
言い訳が言い訳になってないのが滑稽。
781デフォルトの名無しさん:2008/10/08(水) 00:52:39
>>790 自分でFileName出力すれば?
782デフォルトの名無しさん:2008/10/08(水) 00:55:00
>>779
Windowsプロンプトから起動してみたけど
そんな感じのメッセージと一緒にスタックトレースが表示されるよ
783764:2008/10/08(水) 07:50:28
>>765
>>764の書き方だと全然>>751みたいな使い方は出来ないですね。
KeyValuePairって初期化すれば値を割り当てられると思ってました。
>>764は結局>>753と同じだという事が分かりました。

クラスにすると上手く動かないし、>>763を参考にしてみます。
784783:2008/10/08(水) 08:46:30
何度もすいません。
最終的に、クラスにしてKey、Valueのプロパティを持ち、その都度
インスタンスを生成する事で上手くいきました。
今の使い方ではあまりパフォーマンスにも影響は無さそうですが
今後の事を考えてクラスで運用します。
また、値型、参照型の違いが何となく分かった気がします。
有り難う御座いました。
785デフォルトの名無しさん:2008/10/08(水) 10:53:02
C#ってJAVAと同じなの?
786デフォルトの名無しさん:2008/10/08(水) 10:54:25
釣られないぞ
787デフォルトの名無しさん:2008/10/08(水) 11:30:38
釣られてみる
あえて言おう!違うと!
まず名前が違う!これだけでじゅうぶんだ。
788デフォルトの名無しさん:2008/10/08(水) 11:34:19
君と私は名前が違うけど同じ人間だよねえ。
789デフォルトの名無しさん:2008/10/08(水) 11:34:30
JavaとJ++とJ#が同じかどうかとなると哲学なのだが
790タイマーについて:2008/10/08(水) 11:35:13
質問です。タイマーについてですが、普通のWindows.Formsのタイマーを使って
います。

タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編) − @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

ここに書いてあるようなバグはFramework2.0以降は解決されているようでしたが、
タイムアップのイベントが立つたびに、I/Oのメモリー消費がちびっとずつ増えていく
ようなのですが、これはバグなのでしょうか。

791デフォルトの名無しさん:2008/10/08(水) 11:35:37
一括りにすればC#もJAVAもプログラム
792デフォルトの名無しさん:2008/10/08(水) 11:54:12
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になってしまいます。
これは何が問題なんでしょうか?
793792: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バイトぐらいずつ増えていくのでなんだろうと思いましたが、タイマー
とは無関係でした。すみません。
795790:2008/10/08(水) 12:58:04
>>794
ただ、Directory.Exists(_strDirectory)これを行うたびにI/Oのメモリが
消費されるというのは正常なのでしょうか?
796デフォルトの名無しさん:2008/10/08(水) 13:07:58
>>792
カウンタ毎回取得してたら駄目だろ
欲しいPerformanceCounterを保持しておく
797デフォルトの名無しさん:2008/10/08(水) 13:13:48
C#とJAVAってできることはほぼ同じなの?
動く環境も。
798デフォルトの名無しさん:2008/10/08(水) 13:13:50
>>795
「I/Oのメモリ」って何?
799デフォルトの名無しさん:2008/10/08(水) 13:41:01
質問

VC++みたいな独自のイベントってどうやって実装するんですか?。

VC++ならWM_USER以下にならない様な番号ふってWM_HAGEとか定義して
afx_msgにつけ加え定義
MESSAGE_MAPにつけ加えて
て感じだったと思うんですが
C#ではどうやるのでしょうか
800デフォルトの名無しさん:2008/10/08(水) 13:50:58
取りあえずヘルプでイベントの項目読め
801デフォルトの名無しさん:2008/10/08(水) 15:06:27
WindowProc直接いじるならこれかな。
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/467wndproc/wndproc.html
802デフォルトの名無しさん:2008/10/08(水) 15:23:29
>>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()
}));
}
}
803デフォルトの名無しさん:2008/10/08(水) 16:32:30
つぎのようなメソッドを定義し、(処理1)でエラーが発生したときただちに関数を抜け出すためには
どんな方法を採用するのが推奨されていますか?GOTO文で関数の終わりの方まで一気に
飛ばすのはあまり推奨された方法ではないと聞きました。

void Hoge()
{

・・・・

tyr{(処理1)}
catch{・・・}

tyr{(処理2)}
catch{・・・}

・・・

}
804デフォルトの名無しさん:2008/10/08(水) 16:35:03
>>803
return;
805デフォルトの名無しさん:2008/10/08(水) 16:37:46
>>802
何やってるか分からないてのが一番まずいな

>>803
Microsoft曰く「内部実装なんてどう書こうが知らね勝手にしろ」
806デフォルトの名無しさん:2008/10/08(水) 16:39:41
>>804
こんな感じでいいでしょうか?

void Hoge()
{
・・・・

tyr{(処理1)}
catch{・・・; return;}

tyr{(処理2)}
catch{・・・; return;}

・・・
}
807デフォルトの名無しさん:2008/10/08(水) 16:46:29
>>806
catch{ ... ; throw ...}という手もある
808デフォルトの名無しさん:2008/10/08(水) 17:52:56
C#ってgoto文が実は生き残ってたのかよw
809デフォルトの名無しさん:2008/10/08(水) 18:02:31
>>808
無知なのに上から目線ワロタw
810デフォルトの名無しさん:2008/10/08(水) 18:22:24
下向き限定なら絶対ダメってほどでもないでそ
811デフォルトの名無しさん:2008/10/08(水) 18:24:07
switchで使えるのはいけるかもと思った。まだ使ってないけど。
812デフォルトの名無しさん:2008/10/08(水) 18:32:26
gotoをなくしても break ラベル とか別の文法が増えるだけ。
もう大人なんだからgotoの扱いは自分で責任をもてるだろってこと。
こういう考えでgotoを残してる言語はわりとある。
813デフォルトの名無しさん:2008/10/08(水) 18:33:41
>>807
throw・・・例外を投げるメソッドでしたっけ?
これをそこで使うことにはどういう意味があるんですか?
814デフォルトの名無しさん:2008/10/08(水) 18:40:48
例外投げればとにかく処理は呼び出し元に戻せる
場合によるけど何も考えずreturnよりは適切かも
815デフォルトの名無しさん:2008/10/08(水) 18:45:33
>>814
> 例外投げればとにかく処理は呼び出し元に戻せる

void Hoge()を呼び出した元にもtry&catchの構文を書いて
そこのcatchに例外をthrowするということですか?
816デフォルトの名無しさん:2008/10/08(水) 18:46:56
↑こんな感じでしょうか?

try{ void Hoge(); }
catch(Exception e){・・・・}

↑のcatch(Exception e){・・・・}に例外をスローすればvoid Hoge()を抜けられるという発想ですか?
817デフォルトの名無しさん:2008/10/08(水) 20:18:34
JavaのTreeSetみたいなやつはない?
818デフォルトの名無しさん:2008/10/08(水) 20:34:29
フォルダ名とファイル名のstringを合成してファイルへのフルパスを生成しようと思ってます。

string folder = @"c:\folder";
string file = "test.dat";

string fullPath = folder + @"\" + file;

ここでもし人によってフォルダ名を
string folder = @"c:\folder\";
のように末尾に\マークを入れてしまう人がいるかもしれません。
フルパスを合成する前にフォルダ名の末尾に\マークがあるかないか場合分けする必要が
あるわけですが、C#のクラスにこのあたりの処理を自動化してくれるものはありませんか?

無ければフォルダ名の末尾に\マークがあるかないかで場合分けして対処する必要があります。
819デフォルトの名無しさん:2008/10/08(水) 20:37:16
Path.Combineあたり
できるかは知らないけどその辺に無かったら無い
820デフォルトの名無しさん:2008/10/08(水) 20:47:14
>>819
どうもです。調べてみますノシ
821デフォルトの名無しさん:2008/10/08(水) 20:47:37
ユーザに見せる必要がなければ、\が幾つ並んでも問題ない。
それでも受け付けてくれる。
822デフォルトの名無しさん:2008/10/08(水) 20:50:54
配列のラストが\\なら消す。
823デフォルトの名無しさん:2008/10/08(水) 21:45:13
>>816
そういうこと
抜けるだけならreturnを使うけど、例外の時はthrowを使うという手段もある。
特に、その関数無いでは対処仕切れない場合とか、例外の再throwをすることがある。
string GetMessage()
{   try {...} catch (ry) {  return " tell a lie :p";} }
より
{   try {...} catch (ry) {  throw (new Exception("ごごご、ごめんなさい");} }
のほうが良い
824デフォルトの名無しさん:2008/10/08(水) 21:47:15
>>823
それやるなら、前の例外も付けてやったほうがいいんじゃない?
catch(Exception e) {
throw (new Exception("ごごご、ごめんなさい", e);
}
825デフォルトの名無しさん:2008/10/08(水) 21:53:09
普通のrethrowでいいよ
826デフォルトの名無しさん:2008/10/08(水) 21:56:20
>>825
それもそうだな。ネタを考えてて変なことやっちゃったよ
827デフォルトの名無しさん:2008/10/08(水) 22:21:57
>>797
C#とJavaって言語だけ見るとダメで、
バックについてるのが Microsoft か SUN かという違いを見ないとダメ。

SUN がクソ。
828デフォルトの名無しさん:2008/10/08(水) 22:35:02
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 オンリーでいける
というわけではない。コントローラ側はむしろ組み込みの世界に近いと思う
830デフォルトの名無しさん:2008/10/08(水) 23:14:55
コントローラ側は、電気屋がシーケンサからの応答をメモリアドレス指定で
書いてくれるから、それ以降をやればいい。
電気回路、ロボット含めて全体を提案したいのなら、懇意の電気屋で全体
わかるやつと提案したほうが利益お互いとくする。
831デフォルトの名無しさん:2008/10/09(木) 06:19:19
JAVAってどこでも動くっていうのがウリでしょ?
でも結局Java仮想マシンが入ってないと動かないんでしょ?
じゃあWindowsでしか動かないとかと一緒で、Java仮想マシン上じゃないと動かないじゃん。
ただ違うのが多くの環境でJava仮想マシンをSUNが提供するよって事だけだよね?
832デフォルトの名無しさん:2008/10/09(木) 06:26:24
>>831
あの当時のSUNはほんとにすべての環境にJava VM作る気だったと思うよ。
一時は、Java バイトコードをネイティブ実行するプロセッサというか
ハードウェアアクセラレータまで考えられてたし。

実際のところ、「どこでも動く」を狙いすぎて、
コスト係りすぎと、パフォーマンス面での開発者の不満を招いただけな気が。

あと、「どこでも動く」であるためには pure Java である必要があって、
それがとにかく不評。
それに対する MS の答えが、言語間相互運用。
833デフォルトの名無しさん:2008/10/09(木) 07:06:28
Javaはアプリにしても重いし、アプレットにするとブラウザごと落ちるしほんと糞
834デフォルトの名無しさん:2008/10/09(木) 07:13:31
>>833
それもね、SOLARIS 上では結構軽いらしいよ。

Windows の牙城を崩したいって思惑があったから
Windows 版最優先で開発しなかったのが痛い。

あと、IBM 版の Windows 用 VM はそれなりに軽快だったのに、
それすらも SUN は認めなかった。
835デフォルトの名無しさん:2008/10/09(木) 08:33:38
どこでも動くってのも、
そもそも色んな環境があるってのも、それぞれ異なる目的に応じる為なわけで。
それを、全ての環境で共通なことしか出来ないよ、だと使えないよな。
836デフォルトの名無しさん:2008/10/09(木) 09:13:56
でも確かに。サーバーってのは、普通は大体同じ毎をするもので、
その同じ事が環境によって細々と差異が有って面倒くさかったから。
SUNの考え方もサーバーの世界に限れば非常に正しいことだけどね。
837デフォルトの名無しさん:2008/10/09(木) 09:17:47
windows用最強言語出来たお。規格化しとくから後は勝手に使ってもいいよ。
あっそれから、繁盛するようならそっちからも集金するから(笑)

838デフォルトの名無しさん:2008/10/09(木) 15:54:59
↓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がそれ以降使えなくなって
しまう気がします。こういう時は放置してしまっても構わないでしょうか?
839デフォルトの名無しさん:2008/10/09(木) 15:59:26
一般的にはStreamReader引き回すなんてやらないんじゃないか
Disposeが必要なオブジェクトは可能な限りスコープ小さくする
840デフォルトの名無しさん:2008/10/09(木) 16:46:36
>>839
> 一般的にはStreamReader引き回すなんてやらないんじゃないか

そうですか・・・
面倒でもいったんstringかなにかに保存して参照渡しし、その他のストリームは一切
Disposeするという方法が定石なんでしょうか?
841デフォルトの名無しさん:2008/10/09(木) 16:54:27
やるにしても StereamReaderを返して
使う側でusingするとかかな

なんにせよ、ref と書くのは変だ
842デフォルトの名無しさん:2008/10/09(木) 18:40:13
MSDNより
>ストリームを閉じて、再使用のための接続を解放するために Stream.Close メソッドまたは
> HttpWebResponse.Close メソッドを呼び出す必要があります。
>Stream.Close と HttpWebResponse.Close の両方を呼び出す必要はありません。
>ただし、両方呼び出してもエラーは発生しません。ストリームを閉じないと、
>アプリケーションで接続が不足する原因となります。

>StreamReader オブジェクトと、その基になるストリームを閉じ、
>リーダーに関連付けられたすべてのシステム リソースを解放します。

ということでsrをCloseすれば連鎖的にCloseされるので問題なし。
それでも普通refは使わないぞっと。
StreamReader Method()
 
843デフォルトの名無しさん:2008/10/09(木) 18:52:02
どうもでし( ´・ω・)ノシ
844デフォルトの名無しさん:2008/10/09(木) 19:05:16
>>842
> ということでsrをCloseすれば連鎖的にCloseされるので問題なし。
> それでも普通refは使わないぞっと。
> StreamReader Method()

return sr;
する前にsrをCloseしたらそもそもreturnするものが無くなるんじゃね?
かといってreturnしてメソッドを閉じた後にCloseしても意味無いしな。
845デフォルトの名無しさん:2008/10/09(木) 19:13:11
何を言ってるのだ…
846デフォルトの名無しさん:2008/10/09(木) 20:52:19
http://tangiblesoftwaresolutions.com/Product_Details/CPlusPlus_to_VB_Converter_Details.htm
上のサイトのソフトなんですが、これはC++のソースをVB6.0に変換することができるのでしょうか?
847デフォルトの名無しさん:2008/10/09(木) 21:22:30
何もかもスレ違いだ
848デフォルトの名無しさん:2008/10/09(木) 22:01:28
以下のようにswitchステートメントの中にif文とかfor文を挿入することってできますか?

switch (hoge)
{
case 1:
    ・・・・
    break;
case 2:
    ・・・・
    break;
default:
    if ( ・・・ )
    {・・・}
    else
    {・・・}
    break;
}
849デフォルトの名無しさん:2008/10/09(木) 22:09:34
何故まずやってみてから質問しないのだ?
君って誇張なしでどこか精神病んでるんじゃないの?
850デフォルトの名無しさん:2008/10/09(木) 22:17:29
これ完全に釣りだからほっておいたほうがいいよ
最近いる概念理解できて無い君でしょ
いじめられたから荒らしに転じちゃったかなw
851デフォルトの名無しさん:2008/10/09(木) 22:43:45
>>842
>StreamReader オブジェクトと、その基になるストリームを閉じ、
2つ閉じないといけないんじゃないか?
852デフォルトの名無しさん:2008/10/09(木) 22:52:52
うんにゃ
そいつはStreamReader.Closeの説明だ
853デフォルトの名無しさん:2008/10/09(木) 23:00:21
ファイナライザがよきに計らってくれる
854デフォルトの名無しさん:2008/10/09(木) 23:15:18
>>849-850
気持ちはわからんでもないが>>1
855デフォルトの名無しさん:2008/10/09(木) 23:44:22
>>853

Stream 系はよきに計らってくれないことがある。
ある意味仕方ないんだが
856デフォルトの名無しさん:2008/10/09(木) 23:46:45
明示的にDisposeしないとメモリリークするようなつくりのものもあるよ
857デフォルトの名無しさん:2008/10/10(金) 02:04:32
Streamを保持し続けて、必要に応じてStreamReaderで読みたい時ってどうやるの?
一度StreamReaderにアタッチしちゃったらもうStreamもろともCloseされちゃうんだよね?
やっぱりStreamReaderを保持し続けるのかな?
858デフォルトの名無しさん:2008/10/10(金) 02:26:53
プロパティに初期値を記憶させようとコンストラクタでプロパティに値を代入しようとしたところ
エラーが返ってきてしまいました。

コンストラクタでプロパティの初期値を設定しようという考えはまずいのでしょうか?
859デフォルトの名無しさん:2008/10/10(金) 02:39:13
>>857
StreamReaderはClose(=Dispose)しなければ勝手にBaseStreamを閉じたりしない
というか、その為のIDisposableだろ
860デフォルトの名無しさん:2008/10/10(金) 06:17:28
バッファリングがあるからCanSeekじゃないStreamは大変だけどなー

>>858
エラーの内容ぐらい書け
861デフォルトの名無しさん:2008/10/10(金) 08:32:07
rsl\]tylhorzh;f@eeyq@9
862デフォルトの名無しさん:2008/10/10(金) 10:43:31
>>858
構造体だろそれ
構造体のメンバをコンストラクタで初期化するときはプロパティは使えない
863デフォルトの名無しさん:2008/10/10(金) 10:55:45
>>862
なんでそういう仕様なの?
864デフォルトの名無しさん:2008/10/10(金) 11:13:15
構造体のメンバはクラスと違って自動的に初期化されないから、
すべてのメンバが初期化されるまでは使えない。
それは構造体の内部でthisを使うのも同じ。
865デフォルトの名無しさん:2008/10/10(金) 12:09:44
866デフォルトの名無しさん:2008/10/10(金) 12:10:17
言っている意味がよくわからないんだが
どの段階の初期化?
なんで自動でできないの?
867デフォルトの名無しさん:2008/10/10(金) 12:20:38
パフォーマンスのためじゃないの
>>763みたいなことしたら二重の初期化で無駄
868デフォルトの名無しさん:2008/10/10(金) 12:20:42
>>864

クラスは
コンストラクタに入った時からthisが初期状態で出来上がるけど
構造体だと
コンストラクタを抜けるまでthisが出来上がらないから
コンストラクタ内部ではthisが使えない

……という意味? 間違った行間読みならスルーしてくれ
869デフォルトの名無しさん:2008/10/10(金) 12:27:34
いいんじゃね
初期化されてない構造体のインスタンスは「使えない」というのは、ほかのメソッドに渡せないということ
自身のインスタンスメソッドにthisとして渡すのも同じことだよ
870デフォルトの名無しさん:2008/10/10(金) 12:52:50
構造体は実は宣言した時点で値が0に初期化されていたりする。
newするしないに関わらず。
871デフォルトの名無しさん:2008/10/10(金) 12:58:46
>>870
ってことは自動で初期化できているのは構造体じゃないの?
クラスはnewしないと初期化できないんだし
872デフォルトの名無しさん:2008/10/10(金) 13:04:16
「ローカル変数は初期化しないと使えない」という、意味的なC#の制限に付随したお約束だよ
873デフォルトの名無しさん:2008/10/10(金) 13:13:00
プロパティーはgenericに出来ない?
874デフォルトの名無しさん:2008/10/10(金) 13:16:44
>>870
されないよ。
C#じゃどの道コンパイルエラーになるから確認できないが。
875デフォルトの名無しさん:2008/10/10(金) 13:26:53
>>873
まともなgetter/setter書けないだろ
876デフォルトの名無しさん:2008/10/10(金) 13:46:18
プロパティのsetter/getterで初期値を設定できるようにしなかったのはなぜ?
877デフォルトの名無しさん:2008/10/10(金) 13:52:49
そのほうが自然だから
構造体なんてどうせパフォーマンス目的のニッチで低レベルなものなんだから
878デフォルトの名無しさん:2008/10/10(金) 15:57:45
何を言ってるのかね?
879デフォルトの名無しさん:2008/10/10(金) 16:17:21
Windowsエクスプローラの右クリックメニューで出て来る「新規作成」の
機能をシミュレートしようと思っています。

その場合、可能であればですが、エクスプローラが使っているDLLか
何かのファイルを横から使うことでも実現できるものでしょうか?その場合は
DLL内のAPIを使うために必要な知識としてはどんなものがあるでしょうか?
880879:2008/10/10(金) 16:21:56
>>879
また、もし .NETFramework のメソッドから可能であるとしたら、
レジストリーから行うことになりそうですが、

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew

という、途中の Discardable なるやっかいな代物を扱う必要が
ありそうでした。このキーはときどき何かの事情で削除されてしまう
場合があるもののようで、

無いときは自分で作成しなければならないようでした!この場合、
そうしたことを実際にしないといけないでしょうか?もし何かうまい
別法があるようでしたら教えて戴けないでしょうか、よろしくお願い
します!
881デフォルトの名無しさん:2008/10/10(金) 17:14:31
C#のOSS教えてください
882デフォルトの名無しさん:2008/10/10(金) 17:24:11
>>875 where
883デフォルトの名無しさん:2008/10/10(金) 17:48:37
staticなメソッドかプロパティを表せるinterfaceのようなものは無いでしょうか。
あるいは実現方法はありますでしょうか。
884デフォルトの名無しさん:2008/10/10(金) 19:04:21
staticならinterfaceである意味が無いだろ

interfaceにstaticメンバを書きたくなることならたまにあるけど
885デフォルトの名無しさん:2008/10/10(金) 19:40:48
genericsの制約として使いたいって事かな?

A<T>を継承する制約をつけても、
A<T>のTに具体的な型を入れないとA<T>のメンバを呼び出せないので、
たとえ出来たとしても意味ないけど。
886デフォルトの名無しさん:2008/10/10(金) 19:44:23
ジェネリクス導入前まではな > 意味ない

2.0 開発中の頃オペレータまわりの解決策でコネクト提案されたことが
あったんだけどふゅーちゃーばーじょんで考えるよとかえってきたんだっけかな

今考えると動的にごにょごにょ出来るし拡張メソッド出来たから必要か
どうかは微妙かなあ
887デフォルトの名無しさん:2008/10/10(金) 19:48:19
>>881
CodePlexとか見たら腐るほどある
888883:2008/10/10(金) 20:14:05
とりあえずはないということですね。
ありがとうございました。
889デフォルトの名無しさん:2008/10/10(金) 20:23:25
どういうときにどういう風に使いたかったのか書けば
なんか代案が出るかもよ?
890デフォルトの名無しさん:2008/10/10(金) 21:03:10
たまに、ファイル名とかの前に@がついてたりする。
@"input.txt"

この文字列の前にくっついてる@ってなに?
891デフォルトの名無しさん:2008/10/10(金) 21:05:38
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
892デフォルトの名無しさん:2008/10/10(金) 21:08:03
コピペ君って馬鹿だな、まで読んだ。
893デフォルトの名無しさん:2008/10/10(金) 21:27:06
>>890
a = @"C:\HOGE\""FOO"""
b = "C:\\HOGE\\\"FOO\""

@付きの場合VBっぽいリテラルにできる。
ファイルのパスや正規表現のときに便利。
894デフォルトの名無しさん:2008/10/10(金) 21:48:12
Form1を閉じる方法を詳しく教えてください
895デフォルトの名無しさん:2008/10/10(金) 21:48:39
今からプログラム始めたいんですけど
何からしたらいいですか?
896デフォルトの名無しさん:2008/10/10(金) 21:50:06
>>895
そんな質問している時点でまず無理
897デフォルトの名無しさん:2008/10/10(金) 21:51:22
>>895
おねがいします。
898デフォルトの名無しさん:2008/10/10(金) 21:53:00
適当に処理系見繕って、適当にはじめろよ
899895:2008/10/10(金) 21:54:17
>>898
ありがとうございます。
処理系って何ですか?
900デフォルトの名無しさん:2008/10/10(金) 21:58:30
>>899
ググれ
901895:2008/10/10(金) 21:59:27
>>900
わかりました。ありがとうございます。
902デフォルトの名無しさん:2008/10/10(金) 22:00:30
Form1を閉じる方法をふらっと教えてください
903デフォルトの名無しさん:2008/10/10(金) 22:01:40
>>902
Close とかそんなメソッドないか?
904デフォルトの名無しさん:2008/10/10(金) 22:19:38
プログラムで何をしたいのかわからないって時点で向いて無いと思うんだがな
やりたいことが多すぎて、背伸びしすぎてパニックになるぐらいが向いていると思う
905デフォルトの名無しさん:2008/10/10(金) 22:27:58
メニューに終了作ってクリックしたところに
this.Close;
って書いたらエラーになる
906デフォルトの名無しさん:2008/10/10(金) 22:34:40
>>905
で?

どんなエラーかくらい書けよ
907デフォルトの名無しさん:2008/10/10(金) 22:40:22
エスパー居ないんですか?

エラー 1 割り当て、呼び出し、インクリメント、デクリメント、および新しいオブジェクトの式のみがステートメントとして使用できます。 C:\(中略)Form1.cs 21 13 WindowsFormsApplication1
908デフォルトの名無しさん:2008/10/10(金) 22:41:34
>>905
this.Close(); な、
メソッドとプロパティの区別をつけよう。
あと、初心者がいきなりGUIは厳しい。
909デフォルトの名無しさん:2008/10/10(金) 22:45:26
なんですかその意味の無いカッコは
ムカついたのでカッコの中に「笑」を入れたらエラーが出ました

this.Close(笑);

エラー 1 名前 '笑' は現在のコンテキスト内に存在しません。
910デフォルトの名無しさん:2008/10/10(金) 22:49:16
今、メモ帳をまんまパクったようなやつ作ろうとしてるんです
で、メニューバー貼り付けてメニュー周りからやってるんです
プロになるとかお金稼ぐとか関係無いですメモ帳まるパクリ作ってみたいだけなんです
911デフォルトの名無しさん:2008/10/10(金) 22:50:05
意味がないとは失礼ない。
それがメソッド呼び出しであるという意味を与えている。
912デフォルトの名無しさん:2008/10/10(金) 23:01:22
>>910
がんばれ。
913デフォルトの名無しさん:2008/10/10(金) 23:02:35
メモ帳を作るのがどれだけ難しいかを知るのはいいことだ
多分完成はしないだろうけどな
914デフォルトの名無しさん:2008/10/10(金) 23:03:41
検索・置換とかを実装しなければらくちん
915デフォルトの名無しさん:2008/10/10(金) 23:06:53
検索・置換なんぞなんも難しくないわ
総合的な機能を持った一つのGUIアプリを作るということ自体が難しいんだ
テキストボックス貼り付ければ楽だけどな
916デフォルトの名無しさん:2008/10/10(金) 23:07:31
開く(O)の処理できた
やばいなこれ

天才かもしれん
917デフォルトの名無しさん:2008/10/10(金) 23:25:16
〜〜ばれ注意〜〜


・火村夕・・・妹を震災で亡くしており、当時の記憶を思い出させる優子を邪険にしていたが
       優子がクラスで虐められている事や、義理の兄にレイプをされている事を聞き
       少しずつ優子に心を開き始めることになる。 
       優子の死後は大学に進学しオーストラリアに日本の音羽と言う町と殆ど同じ町を作
       るプロジェクトに携わる。
       死んだ優子が日本の教会に居るという噂をミズキから聞き、日本の音羽に向かう。

・久瀬修一・・・心臓の病気で死が近づいている恐怖に怯えて生活している。
        衰弱していくみっとも無い姿を見られたく無いので
        前の彼女もレイプして追い出した。
        そこで羽山ミズキという厄介な存在に出会ってしまう。
        ミズキに絶縁を迫るが言う事を聞かなかったのでミズキをレイプする事に。
        
・雨宮優子・・・初恋の人と再会出来た嬉しさの裏に、希望の無い自分と比べると明らかに
        恵まれていながら自分を不幸だと思っている火村を憎む事になる。
        ある日上靴が盗まれ、その時火村が優しくしてくれたのでそれに漬け込む事にした。
        靴をずたずたに裂いたのは自作自演。自分の傷を見せ、更にレイプされて
        いた事も告白した。これで火村は何も出来ない自分の無力さに自虐し、火村に深い傷
        を残させる事が出来るはずだった。しかし火村は自分を騙していた事に関しては
        何も言わず、優子の事を守ってやると言ってくれたので優子はそれに頷き、
        明良と戦う事を決意する。明良が死んだ後妊娠まで発展したが結局交通事故
で死ぬ。しかし奇跡が起きて優子は幽霊となって再び日本の音羽に現れる。

918デフォルトの名無しさん:2008/10/10(金) 23:26:19
・雨宮明良・・・優子の義理の兄。
        自分の実の妹が死んだ事へのこの世の中への復讐と掛けて優子を
        毎日暴行を加える事に。
        そして優子が明良の実の妹と同じ年になったクリスマスの日に、
        強引に優子の処女を奪った。それ以降、毎日優子をレイプした。
        学校で火村と優子に責められたので自宅を放火し家ごと焼死。

・羽山ミズキ・・・家族一家で車ごと海に突っ込み自殺、母親に首を絞められ水を
         あまり飲まなかったのでミズキだけが助かった。
         又幼い頃に自分が車に轢かれそうな時に優子がかばってくれたおかげで
         助かった。(その代わりに優子は死んだ)
         そして中学3年の夏、ミズキはオーストラリアの音羽に行く。
         そこで強がっていて気の弱い久瀬に恋をしてしまう。        
         ある日久瀬にレイプされしばらく久瀬と会わなくなるが、今死の恐怖から
         久瀬を救えるのは自分しか居ないと思い再び久瀬の元へ復縁を求めに行く。
919デフォルトの名無しさん:2008/10/10(金) 23:38:59
コピペ君って馬鹿だな、まで読んだ。
920デフォルトの名無しさん:2008/10/11(土) 00:22:25
昔メモ帳作ってみたけど、
元に戻すを複数回できるようにするのが難しいので諦めた。
軽いことが取り得のメモ帳なのに、起動が無茶苦茶遅いメモ帳ができた。
921デフォルトの名無しさん:2008/10/11(土) 00:48:38
全く関係ないんだけど、
メモ帳って検索とかアンドゥついてたっけ?と思ってしまった
922デフォルトの名無しさん:2008/10/11(土) 00:51:18
>>920
DelphiならTStringListそのままオブジェクトをつっこめるから
そこにTStringListを入れてた。

C#ならStack<String>を使えば楽ちんだな。(Delphiでもスタック的なものはあったはずだが、なぜか使わなかったな)
923デフォルトの名無しさん:2008/10/11(土) 00:51:58
>>921
9xのは付いてなかったような気がする。
924デフォルトの名無しさん:2008/10/11(土) 00:54:57
そんなわけないだろ。
読めるファイルのサイズの上限とANSIにしか対応してないの以外は
XPやVISTAのと違いはないでしょ。
925デフォルトの名無しさん:2008/10/11(土) 01:09:19
例えばVistakソリティアはDirectXになってる
926デフォルトの名無しさん:2008/10/11(土) 01:10:11
>>922
今ならもっと簡単にできるんだね。
遊びだしSDK1.1のままで十分だったけど勉強し直してようかな。
927デフォルトの名無しさん:2008/10/11(土) 01:17:46
>>922
stringってファイルサイズが5MBあったら
何か書くたびに5MB使用メモリが増えるのか?
928デフォルトの名無しさん:2008/10/11(土) 02:47:39
隠しコマンドの現在時刻の挿入がメニューに載った、Vistaメモ帳
929デフォルトの名無しさん:2008/10/11(土) 04:54:55
自分で定義する「俺様例外クラス」も1クラスごとに1ファイルに保存していくのが流儀なの?
930デフォルトの名無しさん:2008/10/11(土) 05:32:39
using って使いまくった方がいいの?
931デフォルトの名無しさん:2008/10/11(土) 06:03:33
うん
932デフォルトの名無しさん:2008/10/11(土) 07:25:35
クラスのメンバとか使えないよ
933デフォルトの名無しさん
>>927

コマンドパターン使うとか