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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2008/09/29(月) 12:39:47
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

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

前スレ

ふらっとC#,C♯,C#(初心者用) Part30
http://pc11.2ch.net/test/read.cgi/tech/1219220127/
0002デフォルトの名無しさん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/
0003デフォルトの名無しさん2008/09/29(月) 12:40:49
参考サイト。まずはここで検索してから。
http://www.google.co.jp/
http://homepage3.nifty.com/midori_no_bike/CS/
http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html
http://dobon.net/vb/dotnet/
http://jeanne.wankuma.com/tips/
http://www.labasp.net/CsharpNote/
0004デフォルトの名無しさん2008/09/29(月) 13:20:37
(前スレ続き)
ってゲームのセーブデータみたいな移動・コピー不可属性のことか?
あれは自分で好きにプログラム組めないからできる話。
0005デフォルトの名無しさん2008/09/29(月) 13:24:49
スレタイの「ふらっと」ってどういう意味なんでしょう(?_?)
0006デフォルトの名無しさん2008/09/29(月) 13:30:13
>>998
そこまで規制する必要ってのも無いとは思うけどなぁ。
機密文章の持ち出しを禁止するため?

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

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

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

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

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

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

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

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

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

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

まあ、ですから、「書き込み」という操作にも影響が及ぶような
仕組みでないといけないわけではありますですが・・・。
0015デフォルトの名無しさん2008/09/29(月) 14:04:56
>>10
>>8 ooOO(ファッキュー)
ttp://www.nicovideo.jp/watch/sm2364432
0016デフォルトの名無しさん2008/09/29(月) 14:05:58
いや、だからさ。
Explorerでのコピー操作ならそれでいいかもしれないよ?

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

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

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

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

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

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

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

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

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

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

それから、直接は関係ないがcatch(Exception)はやめたほうがいい。
0029デフォルトの名無しさん2008/09/29(月) 18:21:28
そりゃスコープから外れたから。
HttpWebResponse res;
ここだけ外に出してごらん。
0030272008/09/29(月) 18:28:53
try文の中身を

HttpWebResponse res;
try
{
   res = (HttpWebResponse)req.GetResponse();
}

と変更してみましたが、今度は同じく Stream st = res.GetResponseStream();の部分で

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

という違うエラーが帰ってくるようになりましたorz・・・

その後ものは試しとtry文の前の命令を

HttpWebResponse res = null;

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

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

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

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

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

GetResponse();

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

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

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

(名前,科目,点数)

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

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

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

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

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

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

それができれば問題2も自動的に解決するでしょ。
0044デフォルトの名無しさん2008/09/29(月) 21:20:40
>>40
class クラス:List<生徒> // 生徒Collectionでもおk
{ String 名前; int Get平均点(科目名 科目);}みたいなクラスにAddしていけばいいんじゃない?
0045デフォルトの名無しさん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);
}
}

こんなんかね
0046デフォルトの名無しさん2008/09/29(月) 21:29:46
テキストエディタ作ってみました
TeraPad風ですが、プラグインの追加機能などあります
http://www.dotup.org/uploda/www.dotup.org7215.zip.html
0047デフォルトの名無しさん2008/09/29(月) 21:32:37
素早い返信ありがとうございます。

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

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

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

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

>>44さん

class クラス:List<生徒>

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

>>45さん

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

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

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

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

他の人が書いているようにList<T>とかDictionary<T>を使った方が簡単なんだけど、
いきなりそれらのクラスを理解しろって言っても無理っぽいからまずは配列で
やってみたら?
0054デフォルトの名無しさん2008/09/29(月) 22:00:47
点プレにこのあたりのリンクも必要なんじゃね?
http://ufcpp.net/study/csharp/
http://msdn.microsoft.com/ja-jp/library/618ayhy6.aspx
http://msdn.microsoft.com/ja-jp/library/67ef8sbd.aspx
0055デフォルトの名無しさん2008/09/29(月) 22:01:08
ごめんDictionary<T>ってそんなのないなw
0056デフォルトの名無しさん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 };
}

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

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

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

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

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

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

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

req.AllowAutoRedirect = false;

でオートリダイレクトを拒否することができるようになりました( ´∀`)ノシ
0095デフォルトの名無しさん2008/09/30(火) 20:45:20
>>92
それだったらメソッドで書けばいいだろ
なんでプロパティ使うんだよ
0096デフォルトの名無しさん2008/09/30(火) 20:46:52
>>95
だったら、とはどういう意味?
0097デフォルトの名無しさん2008/09/30(火) 20:47:17
プロパティにする利点は使う側にある
0098デフォルトの名無しさん2008/09/30(火) 20:54:38
String と string ってどうちがうの?
0099デフォルトの名無しさん2008/09/30(火) 20:55:50
まったく同じであることが言語仕様に明記されています
0100デフォルトの名無しさん2008/09/30(火) 21:00:25
ごめんなさい
0101デフォルトの名無しさん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回は動くのですが、そのあとは取得できなくなってしまいます。
アドバイスお願いします。
0102デフォルトの名無しさん2008/09/30(火) 21:27:03
すみませんが、何をおっしゃっているのか理解できません
0103デフォルトの名無しさん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とかやらん方がいいと思うよ
0104デフォルトの名無しさん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;
                                   }}}} //行が長すぎるってしかられた

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0207デフォルトの名無しさん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
0208デフォルトの名無しさん2008/10/02(木) 00:11:47
>>206さん
ありがと
今からやってみます
コンソールですね
0209デフォルトの名無しさん2008/10/02(木) 00:13:06
>>203
引数は無理なのねーやっぱり

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

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

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

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

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

〜略〜

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

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

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

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

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

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

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

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

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

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

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

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

適当に記述してたらこれでいけたっぽいんだけど、これでいいのでしょうか?
02932752008/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内はどう記述すればいいですか?
0294デフォルトの名無しさん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();
}

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

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

せっかくC#を使っているのにCでゴリゴリ書いているコードとレベルが変わらんぞ。
02972942008/10/02(木) 15:10:48
structだと変更不可能なようですorz

だとすると、forで回すのがよさそう。

for(int i = 0; i < Guntai.Length; ++i){
Tekki kitai = Guntai[i];
      kitai.pArr = ZahyouKeisan.GetArray();
   }
0298デフォルトの名無しさん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を返せる理由が分からない
02992942008/10/02(木) 15:22:29
>>296
解説どうもです。
0300デフォルトの名無しさん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();
 }
}
0301デフォルトの名無しさん2008/10/02(木) 15:38:06
変数名が now_enemyCount と new_enemyCount ってのは殺人的だぞ
03023002008/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();
 }
}
0303デフォルトの名無しさん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;
}
}
03043002008/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());
}
}
}
0305デフォルトの名無しさん2008/10/02(木) 16:50:39
だめだめじゃないか

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

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

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

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

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

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

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

とでもしておくか。

しかし戻り値がList<T>のメソッドは使うなという記事は見つけられんかった。
リンク先おせーてくれよ。
0310デフォルトの名無しさん2008/10/02(木) 18:11:36
その代用で使う
〜Collectionってやつがうざい
0311デフォルトの名無しさん2008/10/02(木) 18:22:46
俺もList<T>を返すメソッドを書く事はある
だめだというガイドラインがあるなら俺も知りたい
0312デフォルトの名無しさん2008/10/02(木) 18:24:22
リスト返したらセットアクセッサが無意味化するぞ
0313デフォルトの名無しさん2008/10/02(木) 18:28:44
?
0314デフォルトの名無しさん2008/10/02(木) 18:29:29
とゆーかカプセル化が崩壊
0315デフォルトの名無しさん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

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

っ インデクサ
0317デフォルトの名無しさん2008/10/02(木) 18:32:13
"do not return list" c# とか適当な英文でググるといいよ
ttp://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx
0318デフォルトの名無しさん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をいろいろ計算して、その結果を返すメソッドがガイドライン違反という説明にはなってない。
0319デフォルトの名無しさん2008/10/02(木) 18:41:49
計算結果を返すだけなら別にいいんじゃね
それをどういじくろうが誰も困らないし
0320デフォルトの名無しさん2008/10/02(木) 18:45:04
constがないからな
0321デフォルトの名無しさん2008/10/02(木) 18:46:05
List<T>返す云々以前にまずまともな設計をするべき
0322デフォルトの名無しさん2008/10/02(木) 18:49:40
>>318
わざわざList<T>で返されたら追加することに意味があるのかと思っちゃうじゃないか……
0323デフォルトの名無しさん2008/10/02(木) 18:54:56
>>273
List<>を返すのも配列を返すのもかわらなくね?
結局どうすればいいんだろ
0324デフォルトの名無しさん2008/10/02(木) 18:57:16
パフォーマンスを考えればToArrayしとくべきだろ
で、引数や返り値の配列は変更しないというのは暗黙の了解にしとく
0325デフォルトの名無しさん2008/10/02(木) 18:59:55
Dictionary.ValueCollection みたいに
0326デフォルトの名無しさん2008/10/02(木) 19:01:04
>>323
だよね
わざわざ、ToArrayしてまたList<>にいれるわけでしょ?
変換するのは無意味な気がするんだが
0327デフォルトの名無しさん2008/10/02(木) 19:03:32
> わざわざ、ToArrayしてまたList<>にいれるわけでしょ?
これが言い切れるようなinternalな場合はどうでもいいよ
0328デフォルトの名無しさん2008/10/02(木) 19:03:52
書き込み可能な配列で返すのもよろしくない。
0329デフォルトの名無しさん2008/10/02(木) 19:19:57
それを言ったらオブジェクトを返すこと自体良くないきがするんだが
0330デフォルトの名無しさん2008/10/02(木) 19:21:55
たとえば>>325のは返す本人以外は要素の取得しか出来なかったりする
0331デフォルトの名無しさん2008/10/02(木) 19:25:54
親戚も弄れるけどなw
0332デフォルトの名無しさん2008/10/02(木) 19:27:01
今時ならジェネレータにして使う側がToList()なりToArray()なりするというのが良さそう
0333デフォルトの名無しさん2008/10/02(木) 19:34:11
>>321
まともな設計をお願いします
0334デフォルトの名無しさん2008/10/02(木) 19:41:17
引数なしのstaticメソッドで座標を作ってそれを様々な敵機に入れるなんてのはまともな設計じゃないな
普通に考えたら全部同じ座標になるし、それなら何度もメソッドを実行する意味がない
0335デフォルトの名無しさん2008/10/02(木) 19:58:19
なるほど
やっぱりガイドライン違反じゃないんだな
0336デフォルトの名無しさん2008/10/02(木) 20:23:45
>>334
引数無しなのは質問の要点をわかりやすくするために省略しただけ
実際は玉をよけたり、当たり判定だったりあるし、
敵機の目的地点までの経由地点の座標群を敵機ごとに保持しているだけ
「usingディレクティブがない」と揚げ足取るぐらい蛇足な指摘だと思うんだがな
0337デフォルトの名無しさん2008/10/02(木) 20:29:41
>>335
お前がそう思うんなら そうなんだろう お前ん中ではな
0338デフォルトの名無しさん2008/10/02(木) 20:30:54
>>334
怒るな
怒ったら負けだ
0339デフォルトの名無しさん2008/10/02(木) 20:39:39
既に負けてる
0340デフォルトの名無しさん2008/10/02(木) 20:48:35
なんでわざわざ作りにくい実装にするのよ
0341デフォルトの名無しさん2008/10/02(木) 21:03:40
>>340
作りやすい実装をお願いします
0342デフォルトの名無しさん2008/10/02(木) 21:30:54
戻り値の型にList<T>がまずいのは当然として、
IList<T>なら遥かにいいと思っているんだが違う?
0343デフォルトの名無しさん2008/10/02(木) 21:49:22
List<T>を返すのがなんでまずいんだ?初めて聞いたぞ
それを言ったらオブジェクトの中にList<T>が含まれてたら何にも返せなくなっちゃう
0344デフォルトの名無しさん2008/10/02(木) 21:50:05
>>343
ラッパを返せばいい
0345デフォルトの名無しさん2008/10/02(木) 21:56:16
っ ほい

ttp://msdn.microsoft.com/ja-jp/library/ms132474.aspx
0346デフォルトの名無しさん2008/10/02(木) 22:04:54
いちいち継承してらんねーよ
0347デフォルトの名無しさん2008/10/02(木) 22:10:43
今日のレスは勉強になったなー
0348デフォルトの名無しさん2008/10/02(木) 22:14:52
なんしか、フィールド変数の値を返す場合はプロパティで
オブジェクトを返す場合メソッドを通して値のやり取りをしろってことでしょ?
0349デフォルトの名無しさん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") ;}
}
}
0350デフォルトの名無しさん2008/10/02(木) 22:28:11
変更可能なオブジェクトの参照を流出させることのリスク、
そのリスクの管理ができていればどうしようとかまわないと思う。
ようは外部から参照経由で変更された場合に、
そのオブジェクトを内包させているクラスが
値が変わったことを知ることができないということ。

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

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

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

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

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

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

@"c:\tmp\path"

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

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

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

丁寧な補足解説ありがとうございます。
おかげでよくわかりました。
0373デフォルトの名無しさん2008/10/03(金) 00:43:01
>>365
逆。昔はエディタの補完機能なんてのもないし、長い名前付けなかった。

ほんと大昔、初期の初期はプログラムの規模が小さいから
名前の衝突の危険性が低かったからいいんだけど、それはすぐに破たん。

結果どうなったかというと、意味のわからない頭文字略語だらけで、
書いた人にしか意味が分からない名前だらけに。
例えば、>>361 のコードなら、
cb_t b;
add(&b.elem, sbe_create_mcdbe(msg_sec_v10feb05, ws_sec_feb05_11b10)
とかになるんじゃないかと。
0374デフォルトの名無しさん2008/10/03(金) 00:43:50
質問です、エクスプローラでファイルを右クリックして、[プロパティ]画面の
[概要]タブを開くと、そのファイルの作成者やコメントなどの情報を設定したり
閲覧したりすることができます。これを何かの処置で非表示にすることは
可能ですか?設定は随時行い、表示はさせない、という使い方をしたい
のですが、方法についてご存知の方がいらっしゃいましたらご指導お願いします。

.NETからは、dsofile.dll というDLLで設定と参照ができることはわかったのですが、
これをそのファイルごとに非表示にしたり表示したりできれば思います。
0375デフォルトの名無しさん2008/10/03(金) 00:48:04
@"blah\" とかやっても平気なのは何気に凄いね
0376デフォルトの名無しさん2008/10/03(金) 00:50:55
MSDNって、どうしてあんなに遅いんですか?
0377デフォルトの名無しさん2008/10/03(金) 00:51:13
スペッコ不足です
0378デフォルトの名無しさん2008/10/03(金) 00:53:15
つーかパスはC:\\\\\\\\\\\\\\\windows\\\\\\\system32\\\\\\
とかやっても動くぞ
二つ以上連続の\は勝手にOSが読み替えてくれる
0379デフォルトの名無しさん2008/10/03(金) 00:54:41
>>376
仕様です。

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

JavaScript で文字調整やってやがるから、
フォントサイズいじっても無駄とかだと思う。
拡大鏡の類で拡大すればちゃんと大きくなると思うが。
0384デフォルトの名無しさん2008/10/03(金) 01:18:44
いやかしましは百合ものだろ
初期設定がアレなだけ
0385デフォルトの名無しさん2008/10/03(金) 01:32:23
どこの誤爆だよw
0386デフォルトの名無しさん2008/10/03(金) 01:32:35
かしまし噴いたwww
0387デフォルトの名無しさん2008/10/03(金) 02:30:50
コーラ返せww
0388デフォルトの名無しさん2008/10/03(金) 18:53:33
どなたーか EachWithIndex 実装してる人いませんか?
0389デフォルトの名無しさん2008/10/03(金) 19:54:51
>>388
Rubyのアレならこんなのが
ttp://grabbagoft.blogspot.com/2007/12/ruby-style-array-methods-in-c-30.html
0390デフォルトの名無しさん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();
}
}
0391デフォルトの名無しさん2008/10/03(金) 20:58:07
>>389

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

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

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

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

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

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

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

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

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

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

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

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

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

ありません。

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

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

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

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

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

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

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

WPF の XAML も、ビルドの途中で partial class を自動生成してる。
0445デフォルトの名無しさん2008/10/04(土) 23:50:50
>>443
形の保持ならGraphicsPathでよかろうよ
0446デフォルトの名無しさん2008/10/05(日) 00:07:30
ラスタ形式の画像の選択範囲は、
αチャンネルで持つのが普通な気が。
0447デフォルトの名無しさん2008/10/05(日) 01:03:01
splitで出力された1次元配列にいくつの要素があるかわかるメソッドってない?
0448デフォルトの名無しさん2008/10/05(日) 01:04:24
Count()
0449デフォルトの名無しさん2008/10/05(日) 01:05:07
>>447
ubound
0450デフォルトの名無しさん2008/10/05(日) 01:05:29
ごめん、VB と勘違いした
04514472008/10/05(日) 01:08:36
即レスサンクス!
Count()はVBで>>448=>450でおk?uboundを使ってみます!
04524272008/10/05(日) 01:11:46
助言してくれた人たち、ありがとう。
教えてもらった方法をなんとか試してみる。
04534472008/10/05(日) 01:16:32
ん、、?
uboundがVBかorz
0454デフォルトの名無しさん2008/10/05(日) 01:25:10
現実では無理だと悟ったので、人工知能の少女を作って仮想世界で彼女作ろうと思うのですが
C#でできますか?
0455デフォルトの名無しさん2008/10/05(日) 01:28:10
C#はそんな貴方の夢を叶えます
0456デフォルトの名無しさん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を読んでも、例外関係の情報が入手できません。

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

例) int variableNumber;

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

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

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

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

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

ならない。

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

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

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

Split の結果って配列だから、それの長さ調べろってこと。
04984942008/10/05(日) 20:56:07
>>495-497
そうかLength見ればいいのか…
なんか変な考え方してたみたいですorz
皆さん優しくありがとう
0499デフォルトの名無しさん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]
0500デフォルトの名無しさん2008/10/05(日) 21:11:32
あ、,,になっている部分は、nullみたいな感じで無視します。
0501デフォルトの名無しさん2008/10/05(日) 21:15:56
そのものはないけど、
new[] { data.Max() }
0502デフォルトの名無しさん2008/10/05(日) 21:20:37
>>501
複数あったらその数だけ作るらしいぜ
var max = data.Max();
var result = Array.FindAll(data, x => x == max);
0503デフォルトの名無しさん2008/10/05(日) 21:35:02
var min = data.Min()
var result = array.Where(n => n == min);
でもおk
0504デフォルトの名無しさん2008/10/05(日) 21:35:34
>>503訂正
var result = data.Where(n => n == min);
0505デフォルトの名無しさん2008/10/05(日) 21:41:21
みなさんありがとうござます。
早速ためしてから感謝しようとおもっておりましたが、
int[] d = {11,11,22,33,10,10};
d.Min()がない。
というような状況です。もしかして2.0には、Min,Maxないんでしょうか
(Math.Min,Maxはありましたが)
0506デフォルトの名無しさん2008/10/05(日) 21:55:20
ああ、そう。
Min, Max は 3.0 から。
0507デフォルトの名無しさん2008/10/05(日) 21:59:09
単に3.0って言うとややこしいぜ
.NET 3.5/C#3.0から
0508デフォルトの名無しさん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;
}
こうかな?
0509デフォルトの名無しさん2008/10/05(日) 22:10:48
>>508
もう少し短くまとめろよ・・・情けない
0510デフォルトの名無しさん2008/10/05(日) 22:17:36
2.0 でちゃんとやると508になる気がするが。
C# 3.0 使えという話ではある。
0511デフォルトの名無しさん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];
省略
}
}
もうちょい悩んでみます。
0512デフォルトの名無しさん2008/10/05(日) 22:24:07
質問者です。以下でなんとかいきそうでした。
if (arr[i].CompareTo(max) == 0)
cnt++;
if (arr[i].CompareTo(max) > 0)
0513デフォルトの名無しさん2008/10/05(日) 22:24:08
>>511
.CompareTo
0514デフォルトの名無しさん2008/10/05(日) 22:27:46
>513
ありがとうございます。このスレでもでてきたEachForや今回のMaxsのような独自の便利
関数は、みなさんどのように管理されてるんでしょうか??なにかアドバイスあればお願い
します。
05155082008/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;
}
うーん、こうかな…
0516デフォルトの名無しさん2008/10/05(日) 22:37:19
>>515
まあ、まずまずだけど、ひとひねりほしいな
例えば再起処理を使うとかさ
forでやるのはダサイ

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

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

あとはわかるな?
0531デフォルトの名無しさん2008/10/05(日) 23:32:19
タイプつかってヒストグラムできた。が馬鹿でかいものになった。
歪度とかCV、σとか無意味につけてしまった。
0532デフォルトの名無しさん2008/10/05(日) 23:37:56
ダメだ、俺の頭では、-1を代入のところがよくわからん。。。
整数だからマイナス数値ばっかのセットだってあるんだよね
0533デフォルトの名無しさん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;
0534デフォルトの名無しさん2008/10/05(日) 23:45:08
>>533
foreachのほうが早い
0535デフォルトの名無しさん2008/10/05(日) 23:52:39
516は突っ込んだら負けなんだろうか

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ちなみに、

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

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

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

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

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

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

毎回下の方式でやってて、 _a とか tmp_a とか名前考えるのが面倒だったんだよ。
上でいいならこれからジャンジャン this. を使わせてもらうよ
0644デフォルトの名無しさん2008/10/07(火) 00:54:25
むしろ俺はメンバーには this. 必ず付ける派なんだが。
0645デフォルトの名無しさん2008/10/07(火) 00:58:01
>>644
フィールドに毎回 this. つけるのって面倒だし見づらくない?
0646デフォルトの名無しさん2008/10/07(火) 01:03:43
>>645
フィールドであることを区別する意味ではありだと思う。
それを _ つけて区別するくらいなら、this の方がタッチタイプしやすい。
アンダーバーとかの記号は打ちにくいのよね。
0647デフォルトの名無しさん2008/10/07(火) 01:08:30
this付けるのはフィールドのみ?
メソッドやプロパティにはどうする?
0648デフォルトの名無しさん2008/10/07(火) 01:16:21
フィールドにアクセスするときにわざわざthis.を頭に付けることなんて推奨されてたか?
0649デフォルトの名無しさん2008/10/07(火) 01:18:33
俺はつける。
0650デフォルトの名無しさん2008/10/07(火) 01:20:15
お前の話なんてどうでもいいんだ黙ってろ
0651デフォルトの名無しさん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}を取得することになるよ?
んな馬鹿な話あるわけない。
つーか上記のテストコード書いて試したらすぐ確認とれるだろ。

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

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

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

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

int[] a;

HogeMethod( a );

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

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

int[] a = null;

HogeMethod( a );

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

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

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

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

> HogeMethod(out a);

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

これでユーザーがポインタを意識する必要は100%無くなる。
0684デフォルトの名無しさん2008/10/07(火) 12:22:05
それどうみてもただの値型
0685デフォルトの名無しさん2008/10/07(火) 12:24:26
むしろパフォーマンスを意識してポインタを知ることになるんじゃね?
refだらけになりそうだ
0686デフォルトの名無しさん2008/10/07(火) 12:24:37
正直その主張はconstマンセーにしか読めない。
0687デフォルトの名無しさん2008/10/07(火) 12:25:14
なんか初心者が好きなことを書き込むスレになってきてないか
0688デフォルトの名無しさん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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

それより、言語内で一貫した基準があって、すべてのクラスがそれに則っていることが言語としては第一だろ。
C#の場合、引数は標準で値渡し、ref・outで参照渡し。それがすべて。そしてStringは参照型。
それを踏まえたうえで値渡しのStringが中で変更されると思うのは、参照のイメージが確立していないか、
Stringのメンバの使い方が分かってないかのどちらかじゃないか?
前者はマとして未熟。後者はウッカリというより、これから使うライブラリのリファレンスも見ない向こう見ずに思える。
皆、長文スマンな。
0713デフォルトの名無しさん2008/10/07(火) 16:30:19
stringが参照型の値渡しなら
string[]はどうなるんだ?
0714デフォルトの名無しさん2008/10/07(火) 16:32:48
stringは参照型の値渡し
string[]は参照型の値渡し
stringはmutable
string[]はimmutable
0715デフォルトの名無しさん2008/10/07(火) 16:33:31
反対だ
stringはimmutable
string[]はmutable
0716デフォルトの名無しさん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で保護しないと駄目ですか?
0717デフォルトの名無しさん2008/10/07(火) 17:17:25
>>714
string[]を値渡しするのとref付けて参照渡しするのとで、結果は違ってくる?
どちらもメソッドでの変更が反映されるだけで動作は全く同じになると思うんだが。
0718デフォルトの名無しさん2008/10/07(火) 17:23:26
>>717
参照渡しと値渡しの違い分かってる?
0719デフォルトの名無しさん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"}になる
0720デフォルトの名無しさん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]);
}
0721デフォルトの名無しさん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"}
にならない?
0722デフォルトの名無しさん2008/10/07(火) 17:45:59
>>721
コンパイルエラー
0723デフォルトの名無しさん2008/10/07(火) 17:51:00
>>722
いや、通ると思うんすけど・・・
0724デフォルトの名無しさん2008/10/07(火) 17:57:10
はぁぁあ?
0725デフォルトの名無しさん2008/10/07(火) 17:57:41
string[] a = { "a", "b" }; //おk
string[] b;
b = { "a", "b" }; //だめ

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

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

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

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

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

「参照」って言葉の意味がC++と似てるけど別物だったりするのが落とし穴というのならわかるが、
構造体で引っかかる人間なんていないと思う。
0753デフォルトの名無しさん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
0754デフォルトの名無しさん2008/10/07(火) 21:15:23
リンク先の「変更できない。」という特性を守る場合
KeyやValueの値が可変なら、というか、readonlyだと駄目な状況では
構造体じゃなくクラスを使うべきなんですかね。
Listにクラスを放り込む場合どう書けば???
0755デフォルトの名無しさん2008/10/07(火) 21:25:26
class Data
{
public string Key;
public string Value;
}
こんな感じのクラスを用意して
Data data = new Data();
で初期化して使う感じでしょうか?
0756デフォルトの名無しさん2008/10/07(火) 21:31:58
ジェネリックなコレクションにstructを使う場合の注意としては、
IEquatable<T>.Equals(T o)と、大小比較する場合はIComparable<T>.CompareTo(T o)を実装すること。
そうしないと比較のたびにボクシングが頻発して悲惨なことになる。
もっとも基本配列であるListの場合はあまり問題ない。
実装しないなら非ジェネリックのコレクションの方が効率がいい。
登録時ボクシングは1回だけですむ。
0757デフォルトの名無しさん2008/10/07(火) 21:51:59
>>745

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ちなみに

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

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

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

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

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

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

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

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

0791デフォルトの名無しさん2008/10/08(水) 11:35:37
一括りにすればC#もJAVAもプログラム
0792デフォルトの名無しさん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になってしまいます。
これは何が問題なんでしょうか?
07937922008/10/08(水) 11:57:49
書き忘れです。タイマーで1秒毎の更新にしています。

private void timer1_Tick(object sender, EventArgs e)
{
GetLogicalDiskInfo();
}
0794デフォルトの名無しさん2008/10/08(水) 12:53:59
>>790
失礼しました、これはタイマーのTickイベントの中で、フォルダの存在を
チェックしていて発生していたようです。メモリの消費量がイベントのたび
に0〜5バイトぐらいずつ増えていくのでなんだろうと思いましたが、タイマー
とは無関係でした。すみません。
07957902008/10/08(水) 12:58:04
>>794
ただ、Directory.Exists(_strDirectory)これを行うたびにI/Oのメモリが
消費されるというのは正常なのでしょうか?
0796デフォルトの名無しさん2008/10/08(水) 13:07:58
>>792
カウンタ毎回取得してたら駄目だろ
欲しいPerformanceCounterを保持しておく
0797デフォルトの名無しさん2008/10/08(水) 13:13:48
C#とJAVAってできることはほぼ同じなの?
動く環境も。
0798デフォルトの名無しさん2008/10/08(水) 13:13:50
>>795
「I/Oのメモリ」って何?
0799デフォルトの名無しさん2008/10/08(水) 13:41:01
質問

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

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

void Hoge()
{

・・・・

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

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

・・・

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

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

void Hoge()
{
・・・・

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

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

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

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

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

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

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

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

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

無ければフォルダ名の末尾に\マークがあるかないかで場合分けして対処する必要があります。
0819デフォルトの名無しさん2008/10/08(水) 20:37:16
Path.Combineあたり
できるかは知らないけどその辺に無かったら無い
0820デフォルトの名無しさん2008/10/08(水) 20:47:14
>>819
どうもです。調べてみますノシ
0821デフォルトの名無しさん2008/10/08(水) 20:47:37
ユーザに見せる必要がなければ、\が幾つ並んでも問題ない。
それでも受け付けてくれる。
0822デフォルトの名無しさん2008/10/08(水) 20:50:54
配列のラストが\\なら消す。
0823デフォルトの名無しさん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("ごごご、ごめんなさい");} }
のほうが良い
0824デフォルトの名無しさん2008/10/08(水) 21:47:15
>>823
それやるなら、前の例外も付けてやったほうがいいんじゃない?
catch(Exception e) {
throw (new Exception("ごごご、ごめんなさい", e);
}
0825デフォルトの名無しさん2008/10/08(水) 21:53:09
普通のrethrowでいいよ
0826デフォルトの名無しさん2008/10/08(水) 21:56:20
>>825
それもそうだな。ネタを考えてて変なことやっちゃったよ
0827デフォルトの名無しさん2008/10/08(水) 22:21:57
>>797
C#とJavaって言語だけ見るとダメで、
バックについてるのが Microsoft か SUN かという違いを見ないとダメ。

SUN がクソ。
0828デフォルトの名無しさん2008/10/08(水) 22:35:02
Linux等でも普通に動くところがJavaと違うんだよな。
だから、おれんとこでは、クライアントアプリがC#、VBどとねと
でASPXより、Tomcat−JBOSS-Apatchがまだまだ主流だ。。。
業務サーバーとなれば、どうしてもDB+Unix系がまだまだ主流で
顧客に高級感という付加価値があびせれる。
制御系は、以外とWindowsOnlyでいけること多いんでCのDLL
をC#で呼び出す系統のものを提案できるな。
0829デフォルトの名無しさん2008/10/08(水) 22:57:47
>>828

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

this.Close(笑);

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

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


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

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

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

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

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

コマンドパターン使うとか
0934デフォルトの名無しさん2008/10/11(土) 09:12:26
250万文字のテキストファイル(笑
0935デフォルトの名無しさん2008/10/11(土) 09:20:21
ログファイルかなんかはすぐ5MBぐらいいくな
0936デフォルトの名無しさん2008/10/11(土) 10:54:59
普通、メソッド名は三単現のsつけないと思うけど、Equalsだけ、なんでsついてるんですか?
0937デフォルトの名無しさん2008/10/11(土) 10:59:38
SVOの形のときは付けるみたいだよ
Has○○とかIntersectsWithとかContainsとか
09389372008/10/11(土) 11:12:38
おかしいこと言ってるね
とにかくboolを返すメソッドはs付ける
0939デフォルトの名無しさん2008/10/11(土) 11:23:27
そのsは三単現じゃなくて名詞扱いするためのsだから
0940デフォルトの名無しさん2008/10/11(土) 11:34:03
へ?
0941デフォルトの名無しさん2008/10/11(土) 11:34:58
939 名前:デフォルトの名無しさん[sage] 投稿日:2008/10/11(土) 11:23:27
そのsは三単現じゃなくて名詞扱いするためのsだから
0942デフォルトの名無しさん2008/10/11(土) 11:35:00
ゴミはスルーしとけ
0943デフォルトの名無しさん2008/10/11(土) 11:35:36
Is○○だってBe○○って命名しないのと一緒じゃね?
0944デフォルトの名無しさん2008/10/11(土) 11:39:57
フォームにボタンとかテキストボックスとか複数追加して、
そのフォームが表示されたときにあるコンポーネントへ初期フォーカスをあてたい
のですが、
この場合、プロパティ?はどれになるんでしょうか
tabindexが若ければいいのかな、と思ってましたがいま3にフォーカスがいってて
1に初期にいってくれません
0945デフォルトの名無しさん2008/10/11(土) 11:43:07
>>940
>>942
おまえら英語もできないの?
0946デフォルトの名無しさん2008/10/11(土) 11:44:36
それはお前
0947デフォルトの名無しさん2008/10/11(土) 11:51:42
VisualStudio2005を使っているんですが、try〜catchが正常に機能しているか確かめるため
デバッグモード時にtry文の中で擬似的に例外を発生させたいです。

どうしたら可能でしょうか?
0948デフォルトの名無しさん2008/10/11(土) 11:59:07
[Conditional("DEBUG")]
static void DebugThrow<T>() where T : Exception, new() { throw new T(); }
こんなの用意しとけば
0949デフォルトの名無しさん2008/10/11(土) 12:04:07
>>948
どうもデシ( ´・ω・)ノシ
0950デフォルトの名無しさん2008/10/11(土) 12:30:11
C/C++みたいに、メソッド内でしか使わないstatic変数はどうしたらいいんでしょう?
クラス内にprivate変数で書くと他のメソッドでも使えてしまうので、
特定のメソッドだけで使えて自動で破棄されない変数を宣言したいのです。
0951デフォルトの名無しさん2008/10/11(土) 12:33:47
できません。わざわざ削られたものなので文句は無しで。
0952デフォルトの名無しさん2008/10/11(土) 12:36:33
>>944
TabIndex最小でよかったと思うけどうまくいかないならFormのActiveControl
09539502008/10/11(土) 12:37:53
>>951
代替手段としてはどんなのがメジャーですか?
やっぱりクラスのメンバ変数ですかね…。
0954デフォルトの名無しさん2008/10/11(土) 12:44:03
>>950
そのメソッドで新しいクラス作れば
0955デフォルトの名無しさん2008/10/11(土) 12:45:44
>>953
メソッド内の処理をクラスとして括り出してし、
そのクラスのstaticメンバーにするとか。
0956デフォルトの名無しさん2008/10/11(土) 12:46:27
コンストラクタあたりで、
int x = 0;
this.Hoge = (args) =>
{
 x++;
};
こういう変態的な方法もあるにはある
実質的には>>954と一緒
0957デフォルトの名無しさん2008/10/11(土) 12:52:43
クラス内クラスとかでいいんじゃない
0958デフォルトの名無しさん2008/10/11(土) 13:24:39
>>953
class Hoge
{
public void Method()
{
new Foo().Do();
}
}

class Foo
{
private static int val;
public void Do()
{
// 元のMethod内処理をここで行う
}
}
09599502008/10/11(土) 13:35:23
ありがとうございます。
わざわざクラス作るんですかね…。
ただ何回メソッドが呼ばれたかのカウントすらそんなにめんどくさいなんて。
class Program
{
static void Main(string[] args)
{
Test o = new Test();
o.start();
}
}
class Test
{
public void start()
{
for (int i = 0; i < 3; i++)
{
f();
}
}
private void f()
{
Cnt c = new Cnt();
Console.WriteLine(Cnt.x);
c.Do();
}
}
09609502008/10/11(土) 13:36:06
>>959続き
class Cnt
{
public static int x = 100;

public void Do()
{
x++;
}
}
ただf()内で何回呼ばれたのだけをカウントしたいのにこんな大事になっちゃいました\(^o^)/
F()の中でstatic int cnt;を宣言してcnt++したいだけなのに…。
0961デフォルトの名無しさん2008/10/11(土) 13:50:50
ぱっと見、それスレッドセーフじゃないし分離もされてないから非常に
よろしくないコードなんだけどそういうの書く奴がいるの防ぐためかもね
09629502008/10/11(土) 13:57:57
>>961
そうなんですか!
C/C++では破棄されたくない変数は普通にstaticにしてました…。
(メソッドの呼ばれた回数に応じて処理分岐させたりとか)
C/C++でもクラス生成してそのクラスのstatic変数を呼んだ方がいいのですね。
0963デフォルトの名無しさん2008/10/11(土) 14:10:19
同じクラスのインスタンスが複数あった場合にどういう動作を期待してるの?
0964デフォルトの名無しさん2008/10/11(土) 14:10:57
>>962
分離したらいいじゃなく、それ等価コードだからコード分離しても関係なく
スレッドセーフじゃない
基本的に static 使うときにはスレッドセーフのことを考えたほうがいい
(逆にインスタンス変数はあまり考えなくていい場合が多い)。そうすると
同期がどうこうなってこれスコープ絞れなくねとなってまぁその機能あん
まりいらなくね?と個人的にはなるような気がする。
0965デフォルトの名無しさん2008/10/11(土) 14:12:26
普通にメソッドや変数をメンバに持てばいい。
名前の管理ができなくなるようなデカイクラスは作るなってこと。

VBには関数内の変数宣言にStaticが使えるけど、
C++と違い匿名のメンバなんで、勘違いしたPGがよくバグを作ってる。
0966デフォルトの名無しさん2008/10/11(土) 14:15:53
補足しとくがその機能だけなら Interlocked.Increment にするだけですむよ。
趣旨はスコープ絞るほどシンプルに収まる場合は少なくなるんじゃね?と
いうこと
0967デフォルトの名無しさん2008/10/11(土) 14:16:09
ファイルの末尾に追加書き込みするには StreamWriterクラスのコンストラクタで
appendフラグをtrueにすればいいわけだけど、ファイルの末尾ではなくファイルの
先頭に追加書き込みしたい場合はどうすればいいと思う?
ログのメッセージとか新しい物をファイルのより先頭に記録しておきたいという需要は結構あると思う。

ざっと考えついた方法は、

既存のログファイルを全文StreamReaderクラスで読み込む
↓
記録した最新のログの末尾に、さっきファイルから読み取った過去ログを結合させる
↓
「新規書き込み」モードで結合したログ全文をファイルに書き込み

こんぐらいかな。
でもこの方法だとログファイルが巨大になっていけばいくほどメモリを馬鹿食いして
効率が悪くなるんだよね・・・。何かもっといい方法は無いだろうか?
0968デフォルトの名無しさん2008/10/11(土) 14:19:57
新規でファイルに書いて、つなげたいファイルをアペンドしてファイル名変えたらどうか
0969デフォルトの名無しさん2008/10/11(土) 14:20:42
Temp.txt に書く、元のファイルから適時追記
コミット時 に Move or Copy
0970デフォルトの名無しさん2008/10/11(土) 14:21:48
ポトペタってええね
0971デフォルトの名無しさん2008/10/11(土) 14:23:15
>>968-969
面倒くさそうだし、ひょんなことでプログラムが停止すれば意味不明なファイルが生成されたり
ログファイルそのものが消えてしまう悪寒・・・
0972デフォルトの名無しさん2008/10/11(土) 14:23:55
RDB使うとか。SQLiteなら、別にRDBサーバー立てる必要もなく、
組み込みのライブラリとして使えるし。
0973デフォルトの名無しさん2008/10/11(土) 14:24:39
あれ?C#ってファイルストリームの任意の場所に追加書き込みするオプションってなかったっけ?
0974デフォルトの名無しさん2008/10/11(土) 14:25:45
vログファイルの容量制限 0~5 MB
 v古い方からログを削除
0975デフォルトの名無しさん2008/10/11(土) 14:46:13
>>969で十分な気がするが慎重になるのならGetTempFileName
0976デフォルトの名無しさん2008/10/11(土) 14:47:40
むしろ今となってはそっちのが危険だったりして
0977デフォルトの名無しさん2008/10/11(土) 14:51:30
>>967
まあファイルでやることじゃないな。
大体1行書く度に全部書き直しなんて使いもんになるかよって話だ。
0978デフォルトの名無しさん2008/10/11(土) 15:20:06
>>967
> ログのメッセージとか新しい物をファイルのより先頭に記録しておきたいという需要は結構あると思う。

それって、ログを表示する時のことじゃない?
だったら、別に逆順に表示すればいいだけだと思うが。
09799752008/10/11(土) 15:23:24
>>976
ttp://www.fortify.com/vulncat/ja/vulncat/cpp/insecure_temporary_file.html

ツッコミありがとう。ファイル名を自前で用意したり
オープン時のモードに気を配ったほうがいいんだろうね
0980デフォルトの名無しさん2008/10/11(土) 18:38:06
辞書の定員は取得できないの?
0981デフォルトの名無しさん2008/10/11(土) 19:57:36
定員って何
0982デフォルトの名無しさん2008/10/11(土) 20:02:33
キャパじゃね?
0983デフォルトの名無しさん2008/10/11(土) 20:06:19
そんなものあるの?
0984デフォルトの名無しさん2008/10/11(土) 20:19:09
excite翻訳通してみた

辞書の定員は取得できないの?
↓
The capacity of the dictionary cannot acquire it.
↓
辞書の容量はそれを取得できません。
0985デフォルトの名無しさん2008/10/11(土) 20:21:58
なるほど
ありがとうございます
0986デフォルトの名無しさん2008/10/11(土) 20:24:11
リフレクションで漁ればそれ用のフィールドがあるはずかも?
0987デフォルトの名無しさん2008/10/11(土) 20:24:57
中身の構造を考えれば、そんなものがないことなど明らか
0988デフォルトの名無しさん2008/10/11(土) 20:31:21
0 → 0
1 〜 3 → 4
4 〜 7 → 8
9 〜 15 → 16
17 〜 31 → 32
32 〜 63 → 64
64 〜 127→ 128
128 〜 255 → 256

左の数を入れると右の数が出てくるf()は書ける?
0989デフォルトの名無しさん2008/10/11(土) 20:35:45
Dictionary コンストラクタ (Int32)
空で、指定した初期量を備え、キーの型の既定の等値比較演算子を使用する、
Dictionary クラスの新しいインスタンスを初期化します。


ありそうじゃね?
0990デフォルトの名無しさん2008/10/11(土) 21:03:46
見せたくないから隠してるのね。それを見たがるのは田代的行ないなのね。
0991デフォルトの名無しさん2008/10/11(土) 21:54:07
>>989
いや、チェーン型のハッシュテーブルにキャパシティという概念はない。
そのコンストラクタの引数は"capacity"という名前だけど、
実際にはハッシュテーブルのバケットの数を決めるためのヒントに過ぎない。
0992デフォルトの名無しさん2008/10/11(土) 21:55:20
>988
0 → 0
1 〜 3 → 4
これに分岐がいる
0993デフォルトの名無しさん2008/10/11(土) 22:13:49
>>980
次スレ建てろ。
0:00までに建ってなかったら>>999が建てるように。
0994デフォルトの名無しさん2008/10/11(土) 22:17:52
また命令口調クンw
こういう奴って恥ずかしいと思わないのかね。
それとも普段は人に抑圧されまくってる、気が弱くて小心者の自分を自分で語ってることが
自覚できないほど頭悪いのかな。

っていうか、人に命令してる間に自分でやったらどうかね。
0995デフォルトの名無しさん2008/10/11(土) 22:21:57
int y = (int)Math.Pow(2, Math.Ceiling(Math.Log(x, 2)));
0996デフォルトの名無しさん2008/10/11(土) 22:24:37
じすれ
C#, C♯, C#相談室 Part48
http://pc11.2ch.net/test/read.cgi/tech/1219481054/
0997デフォルトの名無しさん2008/10/11(土) 22:27:49
ume
0998デフォルトの名無しさん2008/10/11(土) 22:27:58
ume
0999デフォルトの名無しさん2008/10/11(土) 22:28:11
ume
1000デフォルトの名無しさん2008/10/11(土) 22:28:45
1000なら今年は1008年
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。