[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/16 23:53 / Filesize : 244 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part46



1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

前スレ
C#, C♯, C#相談室 Part45
pc11.2ch.net/test/read.cgi/tech/1200911737/

その他テンプレ>>2-5くらい

2 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 00:45:01 ]
Visual C# 2005 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

ふらっとC#,C♯,C#(初心者用) Part23
pc11.2ch.net/test/read.cgi/tech/1200033660/

MSDNライブラリ
msdn.microsoft.com/library/ja/

MSDN2
msdn2.microsoft.com/ja-jp/library/default.aspx

pinvoke.net: the interop wiki!
pinvoke.net/

3 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 00:46:21 ]
Visual C# Express Edition (無料)ダウンロード
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

.NET Framework SDK (2.0)
msdn2.microsoft.com/ja-jp/library/ms310244.aspx

MSDN Visual C# Express Edition フォーラム
forums.microsoft.com/msdn-ja/ShowForum.aspx?ForumID=187&SiteID=7
Visual Studio ユーザーグループ
vsug.jp/

@IT Insider.NET
www.atmarkit.co.jp/fdotnet/index.html
Insider.NET 会議室 ディレクトリ
www.atmarkit.co.jp/fdotnet/index/bbs/index.html

宇宙仮面の C# プログラミング / C# Programming
ukamen.hp.infoseek.co.jp/
WisdomSoft C#入門
wisdom.sakura.ne.jp/programming/cs/index.html
WisdomSoft Microsoft .NET入門
black.sakura.ne.jp/~third/system/msnet/msnet.html
どっとねっとふぁん
dotnetfan.org/
緑のバイク 初めてのC# 〜 覚え書き 〜
homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
dobon.net/vb/dotnet/


4 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 00:47:59 ]
テンプレ終わり。
ではよろしく。

5 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 00:59:18 ]
前スレ >>998
戻りをラムダ式として結果待ちをインターロックにしたのがポイントです
今後アウトオブオーダーにするとか、いろいろ展開が考えられるので。
これはLINQで使われた式木をみてふと思いついたんですよ、
プロセス代数なんかとも相性がいいと思います。
ja.wikipedia.org/wiki/%E8%A1%A8%E7%A4%BA%E7%9A%84%E6%84%8F%E5%91%B3%E8%AB%96

今は戻り値をラムダ式としてありますが、もしラムダプロパティーみたいなものが言語上にできると
普通にコードしているだけで、並列化するライブラリーがバリバリできるのではと思っていたりします。
これはもうひとつ問題があって、並列化するかどうかは使う側ではなく、クラスを作る側に主導権を持たせたいというのもあるので
スレッドセーフかどうかなんて、使う側は意識したくないですから。

6 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 01:03:28 ]
>>1


7 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 01:04:28 ]
>>2も乙

8 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 12:12:59 ]
今からUnmanaged DirectXを勉強しようかと思ってるんだが、
C#でやってる初心者用サイトはないかな?
少しググってみたが無さげで、C++サイトを見ながらやるしかないかなーという感じだが、
もしどこかいいところ知ってたら教えてくれまいか


9 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 14:58:57 ]
お前にはC#も++も無理だからプログラムなんて諦めろと

10 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:12:55 ]
>>8
諦めろ。
最低でもC#のメモリモデルとマーシャリングは理解してないと無理。
初心者のやるこっちゃない。
素直にC++でやっとけ。

あと本当に初心者なら、CLIでやるのも絶対無理だから予め忠告しておく。



11 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:18:42 ]
C++が分るならメモリモデルとマーシャリングを理解するのは難しくは無いはずだな
それが理解できるなら、逆に問題なと見当たらない訳でw
という事はどう転んでも駄目な物は駄目という事だなw

12 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 16:08:07 ]
C#もDirectXも経験ないから
適当に感じのつかめる教材があればいいかなと思ったんだがw
C++ソース見ながらまったりやってくわ、トンクス

C++は業務で使っとるから趣味でまで使う気なす(´・ω・`)


13 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 16:20:28 ]
というか趣味ならXnaでええやんか

14 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 16:55:27 ]
つか業務でC++使うほどなら、C#との連携などたやすいと思うんだがな。
C#オンリーがC++へ行くなら困難は多いだろうが・・・

15 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:29:45 ]
うわ・・・ふらっと見たらゆとりの相手したみたいだ・・・

16 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:28:58 ]
>>8 は勉強したいって言ってるだけなのに
「使いこなす」or「やめる」しか言わないヤツってバカなの?


17 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:39:54 ]
そりゃとっかかりと言われれば、C++をしっかり勉強して深いレベルまで知ってください
そうすればC#から使う方法もすぐわかりますとしか言えないのに、初心者用を紹介してくれだからな。
逆にC++で使う方法が分かっていて、C#からどう呼び出すのといわれれば一瞬で解決だろ?
tlbimp 使って必要なライブラリを.NET参照できるようにして、DirectXの型を自分の好みの型にマッピングする。
あとは、C++の使い方をどういう風に変換したかは自分がやったんだから、自分自信で全部わかりきれる状況にあるはずだ。
ここで、彼にはいったい何が必要なんだ?
おれたちにできることなど何もないだろ、それともここでC++やらCOMやらATLの勉強でもする気か、スレ違いだ。

18 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 10:23:19 ]
なげーよ。
>>8はサイト知ってたら教えろって言ってるだけだろ。
何でお前らは「お前には無理」とか言って話があさっての方向に進むの?

19 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 10:35:00 ]
>>18
じゃあ一言でいってやるよ、執拗で回りくどい煽りと荒らし行為がウゼーんだよ

20 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 10:38:40 ]
C++スレで延々とやっていろといいたいのだよ



21 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 12:38:52 ]
>>19
8が煽り荒らしの類には見えないんだけど。
過剰反応なんじゃねーの

22 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 12:48:57 ]
>C++は業務で使っとるから趣味でまで使う気なす(´・ω・`)
ならきっとウソツキだな

23 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 12:54:12 ]
自作自演もキモイ、このスレ以外でもやりまくってるだろ、死ね >>21

24 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 13:17:31 ]
>>23
おい適当な自演認定すんなよ、俺は21だがそれ以前に俺のレスはねーよ
って言ってもID無いし信じられんわな
8がこんなに叩かれてんのが疑問だったから21のレスをしただけ

25 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 13:31:53 ]
しつけーんだよ、うざい、死ね>>24


26 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:23:48 ]
あの程度で「叩かれてる」とかwww
本人納得して帰ってるんだからほっといてやれよwww

27 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:59:00 ]
>>26
程度の問題は知らんけど
煽り荒らしに見えなかったから俺は19のレスが気になったの。

28 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:46:25 ]
相変わらず気持の悪い自演をする奴だな

29 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:16:03 ]
答える気がない人は書かなくていいです^^

30 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 09:58:04 ]
>>29のおかげでスッキリした



31 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:38:56 ]
System.Windows.WebBrowserでもAxSHDocVw.AxWebBrowserでも、
InfoseekのWebメールサービスでリロードとかするとStackOverflowExceptionで落ちるようになったガッデム。
IE(6)だと落ちないのに。

てことでだれか試してみてくれませんかね。
[STAThread] unsafe public static void Main(string[] args) {
Form form = new Form();
WebBrowser browser = new WebBrowser();
browser.Dock = DockStyle.Fill;
form.Controls.Add(browser);
form.Load += delegate {
browser.Navigate("email.www.infoseek.co.jp/login_form.php");
};
Application.Run(form);
}
ログイン画面でリロードするだけで落ちる。

32 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:45:28 ]
関係ないかもしれないけどスレイプニル最新バージョン2.7.0でもinfoseekのメールで落ちる。
確認してないがlivedoorニュースでも落ちるみたい。
スレイプニルのスレや公式サポートでも話題になってるみたいだけど
犯人はflashみたい。

33 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:59:20 ]
プログラムからといわず、普通にIEから見ても落ちる、腐ってる

34 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 13:08:24 ]
>>32-33
情報ありがと。
確かに ActiveX 実行禁止すれば落ちなくなるみたいだ。Flash のせいっぽい。

35 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:12:42 ]
すごい迷惑なもん作ったなinfoseekw

36 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 00:08:00 ]
意外とinfoseekメール使ってる人がいてびっくり。
便乗するがあの迷惑メールフィルタの弱さをなんとかしてほしい。

37 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 00:16:04 ]
StackOverflowExceptionだと捕まえることもできんな…

>>36
ここで言うなよw

38 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 01:54:48 ]
StackOverflowといえば今日こんなコードを書いてしまった

int x;

public int X{
get{ return X;}
}

インテリセンス氏ねと思った

39 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 02:18:35 ]
あるあるw

40 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 08:16:09 ]
あるあr・・・ねーよ



41 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 08:50:07 ]
それは、x を右クリックしてリファクタリング→カプセル化でおk

42 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 09:27:46 ]
つ 自動プロパティ

43 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 09:45:15 ]
>>42
それはsetとgetがそろってないと出来ないのよね。

44 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 11:21:35 ]
private set

45 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 12:02:24 ]
フィールドにはプレフィックスとしてアンスコを付けているから、そういうのはないな。

46 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 12:54:32 ]
俺もついこの間まで こんな記述ができるとは知らなくて必死に38みたいな書き方してたぜ。
internal bool IsLink { get; private set; }

おまけにインテリセンスで小文字と大文字並んで表示されるからややこしい。
ついでに内部フィールドが必要な場合は
<![CDATA[public $type$ $property$ {
get {return _$property$; }
set {
if (value == _$property$) return;
_$property$=value;
$end$
}
}
private $type$ _$property$;
]]>
こんなコードスニペットを作ったら、馬鹿みたいに楽になった。

47 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:03:04 ]
自分自身の代入のチェックなんていらんだろ

48 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:19:50 ]
要らない場合もあるが、>>46が一般形

49 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:30:54 ]
>>48
どこの一般?

50 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:35:13 ]
↓ここ



51 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:46:05 ]
C++のoperator=じゃないんだから

52 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 03:45:20 ]
カスタムコントロールの外見に関するプロパティみたいに、変更時のコストが大きいものはチェックする。
巨大な値型も、コピーのコストが大きいからチェックした方がいいのかもしれない。
小さな値型や参照型なら、代入のコストよりチェックのコストの方が大きいような気がする。

53 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 10:40:54 ]
コントロールパネルのネットワークの接続の各種接続(ローカルエリア等)の無効/有効を変更したいんですが、
直接C#から変更ってできますかね?

54 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 10:42:04 ]
参照だろうと、小さい値だろうと大抵の場合object.equals相当のものが呼ばれるだけなんだから大したコストにならんだろ

55 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 10:45:32 ]
相対的にはとんでもなく大きなコストだろ

56 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 10:53:44 ]
事前の最適化は百害あって一利なし
というか時間がかかるような処理をプロパティにするなよ

とりあえず巨大な値型であっても代入のコストよりはチェックのコストの方が大きい

57 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:07:04 ]
こういう流れだと,C#使うなとか言い出す奴が出てきそうだけど
わざわざ不要なチェックを入れることはないというだけの話だからな
値が変化したときに何らかの処理やイベントを発生させるとか
GUI関連でどうしても時間がかかるプロパティが必要とか
そういうプロパティが多いからひな形として全部チェック入れちゃえ!とかそういうことなら話は別

58 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:13:54 ]
>>53
大体のことはP/Invokeでなんとかなる

59 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 15:38:21 ]
>>56
>事前の最適化は百害あって一利なし
賛成

>とりあえず巨大な値型であっても代入のコストよりはチェックのコストの方が大きい
今のPCはメモリーアクセスが最もパフォーマンスに深刻な問題を与えるから(分岐など比較にならない)、そんな事はないが
チェック時点でデータ読み出して比較とかすれば、意味無いので否定はしない。
比較するならまずハッシュ値で比較してから本番の比較をしないとパフォーマンス向上の意味はない。
もちろんハッシュ値の計算を高速にする必要もある。

60 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 08:27:31 ]
ListBoxでCtrl+Enterを押すと先頭がJで始まるアイテムにジャンプするのは何故なんだろう?
Aを押せば先頭がAのアイテムにジャンプするのは分かるが、この挙動は意味分からん



61 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 09:45:44 ]
^J が 0x0A だからかな

62 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 13:19:55 ]
アスキーコードでのNewLineと制御コードのLinefeedが同じ0x0aだからだったんですね。
ありがとうございました。

参考
ttp://apis.jpn.ph/fswiki/wiki.cgi?page=Programing%2FAsciiCode

63 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 08:32:59 ]
#って++が2つ重なってるんだぞ!!
++
++
ほら

64 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 01:17:48 ]
>>63
Wikipediaを見たんですね
わかります

65 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 02:53:04 ]
> 「C#」という言語名を決めたときの話だが、もともとC#プロジェクトのコード名は、
> 「COOL」(C like Object Oriented Language:Cライクなオブジェクト指向言語。
> クール)だった。だが、すでにほかの製品で使われているなどの理由で、
> この名前は採用されなかった。
>
> ほかの案として、「EC」(イーシー)、「C2」(シー・スクウェア)、「C3」(シー・キューブ)、
> また音楽の要素を取り入れて「C#」、元素の名前から「Cs」(シー・セシウム)などが
> 出てきた。「C#」を近くでよーく見ると、「C++++」に見える。そのような理由で最終的に
> 「C#」という名前に落ち着いた。
www.atmarkit.co.jp/fdotnet/insiderseye/20060215cscommunity/cscommunity_01.html

66 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 08:21:06 ]
コピペ君って馬鹿だな、まで読んだ。

コピペ君ってただのコピペに存在意義があると思ってるのかねひょっとして。
まあ普段無能で役立たずだと人に思われてるから、こんな「せせこましい」ことでもして
人に自分の価値を認めてもらいたいんだろうなw

67 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 12:14:53 ]
>>66 他人を見下すのに必死なんですね。わかります

68 名前:デフォルトの名無しさん [2008/05/01(木) 16:37:27 ]
誰か、より良い方法があったら教えてください。
// 何箇所も変更場所があるのは好ましくない
class MyComponent1
{
 string myProperty = "初期文字列";
 [DefaultValue("初期文字列")]
 public string MyProperty { get { return myProperty; } set { myProperty = value; } }
 public MyComponent1() { }
}

// リファクタリングで MyProperty を書き換えると GetProperty("MyProperty") に変更が入らない
// 結局複数個所を書き換える方が見通しがいい
class MyComponent2
{
 string myProperty;
 [DefaultValue("初期文字列")] // ここを書き換えたら myProperty の初期値にも反映したい
 public string MyProperty { get { return myProperty; } set { myProperty = value; } }
 public MyComponent2()
 {
  var defaultValue = typeof(MyComponent2).GetProperty("MyProperty").GetCustomAttributes(typeof(DefaultValueAttribute), false)[0];
  myProperty = defaultValue.ToString();
 }
}

69 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 18:09:05 ]
const string DefaultMyProperty = ゙初期化文字列゙;
string myProperty = DefaultMyProperty;
[DefaultValue(DefaultMyProperty)]
public string MyProperty {...}

70 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 21:45:22 ]
>>68
こういうユーティリティクラスを作っておくとか。
ttp://d.hatena.ne.jp/NyaRuRu/20071228/p2
public static class Reflector
{
  static PropertyInfo GetPropertyInfo(this Expression expression)
  {
    var findprop = default(Func<Expression, PropertyInfo>);
    findprop = expr =>
    {
      switch (expr.NodeType)
      {
        case ExpressionType.Lambda:
          return findprop((expr as LambdaExpression).Body);
        case ExpressionType.Quote:
          return findprop((expr as UnaryExpression).Operand);
        case ExpressionType.MemberAccess:
          return (expr as MemberExpression).Member as PropertyInfo;
        default:
          return null;
      }
    };
    return findprop(expression);
  }
  public static PropertyInfo Property<TArg, TResult>(Expression<Func<TArg, TResult>> expr)
  {
    return expr.GetPropertyInfo();
  }
}
使い方。
var defaultValue = Reflector.Property((MyComponent2 comp) => comp.MyProperty).GetCustomAttributes(typeof(DefaultValueAttribute), false)[0];
これでリファクタリングしても一緒に名前が変わるはず。



71 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 01:54:18 ]
>>69
アトリビュートには const メンバーが使えるんだ、気付かなかった。

>>70
ありがとうございます、今回は単純なので const でいこうと思いますが、大変参考になりました。
これは、ものすごく応用範囲が広いと思います、今後何かと役に立ちそうです。

72 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 18:22:19 ]
ListViewのListViewItemSorterプロパティをVSから設定するには
どうしたら良いですか?
プロパティの項目を見てもListViewItemSorterが無いのですが。

73 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 18:35:15 ]
>>72
インターフェイスだから、本体を実装しないと設定できないので、デザイナにあっても意味がないんですよ。
実際に使ってみると分かるよ。

74 名前:デフォルトの名無しさん [2008/05/02(金) 22:40:32 ]
iTextSharp使ってテンプレート読込んだけれど、その後の文字描画がテンプレートの下に隠れてしまうが、
レイヤの順序を操作する方法とかあるのでしょうか?
テンプレート読込み後に文字描画しても、その逆でも同じように隠れますが。

75 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 11:10:42 ]
721 名前:デフォルトの名無しさん :2008/05/02(金) 19:08:31

MSは.NETをいいかげん諦めたらいいのに。
Javaはほぼ全てのOSでサポートされてるから、仮想マシンという考え方が現実に役に立ってるが、
.NETのCLRはXP以降のWindowsでしか完全に動作しないし、
処理が重くなる以外、糞の役にも立っていない。

VistaがLonghornと呼ばれてた頃は、.NETがネイティブAPIになり、
Win32APIはなくなるとかいわれて、騙されて慌てて.NETを始めた犠牲者が、
騙されたことに気づいた今でもモッサリプログラムを作り続けてると思うとうんざりする。

結局Win32で作られた軽快なアプリ資産があるかぎりWin32APIは永遠になくすことができないし、
そのために.NETは永遠に脇役でモッサリのまま。
これが現実。

738 名前:デフォルトの名無しさん :2008/05/02(金) 20:26:23

.NETの元凶は、遅くなるだけで存在意義がないCLRにあるんだから、
MSは.NETのクラスライブラリと完全互換のネイティブC#を出せばいいんだよ。
開発プラットホームのスタンダード争いは完全にJavaに敗北したんだから、
もうJavaと張り合うためにバーチャルマシンに拘る必要はない。
速くて快適なEXEを作れる言語の方が誰にとっても実利的だろ。
そして.NET Frameworkにはひっそりと死んでもらうと。

大体、ビルゲイツが一線を退いてからのMSはVistaとか.NETとか失敗だらけで見てられない。
顧客(開発者、ユーザ)を苦しめることばかりしている。

76 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 11:45:53 ]
>>75
そんな元スレで失笑買ってたレスをこぴってこなくても

77 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:08:59 ]
VC++ の頃: DWORD ? LPSTR ? 何それ?
C# に移行してから: DWORD や LPSTR がない?
一体どういうこっちゃ。 ('A`)

78 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:40:41 ]
なにがいいたいのかわからない

79 名前:デフォルトの名無しさん [2008/05/03(土) 13:00:34 ]
つまり慣れってことですね、わかります

80 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:46:10 ]
pHandle = OpenProcess(PROCESS_VM_READ, FALSE,PID); // ハンドルの取得
if(pHandle == NULL) // 失敗時の処理
{
cout << "Cannot Open Process !" << endl;
exit(-1);
}
buf = (LPSTR)malloc(READ_SIZE); // バッファの確保
ReadProcessMemory(pHandle,Adr,buf,READ_SIZE,NULL);
CloseHandle(pHandle);
fp = fopen("Result.bin","wb");
fwrite(buf,READ_SIZE,1,fp);
free(buf);

に相当する操作をC#でAPIを使わずに書きたいんだけど、どうすればいいんでしょうか?



81 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:46:13 ]
>>76
詳細希望

82 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:57:53 ]
>>80
無理

83 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:59:26 ]
>>81
ここ
pc11.2ch.net/test/read.cgi/tech/1207063618/

84 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:01:44 ]
APIを使わずにってのはどういう要求なんだろう
WinFormsの中でだって大量に使われているのに

85 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:08:06 ]
コピペ君って馬鹿だな、まで読んだ。

86 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:18:03 ]
C/C++ だと何行も書かないといけないけどC# なら2,3行でさくっと出来るって聞いてC# に移行した。
要は楽をしたいだけ。API を使ってごちゃごちゃやらなきゃいけないんじゃC#に移行した意味がない。

87 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:28:04 ]
だれがそんな嘘を吹き込んだんだよ

88 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:30:16 ]
>>80みたいなことにC#を使うのが間違い

89 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:25:50 ]
C#でXMLを扱う勉強をしています。
XMLに入っている大量のデータ(IDと名前)を読み込んで、
プログラムに入力されたIDとマッチさせて名前等のデータを表示させたいのですが
どのようなアプローチをするのがいいのでしょうか?
検索は何度でも行えるようにしたいので、その都度ファイルにアクセスするのは効率が悪そうだし
かといって膨大なデータを全て配列等に格納するのも資源の無駄遣いのような気がして悩んでいます。

XMLの構造は
<Person>
<ID>774</ID>
<Name>Hiroyuki</Name>
</Person>
が延々と続いたものです。

90 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:31:47 ]
どんだけ膨大か知らんけど普通にオブジェクトのコレクションとして取り込めばいいんじゃない?
内部でXMLとして保持する意味なんて無いっしょ。



91 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:39:40 ]
>>89
>検索は何度でも行えるようにしたいので、その都度ファイルにアクセスするのは効率が悪そうだし

2回目以降はキャッシュに載ってると思うけど。
結局OSのディスクキャッシュと同じものを作ることになるんじゃない?

もちろんアプリケーションサイドでやればOSのディスクキャッシュより効率は良くなるだろうけど
費用対効果考えて判断すればいいんじゃなかろうか。

OSのディスクキャッシュよりもヒット率の低いデータをメインメモリにため込むのはよろしくないと思う。

92 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:51:40 ]
キャッシュのことは完全に頭から抜けていました。
データをメモリに展開しない方向で考えてみます。

93 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 02:38:28 ]
LINQの出番

94 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 07:21:32 ]
ここでしていいのか微妙な質問なのですが・・・
Visual Studio 2005で作成しWebサイトの作成をしているのですが、
aspx側のJavaScriptで記述されたfunctionを、cs側のイベントの途中で記述して
呼び出したいのですが、どうしても方法を思い出せません。

順番としてはボタン等によるイベント→aspx画面表示→JavaScript呼び出しよるアラーム等
でできるはずなのですが、どなたかわかる方いらっしゃいましたらご教授をお願いしたいです。


95 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 12:57:44 ]
InvokeScript

96 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:18:27 ]
vs2008の3か月フリー版でC#をいじってます。
VC++Ver6ではDefWindowProc を追加するのは仮想関数のオーバーライド
ってところでやってましたが、C#では同様なことをするにはどうすれ
ば追加できますか?

どちら様かご教示のほど、よろしくお願いしますm(__)m

97 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:37:32 ]
生のメッセージ捕まえたいのならWndProcをオーバーライド

98 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:56:54 ]
>>97
早速の回答、ありがとうございます。
開発環境の使い方がいまいちわからないのですが、
オーバーライドするときは対象の関数を自分でタイプするような
かたちなのでしょうか?それともどこかのメニューから追加でき
るのでしょうか。
申し訳ありませんが、よろしくお願いします。

99 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:02:54 ]
クラススコープでいきなり override スペースって打ってみな。一覧がでてくるから。
選らんでエンターでメソッド雛形出来る

100 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 20:46:10 ]
>>99
実装できました。
どうもありがとうございましたm(__)m。



101 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:10:36 ]
VS2008で書いたプログラムで蛍光表示管に画像表示させて遊んでいます。

C#のSerialPortクラスにあるWriteメソッドを使って
蛍光表示管にデータ送信をしているのですが
送信途中でブルースクリーンが表示されてWindowsが落ちてしまうことがあります。

一度のデータ送信で300bytes弱、
それを延々と繰り返すようなプログラムを書いています。
そのループ中に、Windowsが落ちることがある、という状態です。

なぜブルースクリーンが出るのか、
どうすれば、ブルースクリーンが出なくなるか、が分かりません。
教えて下さい!

102 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:20:32 ]
ブルースクリーンの内容も書かずに質問とな
大体、複数のPCで試したのか?落ちるコードは?ふざけてんの?

103 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:21:10 ]
むしろSerialPortクラスでOSが落ちるってどんなコードかいてるのかこっちが聞きたいよ。
っていうか、だからとりあえずチミの環境でその現象が起こる最小のコードを晒そうよ。

104 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:54:22 ]
ハード的な問題とか?
その辺素人なんでよく分からんけど。異常な電圧がかかってるとか?

105 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:59:25 ]
ブルースクリーンってハードかドライバだろ

106 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 02:48:34 ]
>>105
十中八九そうだろうね

ただ、「デバイス、ドライバ、etc.が異常である」とOSが判断した結果なわけだから
ソフトウェア的な要因も無きにしも非ず。2000/XPならほぼ無いと思うけど

107 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 03:43:51 ]
ブルースクリーンのエラーの内容を書くのが先じゃね

108 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 04:57:10 ]
あれ一瞬で消えること多いのに、MSのサポートにはエラー番号のページを参照してくださいとか書いてあるよね。

109 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 05:42:36 ]
んでエラー番号検索かけてみたら見つからないと・・・

110 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 06:51:11 ]
>>108
システムプロパティの[詳細設定]の[起動と回復]の
[自動的に再起動する]にチェックが入ってるからだろ。

大抵のエンドユーザーはブルースクリーン出たら再起動するだけで、
内容見てもわけわかんないんだから
Microsoftは親切にデフォルトで[自動的に再起動する]にチェックが入ってる。



111 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 16:37:59 ]
それすらも知らないって事はそれすらもしてないって事か

112 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 16:44:37 ]
string[] arg = new string[3] { "a", "b", "c" };
string value = "";
arg.Where(((s ,i) => { value += s + i.ToString() ; return false; })).Count();
Console.Write(value);


こういうことってやっておkですか?

113 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:05:36 ]
きもちわるいです

114 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:11:24 ]
string用のSum書けば?

115 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 18:44:14 ]
ラムダ式は書き方によってうんこになりすぎるな。

116 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:10:55 ]
class newobj
{
public object o { get; private set; }
public newobj(object o)
{
this.o = o;
}
}
例えばこんなクラスがあったとして
object[] arg = new object[3] {1,2,3};
newobj[] list = new newobj[arg.Count()];
arg.Where((obj, i) => { list[i] = new newobj(obj); return false; }).Count();
こんなことできたら便利だなと思いましたが確かにキモイですね。
素直にfor文使います

117 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:12:46 ]
せめて、int i を引数に取る Aggregate 書くとかした方が。

118 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:27:19 ]
Array.ConvertAllだろどう考えても
せいぜいSelect

119 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:37:01 ]
なんだこの Where, return false, Count 厨は

120 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:41:32 ]
俺なら

>>112
var arg = new [] { "a", "b", "c" };
var value = arg.Aggregate(new StringBuilder(), (b, i) => b.Append(i));
Console.WriteLine(value.ToString());

>>116
var arg = new [] { 1, 2, 3 };
var list = arg.Select(i => new newobj(i)).ToArray();

と書くな。
副作用を目的としたWhereなんて嫌すぎる。



121 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:55:47 ]
newobj[] list = Array.ConvertAll<object, newobj>(arg, (obj) => new newobj(obj));
こういったメソッドも用意されていたのですね。
SQL?の知識が無いためSelectの使い方がよく解らなかったのですがそういう風に使えるんですね。
Aggregateはヘルプ見たのですがいまいち使い方わからなっかのですが便利そうですね。様々な使い方できそうです。
皆様どうもありがとうございました。

122 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 20:00:10 ]
>>120
112の方、仕様満たせてないぞ

123 名前:101 mailto:sage [2008/05/06(火) 21:11:59 ]
>>102-111
レスありがとうございます。

>>110の設定は知りませんでした…ありがとうございます。
・ブルースクリーンのエラー内容を見たところ、以下の通りでした。

STOP: 0x000000D1 (0x00000000, 0x00000002, 0x00000000, 0xBABC9185)
vrcomIT2k.sys Address BABC9185 base at BABC8000, DateStamp 3ec3702e
www.uploda.org/uporg1408089.jpg.html

(FYI:
>>106「デバイス、ドライバ、etc.が異常である」ということで思い出したのが、
PCのUSB端子から、蛍光表示管メーカーが用意している仮想COMドライバを使って
蛍光表示管にデータ送信している、ということをやっています。
もしかしたら本件と関係があるかもしれないので、書いておきます。)

他PCでの再現性については、PCを1台しか持っておらず、
申し訳ないのですがすぐ確認できる状況にはありません。

最小のコードについては、現在調査中です。再現ができ次第、UPしたいと思います。

124 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 21:41:38 ]
> 蛍光表示管メーカーが用意している仮想COMドライバ

臭いな。というかたぶんこれだろう。

125 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:50:39 ]
>>123
エラー内容みるかぎり、蛍光管メーカーに問い合わせるのが正解かと
ここで聞いても、運よく同じメーカー同じドライバで同じトラブルに見舞われている人以外には分からないかと。
とりあえずは、ドライバがそのOSに対応しているのか、そのへんから全部チェックしてみたらどうだ?
2kとかついてるから、Windows2000専用とかそういうのないか?

126 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:06:52 ]
STOP: 0x000000D1 は、メモリエラーの可能性も無きにしもあらずだから、
念のためmemtest86かけてみたら?まあ、そのエラーでブルースクリーンは
シリアル周り(ハードウェアモデムとか)のエラーとしてすっごくありふれた
ものだから、たぶんドライバの問題だろうね。

127 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 18:53:43 ]
VS2008は起動してるだけでメモリアクセスしてるから
たまに起動してるだけでブルスク(0x9C)になることがあるぜ。
まあ原因は安物メモリのせいかもしれないが。

128 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:46:29 ]
それがみんな出ていたらFAQに入るわ

129 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:59:12 ]
あきらかにハードが原因だろ

130 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 13:50:15 ]
>VS2008は起動してるだけでメモリアクセスしてるから
そりゃそうだろ。
メモリアクセスしないアプリがあったら見てみたい物だ。




131 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:42:28 ]
>>130


132 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:47:01 ]
>>131


133 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:50:47 ]
>>132

134 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:08:25 ]
>>133


135 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:20:16 ]
>>134

136 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:25:29 ]
>>135


137 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:13:00 ]
>>137

138 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:43:39 ]
>>139

139 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 06:10:53 ]
>>139

140 名前:130 mailto:sage [2008/05/09(金) 12:01:02 ]
あれ?なんか変なこと言った?



141 名前:デフォルトの名無しさん [2008/05/09(金) 12:17:29 ]
ArrayList arrayをDataGridViewに表示させたいのですが、DataSource=arrayとやっても何も出ません。
何か良い方法はありませんでしょうか?

142 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 12:19:48 ]
>>140

143 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 13:03:35 ]
>>142


144 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 13:06:51 ]
>>141
System.Collections.ArrayList array = new System.Collections.ArrayList();
array.Add(new { X = 3, Y = 4 });
array.Add(new { X = 5, Y = 6 });
this.dataGridView1.DataSource = array;
動作します、原因はArrayListに追加した要素が、プロパティーではなくフィールドになっていたとか、そんなオチでは?


145 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 21:58:27 ]
arrayが空っぽ

146 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 22:10:19 ]
そろそろ麻雀やろうか

147 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:22:23 ]
readonly(private setじゃなくてコンストラクタ以外で変更できないようにする方ね)にするためだけに
自動プロパティを使うのを諦めてフィールドを手書きするのが悔しい

148 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 06:34:59 ]
public struct T_INFO_DATA
{
public uint Id;
public uint Fixed;
public byte[] Array;
};

switch (WParam.ToInt32()){
case 0x1200:
COPYDATASTRUCT cds = (COPYDATASTRUCT)Marshal.PtrToStructure(LParam, typeof(COPYDATASTRUCT));
T_INFO_DATA a = (T_INFO_DATA)Marshal.PtrToStructure(cds.lpData, typeof(T_INFO_DATA)); ←ここでエラー



WM_COPYDATA受信時に上記のような処理を行うと下記のエラーメッセージが出ます。

保護されているメモリに読み込みまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。

誰かどのように修正すれば直るのか教えてください。
構造体Arrayの中に入ってる配列数は48個です。
これ以外の構造体(配列を使っていない構造体)の受信は正常に取得できます。よろしくおねがいします。


149 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 07:55:28 ]
良くわかんないけど
C側のイメージとしては
struct T_INFO_DATA
{
DWORD Id;
DWORD Fixed;
BYTE * Array;
}
となっているわけですが、問題ないのですか?

150 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 07:59:51 ]
>>149
+アルルファ
byte [] Array の位置にはポインタが入っているわけでなく、メモリーブロックへのハンドルが入っています。
byte [] オブジェクトを確保して、そこに格納する必要があるのではとか?
ぱっとみ思いつく限り



151 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:48:21 ]
やったことはないけども、
int とか IntPtr にして MarshalAs でなんとかできないかな。

152 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:55:02 ]
なぜか Word .doc だけど、↓なんてどうだろう。
download.microsoft.com/download/4/f/d/4fd49a94-8772-4bd0-88ca-bf46e2d029fc/WHITEPAPERS/Accessing%20the%20eID%20Middleware%20from%20.NET%20(Version%201.0).doc

153 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:07:22 ]
メモリハンドルをIntPtrで受け取っておいて、LocalLock、Marshal.Copy、かな。
あと、Arrayというメンバは名前をhMemとかに変えろ。

154 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:16:46 ]
>hMem
むしろキモイ

155 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:23:41 ]
そうか?
すぐAPIに渡すものなら、APIの引数名に合わせた方がわかりやすいだろ?

156 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:34:18 ]
C#を一から始める際に参考になるサイトとか教えてもらえませんか?

157 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:38:40 ]
ケースバイケースだろうね。
Win32APIはともかく、デバイス屋が提供している制御用のAPIなんて
意味不明すぎる命名がされてること多いし。

158 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:45:03 ]
>>156
「C# 入門」でぐぐって一番上。

159 名前:148 mailto:sage [2008/05/11(日) 17:40:01 ]
>>149
C側のイメージだと、
struct T_INFO_DATA
{
DWORD Id;
DWORD Fixed;
BYTE Array[48];
}

という認識です。
ポインタを送るほうがいいのでしょうか?

160 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 19:23:15 ]
>>159
構造体メンバの固定長配列は、
unsafe 限定で fixed って構文がある。

ufcpp.net/study/csharp/sp_unsafe.html#fixed



161 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:42:03 ]
属性使っていろいろする必要がある。
[StructLayout(LayoutKind.Sequential)]
public struct T_INFO_DATA { 
 public uint Id;
 public uint Fixed;
 [MarshalAs(UnmanagedType.ByValArray, SizeConst=48)]
 public byte[] Array;
};
なお、コンパイルは通してないからこのままでOKかどうかの保証はない。
あとは調べてくれ。


162 名前:148 mailto:sage [2008/05/13(火) 07:16:56 ]
>>161
ありがとうございます。
構造体をその記述にするだけでうまくいきました。

163 名前:デフォルトの名無しさん [2008/05/13(火) 15:55:00 ]
相談内容
RS232C通信のプログラムを作っているのですが、
デバックの効率化のために実際の通信内容を別Windownにてモニタリング
できないか検討してます。

本当はStreamにフックするだけで使えるものが他のデバックにも使えて
望ましいのですが、そんな便利なクラスってないれすか?


164 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:02:31 ]
.Net には、フックの類はないよ
自分がやるとしたら、Streamクラスから派生したクラスにフックコードを挿入したアダプタクラスを作って
RS232C通信をアプリ側でフックする
引き続いてWCFを使ってプロセス間通信ができるように、サービスを作って
別ウインドウで作ったデバッグウインドウは、そのサービスに接続して、状況を読み取るといった形式にすると思う。
ついでに、通信情報以外の各種情報もモニターできるようにするかな。

165 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:09:14 ]
昔、まさにそういうツールがフリーであって重宝したなあ。
NTで動いてたから、今でも使えるとは思うが何って言ったっけな。

166 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:12:25 ]
便利とは思うが、盗聴まがいのAPIはよろしくないから無くした方がいいと思う。
キーボードフックを筆頭に。

167 名前:163 mailto:sage [2008/05/13(火) 16:38:31 ]
>>164さん,165さん
レス有難う御座います。
アダプタクラスですか・・
腑抜けの私には、むりっぽそうですw。

申し訳ない、追加で質問なんですが、
フックがだめなら、
またStreamの中身を盗見することって難しいのでしょうか?

普通に考えると
ReadStreamは一度読み取ると消えちゃうし、
WriteStreamはそもそも読めないですよね。

これができれば、何とか簡易もどきが作れそうな気がするのですが


168 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:47:43 ]
>>167
中身みるよりアダプタの法がよっぽど楽だ、Streamクラスの抽象関数オーバーロードして、呼び出しをそのままReadStreamなりWriteStreamなりに渡せば以上終了だぞ。

169 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:53:10 ]
>>167
いい機会だからデザインパターンを勉強しような

170 名前:163 mailto:sage [2008/05/13(火) 16:57:26 ]
>>168
そうですか。了解です。

普段は組み込み関連の仕事が多いもので、
不慣れな環境なんで、他に良い手がないか、
無駄に時間をつぶして調べ回っていました。

アダプタ法で頑張ってみます。
勉強になります。有難う御座います!!



171 名前:163 mailto:sage [2008/05/13(火) 17:20:28 ]
ぐは、早くも生きづまった・・
SerialPortクラスのBaseStreamメンバはReadOnly・・・
Streamの継承クラスを渡せない・・
早くもだめぽw

そうすると専用のStreamReadrとWriterを自作するのが王道でしょうか?
それとも、SerialPortクラスを継承してメソッドを書き換えるか・・

>>169さん
アドバイス有難う御座います
今度本を買ってきます。
デザインパターンの根本的なところを理解していないのに、
何か作ろうとするから、いつもメタメタになる・・

172 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:39:58 ]
本買って読むのもいいが、この種の本は場数が足りんとどうせ読めんよ。
自分で頭をひねって考えるのが重要。
class MyStream : Stream
{
Stream rs232 = ここで、BaseStream を突っ込む
override 関数各種() { rs232.同名の関数() ; }
}
基本は、こうやって作る。とにかくオブジェクト図を描くこと。
オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。

173 名前:163 mailto:sage [2008/05/13(火) 17:55:08 ]
>>172さん
有難う御座います。
コードまで書いて頂き、お時間を取らせてしまって、
すいません。

なるほど!!、こうすればBaseStreamそのものがReadOnlyでも制御できる。
こうすれば、デフォルトのStreamReaderが使いまわせる。
つくづく自分の頭の固さが嫌になります。

>とにかくオブジェクト図を描くこと。
>オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
>さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。
こういった、アドバイス非常にありがたいです。!!
自分でもあがいてはいるのですが、
周りにこういった話が出来る人がいないんです。

オブジェクト図ですね。書きまくって見ます!!

174 名前:163 mailto:sage [2008/05/13(火) 18:04:07 ]
>>172さん
まだいらっしゃるかな・・
>オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
もしよろしければ、この部分についてもう少し解説していただけないですか?
これは、どんなときに考えるのでしょうか。
クラスの責務の振り分け/分割時?
またメッセージの接続が最小になると、どんな良いことがあるのでしょうか?

質問ばかりですいません。


175 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:11:30 ]
オブジェクト指向のもっとも重要なポイントは、クラスではなくインスタンス。
インスタンスが主役であって、クラスはオマケ。継承がウンタラとかいう連中もいるが間違っているから相手にするな。
今四つのインスタンスがあるとする、それぞれ A , B , C , D
粒度が細かすぎて取り扱いにくいので、二つにまとめてみようと考えてみる。
インスタンスAがBを呼び出すなら
A --関数名--> B
と書いてみる。
まとめる方法は[A,B,C] [D]がよいか[A,B] [C,D]がよいか。
呼び出しが最少になるような図を考えてみよという事。
適当に矢印書きまくって、最小になるように分離してみるといい。
あとは応用。

176 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:56:57 ]
インスタンスが主役でクラスがおまけ、って俺には理解できない発想だマジで。
っていうか、それに類するような主張をこれまでに聞いたことがないよ。

177 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:06:45 ]
なにいってるかよくわからんが、継承か包含かちゅー話じゃないのか

178 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:12:02 ]
プロトタイプ指向のことなんじゃね

179 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:16:53 ]
インスタンスが主役w

180 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:21:47 ]
C#は型指向



181 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:35:08 ]
>>176
オブジェクト指向を扱っているサイトにいってみたら?
そうすれば無知も治るよ

182 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:39:21 ]
オブジェクト指向ではインスタンス(実体)は脇役だろう。

183 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:40:36 ]
>>182
今から15年前くらいは、確かにそういう事になっていたが、そのまま固まったか?

184 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:43:19 ]
Javaが登場して以降、体系的に研究されたオブジェクト指向もちょっとは勉強するといいよ。
でないと、デザインパターン意味や使い方など理解に及ぶことはできないし、上の例だって発想することすら難しいだろう。

185 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:46:44 ]
Javaと関係なく研究は進んでいたと思うんだけど。

186 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:50:18 ]
何言ってんの。
オブジェクト指向イコールJavaと言ってもいい程だよ。

187 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:52:15 ]
その進んだ研究を勉強していないのは駄目だという事だよ
今のライブラリは当たり前にその設計思想が入っているからな、知らないと使い方分らんだろ。

188 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:53:17 ]
>>186
ゴールじゃねぇよ、LINQとか見てみろ

189 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:54:35 ]
別にオブジェクト指向がどうとかこうとかどうでも良いよ

190 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:55:05 ]
インスタンスは実体。
お前はパソコンに文字を表示させるとき、直にVGAのメモリを書き換えるのか?違うだろう。
ドライバやらOSやらGDI+やらライブラリ郡など抽象化されたものを通してアクセスし表示させるだろう。

オブジェクト指向はインスタンス(実体)を直接操作せず、抽象化して利用しやすくする手法。
インスタンスがメインなわけがない。



191 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:55:55 ]
>>188
ゴールなんて関係ないこと持ち出して自ら否定して
結局何が言いたかったのかね。


192 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:56:37 ]
>>190
ヒント:言葉遊び


193 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:56:38 ]
>>190
そうだな、もう永久にそう思っていろよw

194 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:59:04 ]
>>190
そんな考えでも君のプログラムがちゃんと動くならそれでいいよ
それはそれで正しいわけだから


195 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:00:26 ]
良いコード:動くコード
悪いコード:動かないコード

196 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:05:01 ]
クラスが主役 に一致する日本語のページ 約 290,000 件中 1 - 10 件目 (0.30 秒)
インスタンスが主役 に一致する日本語のページ 約 1,790 件中 1 - 10 件目 (0.06 秒)

197 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:11:37 ]
タイヤキの型とタイヤキそのもの
どっちも主役です(ゆとり教育的発想)

198 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:34:08 ]
もうこの手の話がしたい奴はOOPスレ行った方がいいよ。
あそこは>>175的なトンチキな自説をぶってるアホが延々同じネタをループしてて楽しいと思うよ。
俺は正直吐き気がするけどねああいうの。

ちなみに>>190は半分はいいこと言ってると思うんだよね。
OOPというアイデアの肝は、>>190の言う抽象化(より正確には仮想化と言うべきだと思うけど)された
仮想機械をより直感的に表現するコーディング手法ということだと思う。

ただ「実体=インスタンス」ってのは全然意味不明だが。

199 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:36:29 ]
インスタンスの和訳が実体だろ・・・

200 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:43:41 ]
>>188
LINQはオブジェクト指向とはまた別だろ。
関数型プログラミングのほうが近い。



201 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:45:09 ]
なんか、こう訳わからん事になっているから、少し書くと
たとえば、C++でいう所の仮想テーブルは、virtual などなくても class のみで作り出すことができる。
これは非常に重要なことで、仮想テーブルは書き換えられないが、自分で作った仮想テーブルは書き換えられる。
このような実装は、Strategyパターンと呼ばれる。
つまり、classを使った抽象化は実は必要なく、ただ『頻繁に出てくるので言語上にvirtualとして実装しておくと便利であるという程度の意味』しかないのだ。
オブジェクト指向を理解する上で、この点について理解しているかどうかは決定的だ。
理解せずクラスと継承を中心に置くとやれる事が一気に限定されてしまうのだ。
さらには、継承には各種問題点も指摘されてり、特に深い継承は良くないと最近はされている。
また原則、継承を考える前にインターフェイスを検討するべきとされている。

参考コーディング規約
www.kawabata.com/dotnet/CodingStdCS.pdf
参考サイト
www.objectclub.jp/


202 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:49:06 ]
>>199
話の文脈を読まなきゃ。
>>190の言う「実体」とは「クラスによって抽象化される前の何者か」。

たとえばGDIならビデオカードやプリンタのハードウェアのことを「実体」といっている。
少なくとも話の前半ではね。

203 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:51:16 ]
>>201
それって結局、包含と委譲のことだろ。クラス対インスタンスという話ではない。
継承だけがクラスの特徴ってわけじゃないぞ。

204 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:51:26 ]
>>202
確かに変だな。

205 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:53:21 ]
>>203
つってもインスタンスを大量生産するための鋳型以上の意味もないだろ?

206 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:55:38 ]
>>175
ひょっとしてインターフェイスと書くところをインスタンスにしてしまって
引っ込みが付かなくなったとか。それなら文脈があうが・・・

207 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:57:38 ]
>>206
インターフェイスもインスタンスの一つと見なしてよいものだよ。
インターフェイスは取得するものだ。

208 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:58:17 ]
>>207
またまた荒れるような書き方をするな。

209 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:59:06 ]
いったい君たちは何の話をしてるの?
誰か頭のいい人ドラゴンボールに例えてくれよ

210 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:00:06 ]
ドラゴンボールの主人公はヤムチャなのか天津飯なのかと言う話



211 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:27:53 ]
実装と概念は分離して語れよ

212 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:30:20 ]
↑といいつつ乖離して語る馬鹿


213 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:10:09 ]
主役はキーボードを打つキミだ!!

214 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:52:33 ]
>>209
サイヤ人→クラス
悟空→インスタンス

215 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:57:38 ]
スーパーサイヤ人→スーパークラス

216 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 04:08:51 ]
ブルー将軍→サブクラス

217 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 06:42:59 ]
クラスもメタクラスのインスタンスだから、
インスタンスが主役ということでおk、みたいな話か?

218 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 06:58:38 ]
決定的な違いは、メタ視点を持てているかどうかだろうな
明らかに不自由な設計やコーディングをしているのは明白なのだが
目が見えていないので、それを理解するのが困難になっているような気がする。

219 名前:163 mailto:sage [2008/05/14(水) 09:30:42 ]
皆さん、いろいろとアドバイス頂き有難う御座います。

すこしスレが荒れ気味ですが、これは私の無知を175さんが丁寧に
ご指導してくださった点から始まっているかと思います。
原因は私にあります。スレを汚して申し分けありません。

最近良く思うのですが、OOPの浸透が何故遅いかと、
1)基本概念と実装に大きな開きがありすぎる。
2)考え方に様々な歴史や諸説があり、人や本によって解釈が異なる。
(人によって解釈が異なるのは、読んだ本の年代が大きく依存しているんでしょうか・・)
の2点に集約してるかと思います。

OOPが不慣れなものにとっては
具体的な実装論はなかなか本の中には出てこず、
また、こーいう現場的な定石というのか考え方が定まらなくて、
悩んでいることが多いんです。

だから、175さんを始め皆様より貴重なアドバイスを頂いた件は、
非常に感謝しております。

インスタンスの件は、2論に分かれているかと思いますが、
これは馬鹿な私にでも分かるように説明した為の、言葉の綾かと思います。

長文になってしまい申し訳ありません。
とても勉強になりますた。
皆様を師匠と仰ぎ、また伺わせて頂きます!!

220 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 12:43:48 ]
くだらない哲学論争は後回しにして、とりあえずクラスの利便性(哲学論争クンはこういう言い方に反発するようだけど)
を体得するのがいいと思うよ。っていうかそれが一番重要。
大して難しいことじゃないから使ってれば自然とわかるよそれは。

くれぐれもOOPを外から強制された義務的なものに過ぎない、などと考えないこと。
便利だから使われてるんだよ。

OOPが浸透してないとは俺には思えないけど、もしそうであるのなら
それはOOPが「つかえねえ」からじゃなくてこの業界に馬鹿が多いからだよw



221 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:16:24 ]
質問です
UDPで受信したメッセージをテキストBOXに表示する処理の方法論です。
今は、UDP受信を別スレッドで受信して。セマフォー同期ででString変数に渡し。
フォームのプロセスで、タイマー関数からセマフォーを同期で文字列を受け取って
テキストBOXに表示しています。
しかし、今一つスマートでないような気がしてなりません。もっと良い方法がないでしょうか?

222 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:38:37 ]
普通に Control.Invoke でいいんじゃねーの?

223 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:20:18 ]
タイマースレッド内に、Invokeで受信部分を入れてみたのですが。
ダメみたいな感じでした。
問題点1 Invokeスレッドが終了しない。
問題点2 結局、セマフォーで受信の確認を取るので処理的に同じ。
ただし、使い方が悪いのかもしれない。

別スレッドから、フォームに非同期イベントが出せればいいのだけど、その方法を知らない。
きっと有るような気がします。すごく初歩的な機能かも知れない…

224 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:36:47 ]
223が何を言ってるのか全く分からない
Invoke スレッドて何?

225 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 16:14:15 ]
>>224
んなこと言ったら、余計意味不明な説明が始まりかねん

で、結論
Invokeの意味を理解できてない
Invokeの使い方が間違っている

226 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 16:18:18 ]
>>225
>Invokeの意味を理解できてない
その可能性もある。
>Invokeの使い方が間違っている
この問題にInvokeが適用できない。又は、別つの方法があるが使用したくない。

ちなみに、Invokeの中は一つのスレッドであることは理解していますよね?

227 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 16:54:08 ]
>>221
Control.Invokeが解っていないなら、
codezine.jp/a/article.aspx?aid=139


228 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 17:32:06 ]
>>222-227
出来ました。 結論:Control.Invokeが解っていなかった。無知でした。
申し訳ありません。そしてありがとうございました。

229 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 21:33:17 ]
本当の主役はテレビの前のあなたです!!m9ビシッ

230 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:31:56 ]
定数の取り扱いについての質問です。

定数宣言
public enum 定数
{
MASU = 81,
}

変数の定数宣言
public const int MASU = 81;


この場合、配列列データ_創る場合。
private int[] tbl = new int[定数.MASU];

private int[] tbl = new int[MASU];
どちらも同じに見えるのですが。前者を使用したほうがベターですか?
前者の方が速いですか?




231 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:37:25 ]
enumハックを思い出した

232 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:46:14 ]
キモい命名法だ

233 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:58:18 ]
>>230
速さは一緒
値自体に意味があるならenumじゃなくてconstの方が適切
でもpublicならconstじゃなくてstatic readonlyにした方がいい

234 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 00:14:07 ]
>>233
知らなかった知識です、ありがとうございます。

235 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 00:35:48 ]
constと(static )readonlyは全く別物だから、
ちゃんと調べて使い分けるようにした方がいい

236 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:28:29 ]
>>235
どこがどう違うかを書いた方がいい

237 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:44:41 ]
自分で書けよ

238 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:48:18 ]
constに出来るものをstatic readonlyにした方がいい理由ってなんだよww

239 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:26:42 ]
>>238
メモリの節約。

240 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:30:00 ]
↑アホ



241 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 06:17:51 ]
基本的にconstはクラス内でprivateに定義してその中だけで使用する。
constをアセンブリやnetmoduleまたがりで参照した場合、副作用がある。

S.DLLでpublic const A = 10
M.EXEで S.Aの表示 10
public const A = 99 に変更してS.DLLだけを再コンパイル。
M.EXEを再コンパイルしない限り結果は10のまま。

242 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 07:48:45 ]
constを他のアセンブリから参照すると、参照元のアセンブリにも定数が埋め込まれる。後で値を変えたらさあ大変。
数学定数みたいに、絶対に値が変わることがないもの以外は、static readonlyにしたほうが無難。
あとはSizeとかDateTimeみたいに初期化の必要なものを、定数っぽく扱いたいときに。

243 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 09:05:11 ]
それは完全に枝葉というか性質というか…全然別という意味分からないだろ
constはコンパイル時に値が確定される定数、readonlyは書き込み不可な変数。

見えてくる違いとしては、constはコンパイル時に評価されるので使える範囲がちょっと広い。
定数式しか許されない属性指定内部やswitchのcase句にも使用可能。これらに使用される場合境界越えで
あってもconstにする必要がある。

ちなみにenumの個々の値はconstなのでenumを等価に置き換えるならconstになる。

244 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 09:25:48 ]
enumの値が変わったら大変なことになるんだな

245 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 09:27:54 ]
外部に公開している列挙体を不用意に変更しちゃマズいのか。

246 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 10:09:30 ]
>>242
これは知らなかった。勉強になる

247 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:15:35 ]
ところでなんでcaseには定数しか書けないの?

248 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:33:21 ]
定数じゃないと、複数該当することもあるからじゃない?
まあ上から順番に比較するような仕様のやつもあるが。

249 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 17:34:50 ]
あとジャンプテーブル変換

250 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 18:23:06 ]
実装を簡単にするための手抜き



251 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:20:36 ]
かといってVBのSelectCaseは自由すぎると思わないか?

252 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:37:20 ]
selectっていうのは0,1,2,3,4...
みたいに連番で並んでると
それを関数ポインタの配列みたいにしてジャンプすることが出来る
だから定数じゃないとどうしようもない

253 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 02:00:26 ]
バカばっかw

254 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 08:37:30 ]
↑暴走中。

255 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 10:48:23 ]
>>251
バグを引き起こしかねない問題を含まない限り、自由度は高いに越したことはないよ
C#は新規なんだから、switch case の構文にこだわるべきじゃないとは思った
もともと、switch は C の特殊 goto label の構文な訳だし、考え方が古臭すぎる。
for 文からの脱出に break を使いたくても、switchにとられてしまうとかダサいと思うので。

256 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 11:37:15 ]
フォールスルー不可能にもかかわらずbreak必須って時点で(ry

257 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 11:38:59 ]
たしかに。
この辺何とかならなかったのか。
C、C++からの移行を意識してるならswitch caseと別の構文にすればいいしな

258 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 11:57:33 ]
>>252
stringにもswitchは使える
その場合はif(str=="a") /*case a*/ else if(str=="b") /*case b*/ else if…
みたいなコードにコンパイルされる

259 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 16:01:00 ]
>>258
たくさんあるとDictionaryを使うらしいぞ

260 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 18:35:22 ]
#regionはIDEで出来るようにした方がいいと思う。



261 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 18:49:50 ]
それを言語そのものに組み込むところはC#の特徴というかアピール
IDEサポートを謳ってる言語なんだから

262 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 19:29:25 ]
C#3.0の自動プロパティ作ると、[xxx]k_BackingField(うろ覚え)とかいうような変数が内部で生成されてるらしいんだが、これにソースコード上で属性を付加する方法ってありますか?
自動生成のプロパティにつけても自動生成される変数には付加されないみたいです。

263 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 19:54:51 ]
>>261
C++にもあるよ。
てかそれなら両方サポートすればいいじゃん。

264 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:02:54 ]
>>262
> 自動実装するプロパティ (C# プログラミング ガイド)
>
> 自動実装したプロパティでは、属性は使用できません。プロパティのバッキング フィールドで属性を使用する必要がある場合は、通常のプロパティを作成します。

265 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:05:39 ]
>>264 ('A`)マンドクセ

266 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:21:12 ]
プログラミングC#っていう本を買おうかと思ってるんだけど
これ2年前に第4版が出たのが最後で、C#2.0対応とかVS2005対応とか書いてるよね
もう今はC#3.5とかVS2008もでてるけど、近いうちに第5版とか出たりしそうかな?
それとも第4版の内容でまったく問題ない?

267 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:27:06 ]
普通に考えれば最新の機能には対応してない。それだけだ

268 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:32:47 ]
C#3.5って出てるの?

269 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:39:45 ]
>>267
まあ、そうだね。サンクス

>>268
ごめん、嘘ついた。NET Framework 3.5でもC#は3.0のままです

ちょっと調べてたら原書のProgramming C# 3.0ってのは去年末にでてるんだな
日本語版でないかなー

270 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:43:57 ]
始めたばかりの俺はそれを待っている
今は猫と初めてを併用して学習中



271 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:02:27 ]
原書買えよ

272 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 02:10:19 ]
質問です。
DataGridViewで自動カラム生成機能ってありますけれど
あれのカラムのフィールド名はこちらから指定できないんでしょうか?
(特にReflectionを使った手法で)
プロパティに属性つけるとかしたら上手くいくんじゃないかと思ってるんですが…

ご存知の方いましたらお教えください。

273 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 03:11:04 ]
自動生成したらフィールドも何もないと思うが、
カラムのフィールド名って具体的に何を指してる?

デザイナで列を追加したときにフォームに作られる
Column*フィールドの名前のことか?

274 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 06:16:50 ]
>>273
すいません、あまりにも説明不足でした。
フォームのカラムのヘッダに表示される文字列のことです。
プロパティ名がそのまま文字列変換されて表示されているようなので
多分どこかで設定できるんではと思っているのですが…

275 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 07:41:53 ]
Select()でプロパティ名を変えた匿名型にすればいい

var e1 = ...; // 元のデータソース: IEnumerable<Hoge>
var e2 = e1.Select(x => new { Bar = x.Foo, ... });

276 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 08:36:22 ]
知らない文法だなぁと思ったら2008ですか…。

ちょっと調べてみます。ありがとうございます。

277 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:45:58 ]
Seleは2005でもあるんじゃ?
ラムダはデリゲートになおせばいいよ

278 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:47:00 ]
Selectな

279 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:50:05 ]
ごめん嘘だ
msdn.microsoft.com/ja-jp/library/bb548891.aspx
3.5からだった

280 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 22:57:12 ]
2005でも似たようなのを作ることは出来るがラムダ式がないと使い物にならない



281 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 06:12:12 ]
2008に慣れてしまって、もうLastOrDefault()相当のコードを書くことすら面倒くさい。

282 名前:デフォルトの名無しさん [2008/05/19(月) 14:21:56 ]
WindowApplicationを作っています。

別スレッド(固定周期)でDBの値を引いてきて、Form(メインスレッド)のラベル.Text属性に値を設定する
という処理を行なっていますが、
表示されるのは最初だけで、その後DBの値を変えてもラベルの値が変更されません。

どうしたらいいかご教授ください。

283 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 14:29:09 ]
>>282

>>227と同じかな?

284 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 19:18:45 ]
同一のストリームをBinaryReaderとBinaryWriteに食わせた場合、
Closeを呼び出す順番ってどうすればいいの?

ついでに、フィールドで持っているストリームをメソッド内のローカルの
BinaryReader/BinaryWriterに食わせた場合、仮にメソッド内でClose呼んだりusingを使ったり
することを避けたとしてもBinaryReader/BinaryWriterがGCに回収されるタイミングで
ストリームも強制的に閉じられてしまうんだろうか?

285 名前:デフォルトの名無しさん [2008/05/19(月) 20:14:51 ]
今、関数の引数を設定したλ式を作る時、以下のようにしているのですが、
もっと良い方法または、ライブラリにこれと同様なことをするための物はあるのでしょうか?
static Func<TResult> SetArg<T1,TResult>(Func<T1,TResult> f,T1 a1)
{
   return () => f(a1);
}
...
static Func<TResult> SetArg<T1,T2,T3,T4,TResult>(Func<T1,T2,T3,T4,TResult> f,T1 a1,T2 a2,T3 a3,T4 a4)
{
    return () => f(a1,a2,a3,a4) ;
}

286 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 20:50:34 ]
>>285
>static Func<TResult> SetArg<T1,TResult>(Func<T1,TResult> f,T1 a1)
>{
>   return () => f(a1);
>}

ライブラリに同等のものはないしもっと良い方法もない。
でもここにあげられたSetArgメソッドを使うぐらいなら
 a1 => f(a1)
と毎回インラインで書けば十分だと思うよ。

287 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 20:57:42 ]
>>285
今までC++使っていた人?

C++がstd::bind1stやstd::bind2ndをありがたがって使っているのは
今までC++に簡潔なラムダ式が存在しなかったという特殊事情もあるので
C# 3.0で無理してまねる必要は無いと思うよ。

C#だとSetArgみたいなのを作ってもインライン展開されないしね。

288 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 20:59:06 ]
なんかすごいレベルの高い話してる・・・

289 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:00:24 ]
慣れてないだけだよ
解ればそんなに難しくない

290 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:10:48 ]
>>284
Disposeは複数回呼び出されても大丈夫だから,続けて呼びさえしていれば問題ないんじゃね
BinaryReaderやBinaryWriterはファイナライザを実装してないから
それらがGCされるときにストリームが勝手に閉じられることはないよ
ストリームへの参照がどこかで繋がってる限りは大丈夫



291 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:44:31 ]
>>290
ありがと。

292 名前:デフォルトの名無しさん [2008/05/19(月) 21:55:05 ]
>>286
実はそれがちょっとまずかったので、関数化したという事情があるんです、たとえば。
List<Func<int>> list ;
for(int i=0;i<100;i++)
{
Func<int> tmp = () => i + 5 ;
list.Add(tmp) ;
}
とすると、プログラムする側の気持ちとしては i には 1 , 2 , 3 , 4 , 5 となって欲しいのですが
計算が遅延しますので、i = 100 , 100 , 100 ... となってしまいます。


293 名前:デフォルトの名無しさん [2008/05/19(月) 22:29:40 ]
いやそれは遅延のせいではないんじゃ…

294 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:31:29 ]
C#のデリゲートはクロージャでない

295 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:34:25 ]
遅延させたいんでしょう、つかその必要がなければ、Lambdaなど使わずにその場で計算すれば済むわけだし。

296 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:39:05 ]
Cocoaバインディング便利そうなんだけど、C#でUI作るとき同じようなもの作ったりしてる人おる?


297 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:40:44 ]
>>292
List<Func<int>> list ;
for(int i=0;i<100;i++)
{
var j=i;
Func<int> tmp = () => j + 5 ;
list.Add(tmp) ;
}
こうすればお望みの動作にならんかったっけ?見検証ヾ(゚д゚;) スッ、スマソ。

298 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:44:05 ]
ListView.ItemSelectionChangedイベントで選択Itemが変化したのを検出し、
別の詳細表示フォームの表示を更新する、といったことをしています。

何も選択していないときは、詳細表示では何も表示したくないので全て消去しているのですが、
ItemSelectionChangedイベントは、選択が切り替わるときに「選択解除」と「選択」の2つのイベントを発生させます。
そのため「表示の解除⇒再表示」となってしまい、妙なチラツキが発生してしまっています。

1回目の解除用のItemSelectionChangedイベントでは、次に選択が入るかどうかが分からないので、
どうやってチラツキを抑えようか困っています。
この問題を改善する方法はないでしょうか?

299 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 01:04:48 ]
>>292
こういうので良いんじゃない?

var list = Enumerable.Range(0, 100).Select(i => (Func<int>)(() => i + 5)).ToList();

300 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 01:25:06 ]
>>298
SelectedIndexChanged使えば?



301 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 02:04:34 ]
>>297
やり方はそれでOK
そのコード自体はNullReferenceExceptionになるけどなw

てか、C#でラムダ式に(パラメータ以外の)変数を入れる場合は、
基本的にスコープを最小限して、参照型ならコピーを使うというのは
for文の条件に不動小数点数を使わないのと同じくらい常識だと思う

あと、ラムダ式をごちゃごちゃ弄る場合は式木使った方がいいと思う
MSDNのどこかに載ってるExpressionVisitor使えばいろいろ出来る

302 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 02:15:36 ]
intはいつから参照型になったんだ

303 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 03:25:22 ]
>>300
それも試してはいるのですが結果は一緒でした。
マニュアルには複数選択のListViewの場合は削除と追加の時に呼ばれるとありますが、
これはMultiSelect=falseの設定でも同じ仕様で動いていました。
何か設定が足りないのでしょうか?

 (アイテム選択状態)
⇒別のアイテムを選択する
⇒ListView.SelectedIndexChangedが呼ばれる(選択要素数を確認すると要素数0)
⇒ListView.SelectedIndexChangedが呼ばれる(選択要素数を確認すると要素数1)

SelectedItemsだけでなく、SelectedIndicesの内容も同様です。

304 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 03:43:33 ]
選択解除するタイミングはもっと限定できるんじゃないの
そのタイミングでだけ消せば

305 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 08:46:40 ]
>>303
何も選択してないときの処理を別コントロールにフォーカスが移ったらって条件にすれば?

306 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 09:09:56 ]
PictureBoxかPanelのようなコントロールをウィンドウ上に貼り付ける場合、
一画面でどれくらいの個数までが実用的な範囲なのでしょうか?
イベントをとりたいのでマーカーとして貼り付けたいのですが、
個数が多いとパフォーマンスが落ちそうで…



307 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 09:51:26 ]
>>306
で、君の環境で試したらいくつでパフォーマンスが落ちたんだい?

308 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 11:06:46 ]
Windowsアプリケーションから
非同期で、サービスプログラムの状態を知りたいんだけど、

1.別スレッドで周期的にサービスプログラムの状態を監視し、表示する。

以外に何かよい方法ありませんか?


309 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 11:23:04 ]
そのサービスは既存のもの?

310 名前:308 mailto:sage [2008/05/20(火) 11:54:44 ]
>>309
新しく作成したサービスプログラムなんですが、中身の仕様は変更できません。



311 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 13:51:11 ]
Panelの上にいくつかのボタン等をおいて、
そのPanelの上に同じようにPanelを重ねていって場面ごとに最前面にしたいんだけど、
Panelの大きさって全く同じじゃないとだめなのね。
大きさが違うとPanelの中のPanelって事になっちゃうみたい。
それとBringToFrontで最前面にするよりVisibleですかそうですか。

312 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 13:59:09 ]
よく分からんが、それはTabControlで済ませることができない操作なのか?

313 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:03:50 ]
>>310
相手が固定ならそれないりの方法あると思うけど、
それが何かは場合によるから、普通にポーリングでいいんじゃないかな。
サービスへの通知みたいに取れることを期待している?

314 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:28:44 ]
>>311
試してないけど、ツリーで位置を確認して移動すれば解決する事じゃないの?

315 名前:314 mailto:sage [2008/05/20(火) 14:31:16 ]
>>311
いやわかった。
最前面に置いたPanelが小さいと、下のPanelが見えるって事なのかな
だから最前面以外のVisibleをfalseにしなきゃいけないんだなっていうことを言いたいのかな
だとすればそれは当然。

316 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 13:58:12 ]
>>312
そだよ。でもデザイン的にタブが無い操作って事。

>>315
見えるっていうか、大きいPanelに小さなPanelが乗っかっちゃうと、小さなPanelをVisibleをtrueにしても大きなPanelがfalseなので結局表示されないって事なんだ。
たとえばPanel1とPanel2があって、Panel1に重なって小さなPanel2があったとします。
んで別のところにある二つのボタンでPanel1とPanel2を切り替えるために
private void button1_Click(object sender, EventArgs e)
{
panel1.Visible = true;
panel2.Visible = false;
}

private void button2_Click(object sender, EventArgs e)
{
panel1.Visible = false;
panel2.Visible = true;
}
こんな風に書くじゃないですか。
ところがPanel2はPanel1の中のパネルと判断されて表示されないわけです。
ちなみにPanel2が完全にPanel1に含まれていなくても大きさに関係なくPanel1上のものと判断されてしまうのです。
なので大きさも位置も完全に同じにしないと別々のパネルだと判断されないって事でした。
そして大きさも位置も完全に同じでもPanelをBringToFront()で最前面にしようとしてもダメでした。

317 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 15:58:37 ]
>>316
それこそ>>314で直るはずだろ
今VS起動できないから具体的になんて名前のウインドウだったか忘れたけど
ツリー表示でPanel2がPanel1の子になってるはずだからD&Dして兄弟にしてやればいい

318 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 16:45:12 ]
>>317
そんなツリーがあるんだ!?
従属関係を指定できれば解決する簡単な問題だったので疑問でした。
探してみます!

319 名前:デフォルトの名無しさん [2008/05/21(水) 16:57:26 ]
ドキュメントアウトライン ビューだ!

320 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:11:00 ]
>>319
今ちょうど検索してて見つからなくて困ってたんだけどありがとう!!!
あった!



321 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:23:16 ]
ただ確認できるだけで従属の変更は出来ないのね。
>>317のように親子を兄弟にすると位置自体も変わってしまう。
まあでも確認できるだけでもかなり便利になりました。

322 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 18:33:33 ]
コントロールの親子あるいは包含関係なら変更できるけど?

そもそも、間違ってPanel2をPanel1に入れてる時点で自分に非があるのに
あたかも処理系やIDEが悪いかのような論調で書かれも困る

結論としては、デザイン時にコンテナを意識してないお前が悪い
てか、コンテナ意識しないとAnchorやDock使えんだろ

323 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 19:15:49 ]
↑なに言ってるの?w

324 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 19:22:47 ]
結論としては(キリッ

って事だろ。
何の役にも立たないレス。

325 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:12:34 ]
>>322の言っている意味が分からないような馬鹿が偉そうに書き込まないほうがいいぞ。
どう考えても
>親子を兄弟にすると位置自体も変わってしまう。
という頭の悪い考えに対する返答だろ。

コントロールの位置座標というのはコンテナに対する相対座標なんだから、
親コンテナが変われば当然Form上における絶対座標は変わるに決まってる。
そんなことも理解できない馬鹿はおとなしくWPFアプリケーションで視覚的に
階層構造を指定できるものを使っておけということ。

フォームデザイナに頼りっぱだからそうなる。
コード上で親コンテナ.Controls.Add()で追加していけば思うような構成にするのは極めて容易い

326 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 00:40:50 ]
コントロールの親子あるいは包含関係はどうやって変更するんですか?

327 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:03:26 ]
Controls.Addすれば子になるんだろ
Controls.Removeしてから別のコントロールにAddすればいいんじゃないか

328 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:11:25 ]
変更前親コンテナ.Controls.Remove(子);
変更後親コンテナ.Controls.Add(子);



329 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:17:28 ]
とういうことはPanel1に重ねてPanel2を配置して、
Panel2はFormの子にしたい場合はコードからしか設定できないってことでしょうか??

330 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:32:28 ]
タブコントロールで、タブ部分だけ消したほうが早そうな



331 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:33:19 ]
Panel2をFormに追加してから、サイズ変更でPanel1の内側に持ってけ。

332 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:35:01 ]
>>329
というよりも、最初にPanelを同一の親コンテナの中に重ねて配置したいという時点で、
デザイナで作成するのではなく、最初からコード上でNew Panel()して
それをControlsに追加していくようにすべき。
デザイナ上でそれやろうとすると、親切にもDesigner.cs上のコードは
最前面にあるコンテナ内にコントロールを配置しようとしてくれちゃうから希望通りにならない。

ためしにpanel1とpanel2をForm上に重ねるように配置して、
片方のBackColorをBlackにして、Button1のClickイベントで交互にBringToFrontするように
してみたが、問題なく入れ替わったぞ。お前のやりたいことはまさしくこれのことだと思うが。



333 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:35:39 ]
Windowsアプリケーションで、常に一つのフォームしか表示させなくて、色んなフォームにページ展開する時ってどのように実装しますか?
シングルトンで実装するのが普通なんでしょうか?
それとも1度開いたらHide()で見えなくするだけ?
よろしくお願いします。

334 名前:332 mailto:sage [2008/05/22(木) 01:37:13 ]
>>331
そりゃ盲点だったわ。
ためしにやってみたらそれでも大丈夫っぽいね

335 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:37:38 ]
タブコントロールのAppearanceをFlatButtons、ItemSizeを0,1、SizeModeをFixedにすれば、あら不思議

336 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:43:58 ]
>>330
そんなこと出来るんですかー。

>>331
ドキュメントアウトライン見ながら方向キーで調節したり、
Locateを手打ちしたりして注意しながら配置すれば出来るんですけど、
マウス操作だと親子関係が、ドキュメントアウトラインで親子関係を変えると位置が、それぞれ変わっちゃいますね。
特に後者の挙動は意味不明ですw
せっかくのGUIデザイナなのに感覚的に操作出来ないのは面倒ですね。。

337 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:50:42 ]
>>336
どうしてもデザイナにこだわるならExpressionBlend使ってWPFアプリ作れっての。
あれだとお前のやりたいことが全部感覚的にできるぞ。

あと、

>特に後者の挙動は意味不明ですw
>>325を百回読め。コンテナが変われば位置が変わるってことが理解できない頭なら
プログラミングなんて向いてないからやめておけ。

338 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:51:51 ]
>>332
最前面にあるコンテナの子にしてくれるのは感覚的にも動作的に問題ないけど
ドキュメントアウトラインで親子関係解消すると位置が変わっちゃうのは意味不明だけどね。
他の操作でその位置に出来るのになぜ変わるのかと。

>>335
あら不思議!
ありがとー。

339 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:56:38 ]
>>337
親コンテナが変われば相対座標が変わるって言いたいんだろうけど
それは問題になってないんですぅ。
GUIで親子関係を解消したら新親の座標に変換してくれたほうが直感的です。
しかもマウス操作したら旧親の子になってしまう座標ならなおさらです。

340 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:38:53 ]
>>339
何を言ってるんだか意味不明な気がする。



341 名前:337 mailto:sage [2008/05/22(木) 13:59:41 ]
>>339
いや、まあもう何も言わんからおとなしくWPFで作ったら?
君の言うGUIデザイナを使って「直感的」に作成できるからさ。
ツールに文句つけるわりには、それを解消したツールがあってもそっちを使おうとしないんだねぇ。
WPFとかXAMLの勉強するのは嫌だけどWPF&XAMLの機能を求めているわけだ。
だだをこねている子供にしか見えん。

342 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:05:59 ]
よく論点が違うって言われない?

343 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:25:58 ]
言われない

344 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:27:59 ]
聞く耳持たねえ

345 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:28:40 ]
WPFが直感的だと!?

346 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:33:20 ]
うん

347 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:05:45 ]
WPFはスレ違いだしもう何も言わなくていいですー

348 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:38:28 ]
337みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^

349 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:41:12 ]
348みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^


350 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 19:41:28 ]
どうでもいいけど関係ない話するな



351 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:41:06 ]
349みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^

352 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:47:33 ]
351みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^

353 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 07:08:57 ]
WPFがスレ違いならFormの話もスレ違いだろう

354 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 07:12:31 ]
Expression高いしVSのWPFエディタはうんこだし
WPFは爆死の臭いしかしない

355 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:49:13 ]
C#でDataGridViewから派生したクラスを使いたいんですけど
Form1.cs[デザイン]を開いて
そこにDataGridViewを張り付けて
そのあとに
Form1.Designer.cs

System.Windows.Forms.DataGridView

MyNameSpace.MyDataGridView
に書き換えるとかそういうことをするんですか?
そんなはず無いと思うので正しいやりかたを教えてください。

356 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:52:30 ]
派生させたクラスがツールボックスに出てるだろう。

357 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 09:01:20 ]
>>356
出てますね...
ありがとうございます。


358 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:55:25 ]
すみません、初心者的で申し訳ないのですが、質問させてください。
以下のコードを実行すると、クラスAのセッターを使ってAのプライベート変数に2を代入したいにも関わらず
既定値の0が用いられてしまいます。
警告内容は以下の通りです。
「フィールド 'NAME1.A.x' は割り当てられません。常に既定値 0 を使用します。」

また、付随する質問ですが、void func_A( temp ) { x... }をvoid func_A( temp ) { X... }とすればきちんと2がセットされます。
クラス内であるにも関わらずセッターXを用いる必要があるのはなぜでしょうか。

なお、コンパイル環境はVisual C# Express Editon 2008です。

359 名前:KKK [2008/05/23(金) 13:56:15 ]
こんにちは。

はじめましてRayです。
私は大学4年生ですが、最近は大学は週に一回くらいしか行かないのですが、

就活の準備など、家にいることが多くなりました。

しかし、斜め向かいに住んでいる茨城という若い夫婦が嫌がらせをしてきます。

@近所をうろAしたり、家の窓から私の部屋を覗いてきて、部屋に「○○の本がある」などと近所のほかのオバサンに報告したり、

A布団たたきでものすごい音で布団をいつまでもたたきます。
(体格がいいオバサンなので、すごい音がします;;)

B私が家にいるのを知っていて近所のオバサンと大きな声で悪口を言ってきます
(「Rayが就職なんかできるわけないじゃない!」など・・)

C茨城(夫)は部屋を覗くだけでなく、夜になると咳払いなどをしていつまでも近所をうろついています。

気持ち悪いので、弁護士や市の職員に相談しましたが、なかA証拠が取れなく、裁判まで持ち込めない状況です。

D車のエンジンをいつまでもかけ、うるさくする。

とにかく精神的にも滅入っていて、解決したいのですが、できない状況です。

ほかの近所のオバサンも私が困っているのを見て喜んでいるみたいです。

なんとかしたいので、誰か相談にのってくださぃ。

アドバイス待ってます。


360 名前:358のつづき mailto:sage [2008/05/23(金) 13:56:37 ]
amespace NAME1 {
 class A {
// メンバ
private x; ← ここで警告が出る
// メソッド
public void func_A( temp ) { x... }; ← ここでx=0として計算してしまう
// アクセッサ
public X { get; set; }
}}



361 名前:358のつづき mailto:sage [2008/05/23(金) 13:57:37 ]
using System;
using System.Collections.Generic;



using NAME1

namespace ConsoleApp {
 class Main {
  static void Main(string[] args) {
  // クラスAを配列としてインスタンス化、xに2をセット
  n ;
  A[] arrayA_ = new A[ n ];
  for ( int i = 0; i < n; i++ ) {
   arrayA_[ i ] = new A();
   arrayA_[ i ].X = 2;
  }
  // メソッドの呼び出し
  temp;
  for ( int i = 0; i < n; i++ ) {
   arrayA_[ i ].func_A( temp );
  }
}}}

362 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:58:59 ]
>>360 xの型もXの型もgetアクセサの中身もsetアクセサの中身も書け

363 名前:358 mailto:sage [2008/05/23(金) 14:16:40 ]
private double x;
public double X { get; set; }
です。アクセッサの表記は、.NETのver2かver3でこのように書けるので、それを利用してます。

364 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:27:19 ]
ヘルプなりで「自動実装するプロパティ」調べれ
どうして X が x を知ってる?

365 名前:358 mailto:sage [2008/05/23(金) 14:49:06 ]
ヘルプを読んだ結果、
>自動実装したプロパティでは、属性は使用できません。
>プロパティのバッキング フィールドで属性を使用する必要がある場合は、通常のプロパティを作成します
に関連がありそうだとは思うのですが、意味がよくわかりません・・・。

366 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:56:54 ]
X プロパティは x に対応しないよ。



367 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:58:31 ]
それだと、
private double _X;
みたいなのが内部で自動生成されて
public double X {
get { return _X; }
set { _X = value; }
}

368 名前:358 mailto:sage [2008/05/23(金) 15:03:32 ]
つまり、
class{
 double x;
 double X{get;set;}
}
と書くのは誤りで、
class{
 double x{get;set;}
}
と書けばよいということですか?

369 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:37:57 ]
ファイルの読み書き単位でエンコーディングを指定するのではなく、
プログラム全体でエンコーディングをしているする方法はないですか?

370 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:46:03 ]
>>368
private double x;

public double X { get; set; }
は別物だよ。
xをプロパティとしたいなら
public double X { get{return x;} set{x=value;} }

自動プロパティを使いたいならprivate double x;は消して
public double X { get; set; }だけにして、Xを変数のように使えばいいよ。
ただその場合はprivateではないけどね。



371 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:59:52 ]
>>369
CreateStreamReaderAsShiftJIS/CreateStreamWriterUTF8メソッドでも用意しとけば?

372 名前:デフォルトの名無しさん [2008/05/23(金) 17:04:01 ]
初心者ですが質問させてください。

Webbrowserコンポーネント(Webbrowser1)でgoogleを表示しておいて、
ソフトのTextBox(TextBox1)に検索ワードを入力して、Button(Button1)を押したら、
Webbrowser側に検索ワードが読み込まれて自動で検索するようにしたいんですが、
どのようにすればいいか検討がつきません。

開発環境はVisualstudio2005、言語はC#です。

373 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:07:41 ]
コンポーネントでの表示が必要なの?
httpで通信するってんじゃだめかい?

374 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:10:13 ]
>>372
事前にgoogleを表示しとく意味があるのか?
取り敢えず適当にgoogleで検索して検索結果画面のURL調べれ
あとSystem.Web.HttpUtilityのUrlEncodeとUrlDecode調べれ

375 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:11:44 ]
>>373

webにいろいろと自動入力するシステムを作らないといけなくなりまして。
たとえばブログにあらかじめTextboxに入れておいたIDとパスを入れて自動ログインするとか
そういったものなんですけど、webのフォームに、Textboxから値を入れる方法が知りたくて、
Googleはそのたとえのつもりでした。
http通信?の意味がよくわからないんですが、ソフト内のブラウザ上で表示させる必要はあります。


376 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:13:21 ]
>>374
Googleっていうたとえが悪かったですね。ごめんなさい。
>>375で書いたように、Webサイト上のフォームにソフトのTextBoxで記載したワードを記入するのが目的です。

377 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:27:16 ]
WebRequest を使って WebResponse を取得し、
その内容を反映させては。

378 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:30:01 ]
素直にHTTP POSTしろよ低脳。
こんなの厨房でも出来るぞ

379 名前:デフォルトの名無しさん [2008/05/23(金) 17:39:43 ]
>>377
どのメソッドを使えばいいかわからなかったので、ググってみたらできそうです、ありがとうございます。

>>378
HTTP POSTで検索したらそれらしいのがでてきました。ありがとうございます。

380 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:40:12 ]
おい小学生かもしれねえだろうが



381 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:41:46 ]
>>368
おそらくやりたいことは

public double X { get; private set; }

これだけでいいと思われる。

これでXのセッターはprivateになる。

382 名前:デフォルトの名無しさん [2008/05/23(金) 17:43:52 ]
>>380
そのとおりです小学校3年生です。
バカな質問してすいませんでした。

383 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:46:22 ]
>>380
小学生に失礼だ

384 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:48:58 ]
>>381
自動プロパティのセッタゲッタの片方だけのプロテクションを帰ることは出来ないよ。

385 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:52:20 ]
>>384
いきなりどうしたの?
俺ができてるからそう書き込んでるんだけど。



386 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:54:35 ]
俺もプロパティはほとんど

public Foo Foo{ get; private set; }

だな
普通のプロパティなんてかったるくて書いてられん

387 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:55:26 ]
>>384
知ったか?
それとも何か他に深い意味があるの?

388 名前:358 mailto:sage [2008/05/23(金) 18:08:21 ]
うまく書けるようになりました。
ありがとうございました。

389 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 18:15:11 ]
>>372
まあ、解決したならそれでいいけど、これでいいよ。
private void button1_Click(object sender, EventArgs e)
{
HtmlElement input = webBrowser1.Document.All.GetElementsByName("q")[0];
HtmlElement form = webBrowser1.Document.All.GetElementsByName("f")[0];

input.SetAttribute("Value", textBox1.Text);
form.InvokeMember("submit");
}

>>378
ログイン処理とかだと、ログイン前のセッションクッキー引き回しとか、
JavaScriptによるワンタイムキーの生成とかが必要になると、そのへんは
ブラウザに任せた方がはるかに簡単。

390 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 18:34:21 ]
便乗だけどオンラインゲームの自動ログインはどうやればいいの?
ttp://dobon.net/vb/dotnet/internet/webrequestpost.html
ここを参考にしたけどだめみたいなんだ。
たとえば
ttp://suddenattack.redbanana.jp/
ここに自動ログインするためにはどうしたらいいのかな?



391 名前:デフォルトの名無しさん [2008/05/23(金) 19:21:51 ]
>>389さん、ありがとうございます!
検索してもわからず、困っていたところでした。
("q")と("f")のところにhtmlからそのフォームのnameをもってきたらいいということですか?
やってみます!またできたら報告しますね。

392 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:28:24 ]
Hashtableから値取り出すときにキャストしないでいい方法はない?
面倒くさいんですけどん。

393 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:29:59 ]
VS2005以降ならDictionaryを使う

394 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:31:53 ]
>>393
サンクスです。
こんなのがあったんですね。

395 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:43:16 ]
GenericはC#2.0の最大の目玉じゃないか…

396 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:38:55 ]
>>390
やろうと思えばできる。
IDとパスのINPUTタグのIDを調べ>>389のようにIDとパスを入力し、
こいつらを管轄するフォームでsubmitする。

ヒント:javascriptを実行してからsubmitを行う。

397 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:52:21 ]
windowsアプリなんですが、メインのフォーム内のメソッドで
そのフォームがもってるある型の変数全部の値を一括で変更
する方法はありますか?

おねがいします。

398 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:56:16 ]
リフレクションを使います

399 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:58:34 ]
>>396
javascriptは全然わからないから詰まってます。
submit()を実行すると無限に更新されるみたいなのですが・・・。
htmlソースみるとLoginLeftFormCheck()を呼び出してるみたいなのですが関係ないですかね。

400 名前:390 mailto:sage [2008/05/23(金) 21:04:58 ]
意味も分からずコピペなんですけど、
public Form1()
{
InitializeComponent();
webBrowser1.Url = new Uri("suddenattack.redbanana.jp/index.asp");
}
private void button1_Click(object sender, EventArgs e)
{
HtmlElement id = webBrowser1.Document.All.GetElementsByName("user_id")[0];
HtmlElement pass = webBrowser1.Document.All.GetElementsByName("user_pwd")[0];
id.SetAttribute("Value", "aaaaa");
pass.SetAttribute("Value", "bbbbbb");
}
こんな感じでフォームに文字が入りました。
あとはログインボタン押して、ゲームスタートボタン押すだけなんですが・・・



401 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:05:33 ]
>>396
いやそいつを実行するの。

402 名前:デフォルトの名無しさん [2008/05/23(金) 21:06:25 ]
>>400
ログインボタン、エンターキーおしたらいけないの?

403 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:06:26 ]
>>399
JavaScriptもわからないようならC#とか無理だから諦めろ。
なでしこでもやってろ

404 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:06:59 ]
安価ミス
>>396>>399

405 名前:390 mailto:sage [2008/05/23(金) 21:11:35 ]
>>401
実行するってことはInvokeMember("LoginLeftFormCheck")ってことですかね?

>>402
フォーム上ならエンターキーでもログインできます。

406 名前:401 mailto:sage [2008/05/23(金) 21:28:18 ]
すまん。VS2005についているWebBrowserは詳しくないんだ。
COMコンポーネントのMicrosoft Web Browserコントロールと、Microsoft.mshtmlというライブラリでしか
俺はできないんだ。(メソッドやら何やらがわかりやすい。)
Microsoft.mshtmlは.NetFramework1.0にしかついてこんのだ。
で、このMicrosoft.mshtmlを使ったやり方で説明すると、
・・・・・
Dim id As mshtml.HTMLInputElement = doc.getElementById("ID_user_pwd")
id.value = "id"
Dim pwd As mshtml.HTMLInputElement = doc.getElementById("ID_user_pwd")
pwd.value = "password"
doc.parentWindow.execScript("LoginLeftFormCheck()") ' LoginLeftFormCheck()を実行
pwd.form.submit() ' フォームをsubmit(これはInvokeMemberでできるとおもわれ)

これでログインできる。
ゲームのスタートボタンはFlashであるために、プログラム上で操作する方法があるかもしれないが、
俺は残念ながらわからんかった。
まえ、ガンストの自動ログインツールを作成したときは、画面にブラウザを貼り付けて、
ゲームのスタートボタンが確実に見えるサイズに広げて、APIでマウスを操作するプログラムを書くという
逃げ道でやった。

407 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:52:19 ]
Windowsアプリケーション学習用にC#をやろうと思っています。
Microsoft Visual C# 2008 Express EditionをSDKとSQL Serverつきでインストールしました。
しかし何をどう作っていったらいいかわかりません。
プログラム経験はPHPでWebプログラム(こちらは趣味で3年以上やっていて2ch風掲示板ぐらいのものは作れます)、
あとオブジェクト指向の勉強にJavaを少しいじった程度です。
Javaでは簡単なファイル操作から、オブジェクトの継承や例外処理など基本的な勉強しかしていません。
Webプログラムはイメージ的にわかるので、ASP.NETあたりはなんとか理解できると思うのですが、
Windowsアプリケーションとなると右も左もわかりません。
まずは何をやったらいいのでしょうか?

408 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:54:25 ]
何をやりたいの?

409 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:55:56 ]
>>407
スレチこっちで質問しなおせ
ttp://pc11.2ch.net/test/read.cgi/tech/1160209713/
ttp://pc11.2ch.net/test/read.cgi/tech/1208248879/

410 名前:407 mailto:sage [2008/05/23(金) 22:04:58 ]
>>408
とりあえずWebアプリケーションでいうチャットやカウンターのような位置づけなものを作ってみたいです。
(ようするに簡単なものです)
おそらくメモ帳のようなものになるのでしょうか?
ペイントのようなものも作ってみたいですが、メモ帳に比べると難易度はあがりそうですね。
簡単なテーブルゲームなんかも作ってみたいですが、アルゴリズムの勉強はしてないので少し厳しそうです。

>>409
了解です。そちらで質問しなおします。



411 名前:390 mailto:sage [2008/05/23(金) 22:15:45 ]
>>406
どうもありがとうございます。
webBrowser1.Url = new Uri("javascript:" + Uri.EscapeDataString("LoginLeftFormCheck();"));
で無理やり実行してみたらfalseが返ってきちゃいました。
マウス操作も考えたんですけど、ブラウザやマウスが勝手に動く様が見えちゃいますよね。。

412 名前:397 mailto:sage [2008/05/23(金) 22:32:25 ]
すいません。リフレクションを使っても取り出せるのは
型情報でインタンスの値は取り出せないのではないでしょうか?

もう少しキーワード教えてください。

413 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:43:15 ]
型情報からフィールド一覧取れるだろ
FieldInfoから値取得できる

414 名前:401 mailto:sage [2008/05/23(金) 22:51:20 ]
>>406
いや、LoginLeftFormCheckは単に実行するだけでOK。
submitすりゃ、ログインされる。
javascriptは多分InvokeScriptでできない?

マウスは勝手に動くようにみえちゃう。これは仕方ない。

415 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:23:57 ]
>>411
>>409

416 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:34:10 ]
ここはなにを話すスレ?

417 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:36:31 ]
C#プログラマの雑談スレ


418 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:44:16 ]
>>1
>(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

C#プログラマの雑談スレなんて限定的には書いてないけど?
しかもスレタイは「相談室」だぞ

419 名前:397 mailto:sage [2008/05/23(金) 23:44:32 ]
FieldInfoのGetValue,SetValueでできました。
ありがとうございます。

420 名前:デフォルトの名無しさん [2008/05/23(金) 23:55:28 ]
JRq8rZjk7c

鳥解析4649



421 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:04:49 ]
私怨乙

422 名前:390 mailto:sage [2008/05/24(土) 01:09:12 ]
>>414
ありがとうございました。
ゲームスタートのFlashもjavascriptを呼んでいましたので直接呼んだら開始できました!

423 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:53:52 ]
>>416
C#、.NET(ただし、C#を使っている前提)に関することで、
主にふらっとだとアレな話題や雑談とかのスレ
と、俺は解釈してる

ここで質問すること自体は悪いとは思わないが、
ふらっとの方がより適切だとも思ってる

424 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:07:26 ]
ふらっとは初心者用だから。
回答者も初心者スレにいなかったら結局このスレに質問しに来るのでは?
たらい回しはいかんよ。

425 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:09:08 ]
俺はふらっとが初心者用でこっちが中級者の集まりだと思っていた。
こっちでの質問はOOPとか言語仕様なりの高度な質問になる感じ

426 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:11:33 ]
>>425
元の趣旨はそうだが実情は逆


427 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:44:53 ]
そんなの主観的なんだからどっちだっていいだろ。
質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。
ただそれだけ。

428 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:57:34 ]
複数あるのは害でしかない
みんなわかってるはずだ

429 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 05:05:02 ]
>>424
心配無用。
どうせ皆も両方見てるんでしょ。


430 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 05:42:36 ]
どっちか削るとしたら明らかに初心者用だよな。
で、もし削ったとしたら初心者隔離スレも欲しくなるよな。
ここまで言えばわかるよな。



431 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:55:50 ]
ぬるぽ

432 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 12:40:47 ]
>そんなの主観的なんだからどっちだっていいだろ。
>質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。

えてしてその主観が間違ってるから問題になるんだが。


433 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:28:08 ]
オレが全部答えてやんよ
だからもう喧嘩するな

434 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:44:12 ]
整数5ずつにしたいのですが……うまく言えないのですが、例えば、
96なら95、98なら100、53なら55、42なら40
と言うふうにしたいのですが、どうすればいいでしょうか?

435 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:46:22 ]
C#で自作した外部アプリケーションを呼び出したいのですが、
Process process = new Process() ;
process.StartInfo.FileName = "hoge.exe" ;
process.Start() ;
こんな風に実行することが出来るようなのですが、
外部アプリケーション側に文字列を複数与えたいのです。
その場合呼び出す側と呼び出される側はどのような準備をすればいいのでしょうか?

436 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:49:25 ]
>>434
問題を定義しなおしてから来い。
>>435
Process.Start(hoge.exe,"arbitrary string");

437 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:52:06 ]
俺は>>434の言いたい事がわかったが次にどう書いてくるか楽しみなので伏せておく。

438 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:53:32 ]
>>434
int number;

number = 適当な数値;

if (number % 10 < 4) number = number - (number % 10);
else number = number + 10 - (number % 10);

適当に今思いついたがこんなんで良いか?

439 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:58:08 ]
あ、5ずつか普通に四捨五入してるわこれ

440 名前:435 mailto:sage [2008/05/24(土) 18:00:09 ]
>>436
文字列を複数渡したいのですが
Process.Startの第二引数はstring[]でもいいのですか?

それと受け取る側はどうすればいいのでしょう?



441 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:01:03 ]
>>438
ありがとうございます。
さっそく導入してみたのですが、これだとただの10ずつになってしまうのですが……。

っと書いていたら439の返事がきました。
ありがとうございます。
こういうのも四捨五入というのですか……。
勉強になりました。

442 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:02:00 ]
>>440
無理。記号を決めてそれを受け取る側で改行と見なすくらいしかない

443 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:02:40 ]
>>438の使って
if (number % 10 < 5) number = number - (number % 10)+5;
else number = number + 10 - (number % 10);
でいいんじゃね?

444 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:02:43 ]
あ、ちょっといじったらできました。
もうちょっとテストして、また報告させていただきます。
本当にありがとうございました。

445 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:04:33 ]
連投失礼します。
>>443
ありがとうございます。
それでいけそうです。
これまたもう少しテストしてきます。

446 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:06:56 ]
こうでしょ。
int mod = x % 5;
x += mod > 2 ? 5 - mod : -mod;


447 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:08:21 ]
>>442
string一つだけなのですか。

受け取る側はどうすればいいですか?
受け取る側はコンソールではなくフォームアプリケーションです。

448 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:17:35 ]
>>447
スペース区切りとかで渡して、
splitで分割するなりすればいいんじゃね?

449 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:19:37 ]
>>446
ありがとうございます。
>>443さんの方法だと、きりのいい数字だとちょっとおかしくなるようでした。
446さんの方法は私程度にはどういう処理をしているのかさっぱりなのですが、
問題なく使えます。

みなさん本当にありがとうございました。

450 名前:435 mailto:sage [2008/05/24(土) 18:30:42 ]
Environment.CommandLineで受け取るか、
コンソールと変わらずにエントリポイントから受け取ればいいんですね。




451 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:40:20 ]
>>431
AutoNullpoOudaki gattu = new AutoNullpoOudaki();
gattu.Execute();

452 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:11:50 ]
文字列から動的にExpressionTreeやFuncを得ることって出きるん?
ttp://ufcpp.net/study/csharp/sp3_expressionsample.html
ここで書いてあるような子としてみたかったんだが、CodeDom.GetExpressionFromとか見あたらず、いろいろググってもそれらしいのにたどり着けず・・・
CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば出来無くないんだけれどもう少しまともな方法で・・・


453 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:31:07 ]
>>452
そのページにある「ソース一式」のところからソース落して、
中身の「MyMath\CodeDom.cs」の中にその GetExpressionFrom の実体がある。

454 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:32:55 ]
ちなみに、そのソースの GetExpressionFrom はまさに、その
「CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば」
をやってるだけ。

もう少しまともな方法、確かに欲しいよね。

455 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:47:03 ]
>>453
さんくすこ。
てっきり.NET3.5以降で追加されたのかと思ってた・・・orz

CocoaのようなKVCとかやるためにリフレクションからコード生成→lambdaにしてそれなりに高速にアクセスみたいなことしたかったんだが・・・
場合によって、無理やりコンパイルでlambda変換するようにしようかな・・・
あぁ書いてて思ったが、式ツリー手動でいじくればいいのか。よくわからんがやってみるノシ

456 名前:デフォルトの名無しさん [2008/05/24(土) 20:04:19 ]
Compact Frameworkでやっててもこっちで大丈夫ですか?
もし適切なところが他にありましたら誘導お願いします(´・ω・`)

ボタン押したらwavファイルをプログラムに埋め込んで、ボタン押されたらそれを再生させたいんですが、上手く再生されません。
hi.wavが再生させたいファイルです。

private void button1_Click(object sender, EventArgs e)
{
   System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
   string file = a.GetName().Name + ".hi.wav";
   System.IO.Stream s = a.GetManifestResourceStream(file);
   SoundPlayer player = new SoundPlayer(s);
   player.Play();
}

サンプルを見ながらこのようなソースを組んで、
プロジェクトのプロパティのリソースのところにhi.wavを追加して、
Persistenceを「.resxに埋め込まれました」に設定しました。
しかし、動かしてみると標準のビープ音しかなりません。
デバッガで見ると、sがnullのままのようで、ファイルを読み込んでいないようです。
埋め込み方が間違ってるんでしょうか・・・。
よろしくお願いします(´・ω・`)

457 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:26:10 ]
>>456

SoundPlayer player = new SoundPlayer("path");
player.PlaySync();



458 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:37:51 ]
メッセージとしてスウェーデン語文字を表示させたいのですが、
なぜか読み込んでくれずにエラーが起きてしまいます
どうしたらよいのでしょうか

459 名前:456 mailto:sage [2008/05/24(土) 20:42:51 ]
>>457
ありがとうございます。実際にwavファイル置いてパス指定して音を鳴らすことは問題なくできるんですが、
埋め込めたら良いなぁ・・・ってことなんです。
もしかして、埋め込みは無理ってことですか?

460 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:42:50 ]
>>452
これがクエリ式のパーサ持ってたと思う。使い回せるかも。
ttp://www.codeplex.com/nlinq

使い方は"poorman's linq"でぐぐる。



461 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:45:46 ]
>>458
取りあえずエラーとやらに付随してるメッセージを読み上げるといいよ

462 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:46:10 ]
>>458
OSにスウェーデン語パックを導入しる

463 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:48:49 ]
>>462
今からググってきます。ありがとうございました

464 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:09:12 ]
レベルの低い質問で申し訳ありません。
出力の種類を「クラスライブラリ」としてあるプロジェクトを、スタートアッププロジェクトに設定した他のプロジェクトに参照させるにはどうすればよいのでしょうか。
そのままusingしようとしても「名前空間がない」と言われてしまいます。

465 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:12:54 ]
>>464
ソリューションエクスプローラで参照したいプロジェクトを右クリックして
参照の追加 → プロジェクト

466 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:16:17 ]
>>434
今更だけど、要は「5の倍数への丸め」、もしくは「丸め幅5での丸め」でしょ?
個人的には汎用的なこれを使いたいところ

var y = (int)Math.Round((decimal)x / n) * n;

まあ、整数型に限定してもこんなところじゃないか

var y = (x + (n / 2)) / n * n;

因みに、後者はaway from zeroだが、前者はRound()のmode指定で選択可
対象が整数値で、かつ丸め幅が奇数ならどちらでも同じ

467 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:37:56 ]
>>465
ありがとうございます。

468 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:54:56 ]
>>456
もしかしたら、Compact Frameworkじゃ違うかもしれないけど
多分、その方法はファイルをresxに埋め込まない古いやり方。

wavファイルをプロジェクトに追加して
ビルドアクションを「埋め込まれたリソース」にすれば、
その方法で鳴る筈。

んで、2005以降は、リソースエディタを使ってresxに埋め込んで、
"HI"がリソース名になったとしたら、

System.IO.Stream s = Properties.Resources.HI;
SoundPlayer player = new SoundPlayer(s);
player.Play();

で一応鳴る。

でも、ストリームのWAVEデーターの再生は、
GC絡みで問題があるらしい。
詳しくはこれを。

ttp://dobon.net/vb/dotnet/programing/playembeddedwave.html

469 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:05:15 ]
ブロック崩しを作ったのですが、ボールが宙に浮いているときにスペースキーを押すと、
ボールが画面外に飛び出してしまうのです。どうにかなりませんか?
ちなみにソースはこれ

www.borujoa.org/upload/source/upload18960.txt

470 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:24:40 ]
ソースを解析したうえでデバッグしてくれと。



471 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:27:03 ]
>>469
ソース見て吹いたw

472 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:31:36 ]
>>469
こういうifの書き方好きなの?


473 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:31:59 ]
ってそもそもスレ違いじゃん

474 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:32:51 ]
何でもう消えてるんだよ。ちょっと見てみたかった

475 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:56:20 ]
キャッシュ漁ったら見つけた


476 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:59:51 ]
型に格納できる値の最大値、最小値を返す関数はありますか?
例えば、unsigned intなら0か4294967295を返せる、といったような。
変数の型の範囲を超えるような値が格納されそうになった場合、エラーを出すような関数を作ろうと思っているので。

477 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:03:33 ]
MaxValue/MinValueじゃ足りんのか?

478 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:19:23 ]
そんなの、泣けりゃじぶんで定義して返せよ

479 名前:デフォルトの名無しさん [2008/05/25(日) 00:24:16 ]
LL言語のWWW::Mechanize的なのを探してます。
C#や.NET Framework向けのwebスクレイピングライブラリはないですか?
検索してたのですが、なかなか見つからないや・・・

480 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:24:27 ]
スレ違い



481 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:24:56 ]
>>478
いやいや、476はMaxValue/MinValueを知った上でそういう関数が欲しいんじゃなくて、
ただ単に MaxValue/MinValueの存在を知らないだけじゃないかと。


482 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:27:41 ]
関数はまあ見逃すとしてもunsigned intなんて言ってる時点でスレ違いである事に気付こうな


483 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:28:51 ]
>>479
MS は文法のゆるい HTML を機械処理するのはあまり好きじゃないみたい。

HTML2XHTML みたいなものを通して文法の正しい XML にした上で、
XmlReader やら LINQ to XML でアクセスするのがいいかと。
↓でそういうことやってるんだけど、
d.hatena.ne.jp/uesama99/20080219/1203394007
HTML2XHTML が微妙臭い。

484 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:29:53 ]
>>482
しっかり読んでなかったw

それはちゃんと、「C# は C/C++ とは違いますよ」誘導してやろうよ。

485 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:52:32 ]
>>477
ありがとうございます。
>>481
その通りです。低レベルすぎてすみません。
>>482
C#ではUInt32って書くんですね。ありがとうございます、勉強になりました。

486 名前:デフォルトの名無しさん [2008/05/25(日) 01:45:22 ]
>>483
クッキーとか面倒なところを良きにはからってくれるのはないっぽいですね。

LLと組み合わせるしかないか・・・
GUI楽したいので.NET使いたかったけど、うまくいくかなあ

とりあえうずありがとう。
いろいろ試してみます

487 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 07:57:54 ]
2005のPropertyGridについて質問
プロパティタブをいくつか追加したりしてるんだが
ボタンに使われる画像の色が PropertyTab.Bitmap で retuen した Format32bppArgb の画像と微妙に違う
見た感じは大体同じなんだが、実際のRGBを調べるとほんの少しずれてたりする
何か色数の制限があるのなら、それに合わせた画像にするんだけど分かる人いる?

488 名前:456 mailto:sage [2008/05/25(日) 08:59:21 ]
>>468
ありがとうございます。
ビルドアクションを「埋め込まれたリソース」には一応変更していたんですが、鳴りませんでした。
・・・とおもったら、hi.wavが(.resxに埋め込む操作したとき)Resourceフォルダの中に入ったままビルドアクションを変更していたので、
常識的に考えて鳴りませんね。プロジェクトのディレクトリ直下に移して無事鳴りました。

あと、
System.IO.Stream s = Properties.Resources.HI;
SoundPlayer player = new SoundPlayer(s);
player.Play();
も、そのサイトを見つけたときにやってみたんですが、
CompactだとProperties.Resources.hiがstreamじゃなくてbyte[]を返してくるんで使えませんでした。
・・・って思ってたんですが、
byte[] hibyte = Properties.Resources.hi;
MemoryStream s = new MemoryStream(hibyte);
player.PlaySync();
すればすむ話ですねo. . ...rz

昨日の数時間は何だったんだ・・・
1日置くと急に分かったりするもんですね(´・ω・`)
本当にありがとうございました。






489 名前:456 mailto:sage [2008/05/25(日) 09:03:19 ]
byte[] hibyte = Properties.Resources.hi;
MemoryStream s = new MemoryStream(hibyte);
SoundPlayer player = new SoundPlayer(s);
player.PlaySync();

の誤りです。すいません。

あと、>>456ではPlay()使ってますが、
特に非同期再生が必要なわけではないので、GC絡みのを回避するためにもPlaySync()を使おうと思います。


490 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:27:09 ]
質問です
ネットの初心者向けサイトを見ながらC#をやっていたんですがそろそろきつくなってきました
とくにデリゲートをイベントハンドラとして実装するところと、イテレータがよくわかりません
初心者から中級者にレベルアップするために買うべき本を教えてください



491 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:11:02 ]
C#用のDXライブラリと言うものがあったので早速使ってみたのですが、エラーが出ました。

空のプロジェクトに参照をDLLを追加し、Class.csファイルを作り、メインメソッドに
DxLibrary.DxLib_Init();
と書いただけなのですが、
DLL 'DxLibDll.dll' を読み込めません: 指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x8007007E)
と出てしまいます。

DLLはあらゆる場所に配置して試したのですが、
やはり同じようにエラーがでます。
何か特別な書き方が必要なのでしょうか?

492 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:17:45 ]
DXライブラリの公式サイトで提供されてる方のC#用DXライブラリを使え
使い方も丁寧に書かれてる

493 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:19:29 ]
>>492
ありがとうございます。

いつのまにか出てたのですか!?
なぜエラーが出たのかは未だ不明ですが、早速使ってみたいと思います。

494 名前:デフォルトの名無しさん [2008/05/26(月) 15:17:26 ]
質問です。
2つのスレッドでそれぞれフォームを作成し表示します。
このとき、これらフォームの表示順位(重なり)を
コントロールすることは可能でしょうか?

なんか、デバッカ上とSetup後のプログラムで表示順がことなって
メッセージボックスが隠れたりする・・

495 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:06:52 ]
構造体の中で1次元配列メンバを持つには
struct A{
public fixed double b[123];
};
でいけますが、
構造体の中で2次元配列メンバを持たせるために
struct A{
public fixed double b[123][234];
};
などとやってもエラーになります。
構造体の中で2次元配列メンバを持たせることは可能でしょうか?

496 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:10:31 ]
494です。自己レスします。
とりあえず以下HPを参考にし、隠れていたダイアログが表示されるようになりました。(暫定対応ですが・・)
www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34347&forum=7&start=0
端的に言うと、複数のアプリをダブルクリックしたときと同じで、
後から立ち上げた方が優先されて表示される。のと同じみたいです。

お騒がせしました。

497 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:17:20 ]
>>495
fixedである以上は無理

498 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:17:56 ]
質問です。
クラスの配列をインスタンス化するのにforを使って次のようにやってるんですが、
もしもっとスタンダードな方法があったら教えてください。
for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。

classA{}

A[] a = new A[n]
for(int i = 0; i < n; i++){
a[i] = new A();
}

499 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:20:50 ]
狂っているその感覚を修正する事をお勧めします。


500 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:21:08 ]
それで十分スタンダード

> for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。
この感覚を何とかしたほうがいい




501 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:23:51 ]
もしかして
A[] a = new A[n] ← classA型の変数を宣言
a[i] = new A(); ← 実際に代入
つまり、for文の中では代入行為しかやってないから消えない、ということですか?

502 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:29:29 ]
GCのアルゴリズムを理解した方がいいよ。

GCってのは「参照できる限りは消えない」

例えばnが1なら、forを抜けても a[0]を参照できるでしょ?
で、参照できるので消えない。

503 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:34:42 ]
了解しました。勉強します。

504 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:18:27 ]
というかスコープを勉強したほうがいいだろ

505 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:20:45 ]
スコープは割と正しく理解出来てるような発言に見えるけど?

506 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:30:39 ]
GCとは全く関係ないだろ。
スコープの話をしてると思うんだが。

507 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:26:57 ]
コンストラクタでフィールドにインスタンスを代入したら不自然か

508 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:14:09 ]
なんでGCが出てきたんだw


509 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:16:05 ]
↑遅れてきたアホ


510 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:36:55 ]
確かにマオは四川省だったから ヤバスwww



511 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:37:37 ]
スマソ、誤爆った

512 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:41:06 ]
newしたものはアクセスできるなら消えない

513 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:18:08 ]
>>505
できてないできてない。

514 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:46:13 ]
.NETのGCはスコープより早く働くことがあるから要注意なんだよね。たとえば
static void Main() {
 Hoge hoge = new Hoge();
  hoge.Foo();    // hogeが参照されるのはここが最後
  // 時間のかかる処理
}
hogeがまだスコープ内にあるにもかかわらず、時間のかかる処理の最中にGCされることがある。


515 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:50:36 ]
↑あほ?wwwwww

516 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:53:20 ]
そんなものに注意は不要


517 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:00:18 ]
ttp://dobon.net/vb/dotnet/process/checkprevinstance.html
ここの真ん中くらいの「補足:ニュースグループ・・・」あたりにその例が出てる。
KeepALiveを使ってる箇所。

518 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:14:44 ]
これもスコープ終了以前にGCされて落ちる例だね。

「ふらっとC#,C♯,C#(初心者用) Part22」
ttp://pc11.2ch.net/test/read.cgi/tech/1197802312/850-877

>876 名前: 875 [sage] 投稿日: 2008/01/08(火) 00:46:17
>>850
>あーもしかしてと思ってと思って>>875のコードから
>GC.KeepAlive(func); 抜いたら確かにAccessViolationExceptionおきるね。
>言ってるのはこれのことじゃろか。

>P/Invokeにデリゲートを渡す場合、そのデリゲートの寿命管理は.NET側の責任。
>実は元のるびま記事にも書いてある。
>ttp://jp.rubyist.net/magazine/?0021-RubyWithCSharp#fm05

519 名前:498 mailto:sage [2008/05/27(火) 01:56:25 ]
もしかして>>501の理解も間違いだらけなんでしょうか?
もう少し詳しく教えていただけませんか。

520 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 02:21:58 ]
>>498はGCと関係ないよ。
厳密には関係なくないとしてあえて言うと、
new A[n]したオブジェクトはA[] aの寿命(参照が外れるまで)生きてる。



521 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 05:51:20 ]
初歩的なことだとうじゃうじゃ煽りレスがついたりするのに
ちょっと難しい質問だとなかったかのようにスルーするお前らワロスw

522 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:25:46 ]
>>521
最近はROM主体だが、お前の発言が一番醜く見える。
そんなに無視されたのがくやしいのか? ちなみにどの質問なのか示してみ。

523 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:56:45 ]
どこが難しいの?直前のネタはフラットでもスルーだろ・・・C#関係ないし

524 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:04:01 ]
>>518
それはスコープが終了するとGCされるから、プログラマの責任でスコープを終了させんな、って話だ。

525 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:12:10 ]
>>522
わざわざROM主体とか前置きしないとレスできないのかよw

526 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:14:26 ]
ROM主体と言うのを何か言い訳に使ってるなら
>>525のレスは理解出来るが、別に言い訳に使ってないじゃん
まあ、無駄な前置きではあるけど

527 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:40:12 ]
>>526
まあ、第三者を装ってるあたりはみっともないな

528 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 10:23:17 ]
>>524
それはるびまの記事の話だろう。
あのスレの>>875はこんなコード。GC.KeepAliveを抜いたらクラッシュする。

static void Main(string[] args)
{
VALUE state = 0;
Ruby.ruby_init();
const string funcdef =
"def foo\n" +
"s=\"FOO\"+nil\n"+
"end";
Ruby.rb_eval_string_protect(funcdef, ref state);
VALUE hoge = Ruby.rb_intern("hoge");
Ruby.CallbackArg0 func = arg => Ruby.rb_funcall(Ruby.Qnil, hoge, 0, 0);
VALUE result = Ruby.rb_protect(func, Ruby.Qnil, ref state);
GC.KeepAlive(func);
}

529 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:20:13 ]
アンマネージな世界に渡したデリゲートを安全に保持しとくには
アンマネージ側で不要になるまでGC対象にならないようにしとかなきゃならない。

てだけの話?


530 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:41:36 ]
>>529
そういうこと。
他にも、インライン展開されたコンストラクタが完了する前にファイナライザが実行されることすらあるよ。
この場合もアンマネージな世界のハンドルの早すぎる解放であぼんする場合がある。



531 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:44:19 ]
>>529
9割9分そういう理解でOK。>>514もアンマネージなmutexやロックのためのファイルを
開いたままにする場合などに影響が出る。
アンマネージが関係しないケースはまれなのだが、なぜかそのレアケースが、
MSDNに載ってたりする。サンプルソースは2種類あるが最初のほう。
msdn.microsoft.com/ja-jp/library/system.gc.keepalive(VS.80).aspx

532 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 14:44:45 ]
非同期ゲリゲートの動きを止めたいときはどうすればいいですか?

533 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:07:42 ]
>>532
フラグやEventを使ってスレッド自身にそうさせるのが基本。

534 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:06:12 ]
関係ない話題を知ったかでひけらかすより質問に的確に答えてあげたら?

535 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:10:55 ]
いったい何の話だ?

536 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:12:20 ]
すっげーすぐにレス来たww
お前が関係ない話してレスが流れたんだろ。
自分で見返せ。

537 名前:535 mailto:sage [2008/05/27(火) 16:19:20 ]
>>536
えーと、俺はこのスレには初めて書いたものだが
流れがわからんからアンカーつけてくれないか?
どの質問の話かわからないから、答えようが無いわ。

538 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:22:12 ]
>>531
そこのサンプル例1の解説が不正確で、プロパティの取得処理が
時間のかかる処理のためデストラクタが先に動いてしまうと読めるがそれは誤り。
もしそうであれば.NETのGCなんて安心して使えない。
それはデストラクタの使い方に重大な欠陥があるために発生する。
具体的にはExampleクラスのデストラクタで他のクラス、
この場合hashValueが参照を持つArrayクラスの後処理を書いたらいかんということ。
マネージドだけの場合は基本的にKeepAliveのことは考えなくてよい。


539 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:57:12 ]
デストラクタが呼ばれるときには、既にメンバは解放された後なんだっけ?

540 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:11:04 ]
微妙に違う。
ファイナライズメソッドの実行順序には何の保証もないという話。

だと思うけどリンク先見てないから確かなことは分からん。



541 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:11:27 ]
>>539
メンバに参照型を持つ場合でも、オブジェクトとして独立してるので
デストラクタが動くタイミングやメモリが回収されるタイミングは不順。
順番が必要な場合はDispose(true)のパターンを使う。

542 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:13:17 ]
あいや、ずっと前に読んだことあるはずでかすかな記憶によると
解放された後っていうか自分で解放してんじねーかよw
って話だったかも…


543 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:48:04 ]
>>537
半年ROMれ。

544 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:08:24 ]
>>543
それはない

545 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:47:37 ]
一匹キティが沸いてんな・・・フラットじゃないのに

546 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 21:16:53 ]
フラット!フラット!!

547 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:24:52 ]
質問です。

フォームを2つ使うアプリを作っています。
メニューはメイン側にはありますが、サブ側は何もありません。

で、サブ側にフォーカスがある時に、メイン側のメニューのショートカットを叩いても、
フォーカスがサブ側にあるため、イベントが発動してくれません。
出来ればこのショートカットを共有したいと思っています。

サブ側でもOnKeyDownなんかで同じ関数を呼ぶようにすれば可能といえば可能ですけれど、
あまりにも美しくないなと思ってます。何か上手い方法は無いでしょうか?

548 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:38:50 ]
ほかのウィンドウのイベントが別のウィンドウのショートカットをたたくというのは美しくないだろ。
ルートのフォームまでで処理されなかったイベントがアプリケーションのハンドルで処理されるというのが正しい形だと思う。

549 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:47:27 ]
サブフォームでメインのOnKeyDown呼べばいいじゃん

550 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:50:05 ]
返信ありがとうございます。

>>548
そもそもメインのフォームでイベントを処理している、ってのがおかしいってことですかね?
メインにしろサブにしろ、フォームはイベントを発行するだけで、
その実際の処理はアプリケーション級のオブジェクトがハンドルするわけですか。



551 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 07:35:33 ]
MDIにしる

552 名前:デフォルトの名無しさん [2008/05/28(水) 11:10:54 ]
2重起動を防いで、後から起動された方に渡されたコマンドライン引数を
最初に起動された方に渡したいです。
ttp://dobon.net/vb/dotnet/process/checkprevinstance.html
ここにVB.NETでのやり方が書いてあり、C#でも似たようなことは出来ると思ったんですが
Microsoft.VisualBasic.ApplicationServices
これが存在しないエラーというが発生しました。
C#だと別のプロセスにデータを渡したりって事が無理なんでしょうか?

553 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:20:52 ]
参照の追加

554 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:21:18 ]
それでやるなら該当のdll参照すれ

555 名前:デフォルトの名無しさん [2008/05/28(水) 11:31:31 ]
>>553
>>554
参照追加したらありました。
たんにusingを記述するだけじゃダメだったんですね。
これでなんとかなりそうです。
ありがとうございました。

556 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:37:44 ]
ttp://blogs.dion.ne.jp/anis7742/archives/6905607.html
ここでも聞いてるやついるな。
当たり前すぎて書かないからなー、普通。

557 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:13:09 ]
なんつう偉そうなコメントだw

558 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:16:03 ]
なぜSystem.Arrayクラスから派生クラスを作れないんですか?

559 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:17:31 ]
CLR的に配列は特別なオブジェクトだから

560 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:55:06 ]
System.Arrayクラスから派生クラスが作れると何の不都合があるんですか?



561 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:15:37 ]
CLRべったりの低レベルで特殊な実装になってるから派生したところでどうせ何もできないよ
っていうかSystem.Arrayなんかそんなによく使うか?
IList使えよ

562 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:20:42 ]
CLR自体、StringとかArrayとか、その内部構造自体に
依存した最適化がかかってるからだ、
ってどっかにあった希ガス。

563 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:14:13 ]
C++だとコンストラクタは出来るだけ初期化のみにした方がいいけど、
C#では初期化以外にもメソッド呼び出したり処理を始めちゃってもいいの?

564 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:15:32 ]
いいよ

565 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:30:20 ]
いかんよ


566 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:51:19 ]
C++でコンストラクタでは継承先でオーバーライドされる仮想関数は呼べないんだったっけ
C#では出来るよ

567 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:03:33 ]
>>563
してもいいけど、内容によっては立ち上がりが異常に時間がかかるプログラムになる。
その場合、最小限の初期化コンストラクタとクラス初期化メソッドを作る場合もある。

568 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:53:48 ]
visual studioみたいなGUIのソフト作りたいんですけど
そのためのサンプルとか無いでしょうか?
具体的には
フォームにメニューがいくつかあって
ツールボックスがあって
左側にはエクスプローラ的な表示があって
下側にはテキストのログウィンドウがあって
残りの領域にはMDIの子フォームを生成するようなGUIです。
いかがでしょうか。


569 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:01:25 ]
Visual StudioというGUIのサンプルがそこにあるではないか。


570 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:09:14 ]
Visual Studio のドッキングを自前でがんばったらマジで死ねるなw



571 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:14:20 ]
Visual Studio以上の物ができたら教えてね
試してあげるから

572 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 17:24:15 ]
DockPanelSuiteマジオススメ

573 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:41:08 ]
MonoDevelopのソースじゃ参考にならんか…

574 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:43:22 ]
>>572
すげーなこれw

575 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:49:33 ]
>>572
凄いが、これを駆使したプログラムを少人数で作る気になれない。

576 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 20:04:01 ]
ttp://www.codeplex.com/sdock
made in Japan!

577 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:52:40 ]
WinFormsか・・・
WPF版がほしい。

578 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 22:24:21 ]
>>577
お前はこっち池カス

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

579 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 05:22:08 ]
C#からWin32APIを使って子プロセスを起動し、
Win32APIのCreatePipe, WriteFile, ReadFileを用いてプロセス間通信をしようとしています

このとき、立ち上げた子プロセスはコマンドを標準入力から読み込みんで処理をし、
結果を標準出力へコマンドごとに出力し、入力にEOFが来たら終了、みたいなプログラムです

ここで、子プロセスがEOFを認識してくれず、子プロセスが終了してくれません
なにかいい方法があるのでしょうか?
それともWin32APIの質問ということでよその板の方がいいでしょうか?

やっていること:
ハンドルを用意
親プロセスが無名パイプを作成する
パイプの一端のハンドルAを継承可能にする
STARTUPINFO構造体のhStdInputに継承可能にしたパイプのハンドルAを指定
CreateProcess()
継承可能にしたパイプのハンドルAを閉じる
パイプの閉じていない方のハンドルBにWriteFile()
ハンドルBを閉じる ←ここで子プロセスに終了してもらいたい

よろしくお願いします



580 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:02:32 ]
そもそもWin32API使う意味がいったいどこに?



581 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:08:55 ]
C++でパイプを使った経験があったのでパイプをやろうとして、
C#でパイプをやるためにWin32APIを使うことにしました

582 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:18:59 ]
ProcessStartInfo.RedirectStandardInput
Process.StandardInput
この辺使う

583 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:59:47 ]
なるほど
他プロセスの標準入出力を通した通信は明示的なパイプ以外に用意されていたのですね
自分で調べてた限りでは見つかってなかった情報なのでとても助かりました
試してみます
ありがとうございました

584 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 10:37:20 ]
string str = File.GetLastWriteTime(Path).ToString();
このようにファイルの最終更新時間を取得すると、
そのファイルのプロセスが使用中のままになるのですが、
CloseやDisposeのようにすぐに開放させるにはどうすればいいのでしょうか?

585 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 11:06:44 ]
ならんが

586 名前:584 mailto:sage [2008/05/30(金) 11:10:07 ]
すみません。
File.GetLastWriteTimeのせいじゃありませんでした。
File.GetLastWriteTimeタンごめんんささい。

587 名前:File.GetLast mailto:sage [2008/05/30(金) 22:49:58 ]
んもー


588 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:36:30 ]
何言ってんだお前らは?釣りか?
|  問  1
|(ア) (イ) (ウ) (エ) (オ)
|D D D D D
|C C C C C
|B B B B B
|A A A A A
|@ @ @ @ @


589 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:37:34 ]
誤爆りました。スマソ

590 名前:579 mailto:sage [2008/05/31(土) 05:59:48 ]
アドバイスいただけた方法でうまくいったので(ありがとうございます)報告します
ちょっとはまった点としては、
改行コードをWriteしてもフラッシュされない
 →出力がほしい時はちゃんとフラッシュ
子プロセスのStdinに対するエンコーディングはProcessStartInfoから設定できない
 →StandardInput.BaseStreamを取得して新しくStreamWriterを作る
ぐらいでした
当初の問題だったEOF云々は、Process.StandardInputのストリームを閉じると
問題なく処理されました

求めていた処理を考えていたやりかたよりずっと簡単に得られたので大満足です



591 名前:デフォルトの名無しさん [2008/05/31(土) 17:29:19 ]
今、とあるゲームの画面の各部をキャプチャして画面を認識し、指定した部分をクリックしたり文字を送ったりするプログラムを作っています。

VisualC#のデバッグモードで動かしていると、画面上の指定部分をキャプチャする関数の中で使っている、Graphics.GetHdc()の部分で、
「ArgumentExceptionはハンドルされませんでした。  使用されたパラメータが有効ではありません」
のメッセージがでて止まってしまいます。10回に1回くらいの頻度かな。
ローカル画面で変数の値をチェックしても、キャプチャ範囲に異常な値は無く(bmpのサイズなど正常)、何でこうなるのか心当たりがありましたら指摘してもらないでしょうか。
#複数の呼び出し元から、この関数が同時に呼び出されているときにこんなことおこるのかな・・・?

ちなみに、キャプチャやってる関数を下に貼り付けてみます。
-----------
public Bitmap CapturePartFromA(int[] capval)
{
//capval[] はキャプチャ範囲を収めた配列。ここでは[3]と[4]のみ利用
Bitmap bmp;
//座標系を変換する関数の戻り値保存用
int[] xxx = new int[4] { 0, 0, 0, 0 };
IntPtr hWnd = FindWindow("A Game", null);
RECT winRect2 = new RECT();
GetWindowRect(hWnd, ref winRect2);
//座標を変換する関数(クライアントの原点←→デスクトップの原点)
xxx = ConvertCoordinates(capval);
bmp = new Bitmap(capval[3], capval[4]);
Graphics g = Graphics.FromImage(bmp);
IntPtr hDC = g.GetHdc(); //←ここで 例外頻発
IntPtr winDC = GetDC(hWnd);
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, winDC, xxx[0], xxx[1], SRCCOPY);
g.ReleaseHdc(hDC);
g.Dispose();
ReleaseDC(hWnd, winDC);
return bmp;
}


592 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:44:08 ]
>>591
チートスレ池

593 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:41:13 ]
MMORPGの自動プログラムを作ってどうする、それほど他を出し抜きたいのか?
こんな所に来るな。

594 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:52:58 ]
C# = D♭

595 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 15:20:56 ]
>>591
評:もっとオブラートに包んだ質問のやりかたを覚えましょう。

596 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:22:52 ]
エロシーンまだ?

597 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:27:52 ]
せめて「GUIのテストを自動化したいです」位のうそをつく常識を持て

598 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:48:59 ]
HttpWebRequest使ってゆうちょダイレクトのサイトから振り込み状況を確認するアプリ作ってるんだけど、
誰かできた人いる?
UserAgentとかいじってもなぜかはじかれる。
同じアプリでほかのhttpsサイトとかはログインできるんだけどなぁ。

599 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 20:02:32 ]
いません

600 名前:591 [2008/06/01(日) 20:49:22 ]
ここで知恵ある人いるかと思ったのですが・・・残念。
自助努力するしかないですね。
どうもでした。




601 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 20:49:25 ]
なぜかって、なんのエラーで帰ってきてるの?

602 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:21:28 ]
UDP通信で、C#のクライアントにVC++のCプログラムからソケットでメッセージを送って表示
しているのですが。漢字が正しく表示できません。何かのコード指定だと思うのですが、
探してみたのですが見つからず。よろしければ教えてください。
C++の手順
WSAStartup(MAKEWORD(2,0), &wsaData);
sock = socket(AF_INET, SOCK_DGRAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(XXXXX); // 送信先のポート番号
addr.sin_addr.S_un.S_addr = inet_addr("XXXXXXXX"); // 送信先のIP
sendto(sock, str2.c_str(), str2.size(), 0, (struct sockaddr *)&addr, sizeof(addr));
closesocket(sock);
WSACleanup();
必要であればC#受け側も出します。
ちなみにc++側のプロジェクトの文字コードを有る分変えても変わりませんでした。

603 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:25:33 ]
C#側も書こう

604 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:26:42 ]
文字コード意識せずにネットワークとか

大方StreamReaderをEncoding未指定でnewしてんだろ

605 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:32:39 ]
技術ある人はゆうちょダイレクトにログインするプログラムをC#でHttpWebRequestつかって組んでみてほしい。
思いのほかはまるよ。

606 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:33:57 ]
>>601
サーバー側のエラーで帰ってきてログイン不可能。
エラーコードが書いてあるけど、意味がわからないので対応が難航してる。



607 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:36:26 ]
>>606(=605)
そのエラーコードを書けってことじゃないのか?
イミが分からないとか、技術ある人は作ってみ?とか
根本的にダメダメwww

608 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:38:18 ]
サーバー側(cgi)のエラーコードなんてC#とまったく関係ないから書かなかっただけだが。

609 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:40:27 ]
>>608
オマエには無理って事で終了

610 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:42:59 ]
TP1/Webのエラーコードっぽいけどな。
マニュアルある人ならわかるかもしれん。
今ゆうちょダイレクトメンテ中でエラーコード再取得できなかった。



611 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:43:26 ]
>>609
お前には聞いてないってw

612 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:45:14 ]
>>603  >>604の指摘でC#側を見て下記の点ではないかと思い
enc = System.Text.Encoding.UTF8;
// enc = System.Text.Encoding.Unicode;
// enc = System.Text.Encoding.BigEndianUnicode;
localPort = XXXXX;
udp = new System.Net.Sockets.UdpClient(localPort);

コメント部分を追加してみましたが変えましたが、半角英数もまともに表示できなかったです。
元々はUTF8でした。 何がいけないのだろう?

613 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:45:51 ]
逆ギレw

614 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:47:03 ]
技術もないのにあおるだけのアホは放って置いてできる人よろしく!

615 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:50:06 ]
>>614
ここで聞く前に、先ず質問の仕方を勉強してきてね

616 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:51:20 ]
だなw

617 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:52:55 ]
>>615,616
キメェw

618 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:55:16 ]
ゆうちょダイレクトは特に妙なところはなかったように記憶しているけど、
どこでひっかかってるの?
今確認しようとしたら、ちょうどサービス停止中だな。

619 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:03:10 ]
C# 側のコードです。 どのコードを指定しても正しく表示されなかった。orz
System.Net.Sockets.UdpClient udp;
private Button button1;
System.Text.Encoding enc;

enc = System.Text.Encoding.UTF8;
// enc = System.Text.Encoding.UTF7;
// enc = System.Text.Encoding.ASCII;
// enc = System.Text.Encoding.Unicode;
// enc = System.Text.Encoding.BigEndianUnicode;
localPort = XXXXXX;
udp = new System.Net.Sockets.Udp

System.Net.IPEndPoint remoteEP = null;
byte[] rcvBytes = udp.Receive(ref remoteEP);
string rcvMsg = enc.GetString(rcvBytes);

udp.Close();

バッファーを見たら、シフトJISが送られてくるようでした。
わからない…orz


620 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:05:29 ]
一部切れていました。
udp = new System.Net.Sockets.UdpClient(localPort);




621 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:08:29 ]
Shift_JISで送られてきてるのにUTF-8でデコードとかおかしいと思わないか?

622 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:11:50 ]
思わないでーす

623 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:17:29 ]
なんか、荒らされてるな。
IDない板だから、釣りや煽りに反応するのはやめましょう。
質問者の暴言は、たいてい騙り。
もちろん、ときどきとんでもない質問者もいるが、いずれにせよ放置で。

624 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:19:15 ]
技術ある人に作れって時点でネタだろ

625 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:23:40 ]
>>620
すみません、どの記号がどの文字コードかの知識が不足しています。orz

626 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:55:12 ]
とりあえず、ゆうちょに不正アクセスしてる奴がいると通報しとくか。
3人くらいで通報すれば目付けられるから

627 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 01:27:36 ]
何が不正?

628 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 06:31:07 ]
.Text.Encoding.GetEncoding(932)

629 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 06:59:26 ]
>>628
出来ましたありがとうございます。

630 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:16:51 ]
とりあえず、ゆうちょにログインも出来ないアホはほっとけよ



631 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 12:59:43 ]
ゆうちょの件一晩頭冷やして考えたらできました。
お騒がせしました。

632 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:09:14 ]
>>631
>>615

633 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:35:31 ]
結局何がまずかったの?

634 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:39:21 ]
態度

635 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 15:04:41 ]
>>634
いや、頭だろ・・・

636 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:46:07 ]
そもそも質問してないだろ
意外とはまるからやってみぐらいの勢いだったんだが。
それを勘違いしたこまったちゃんが質問の仕方が悪いだの、態度が悪いだのってこんな匿名掲示板で言われてもなw

637 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:48:37 ]
>>636
ヨチヨチwww

638 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:51:25 ]
>>636
明らかに誰か作って教えてくれってスタンスだったけどなw

ヨチヨチwww

639 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:55:30 ]
それはそうと、ゆうちょ興味あったら挑戦してみ。
興味なかったらいいけど。

640 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:57:56 ]
ゆうちょダイレクトのアカウントなんて普通持っとらんがな(´・ω・`)
嵌るとかは単純に質問者の技術力不足だと思う



641 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:16:54 ]
そうだね。
俺はそもそも技術者じゃないから技術力不足は認めるよ。
ネットショップを経営しててそれに必要な入金チェックをちょっと作ってみようかなって思っただけだし。

642 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:24:42 ]
つ Python
無理にC#を使う必要性はない。

643 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:32:46 ]
PythonってWinアプリ簡単に作れるの?

644 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:35:08 ]
うん。GUIを扱うライブラリがあるし、IronPythonを使えば.netも使える

645 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:36:30 ]
ゆうちょ房のスレ荒らしw

646 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:47:33 ]
なるほど。
Python調べてみよう。Excelファイルいじくれるライブラリもあるといいけど。
C#始めて1ヶ月だけどフリーで開発環境まで全部まとめてインストールできるのが楽ではじめたんだよね。
今度は今手作業で集計してるバイトの勤怠管理でも作ってみるか。

647 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:08:48 ]
ゆうちょが出てきてからスレの雰囲気がすごく悪くなった

648 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:21:13 ]
過去スレ読んだが同じようなもんだぞ
ゆうちょに粘着している奴が悪くしてんじゃね?

649 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:14:43 ]
>>648
ヨチヨチwww

650 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:21:49 ]
なんかヨチヨチレスしかできないかわいそうなやついるな



651 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:52:27 ]
なんで技術者、学生以外でこんな板見てんだか・・・

652 名前:デフォルトの名無しさん [2008/06/03(火) 02:16:25 ]
初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
ListViewのdetail表示時に行間を広くするにはどうしたらいいのでしょうか?

653 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:42:12 ]
ListViewItemのStyleあたりで設定できなかったっけ?
出来なかったらごめん。

654 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 09:19:23 ]
ImageList使う

655 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 12:20:34 ]
お前には無理だからさっさと諦めろ。

656 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 13:35:14 ]
>>652
>初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
馬鹿じゃないの?
まじめな話。


657 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 14:07:08 ]
UserControlを継承したクラスを作って
クリックされた箇所に丸印を描画するようなプログラムを作るとしたとき。
Click()イベントで、クリックされた箇所を記憶し
Invalidate()でPaint()イベントを呼び出してクリックされた箇所を描画する。
という動きになるのでしょうか?


658 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 15:01:12 ]
はい

659 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 15:19:56 ]
フォームエディタで上にコントロールを乗せないなら、
UserControlじゃなくて、ただのControlからの継承でいい。

660 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 17:57:36 ]
>>658
>>659
どうもありがとうです。

ところで、趣旨が変わるんですが
折れ線(複数)グラフを書きたいのです。
ひとつの表示窓に複数のラインを書きたいのです。
そのライン単位でオブジェクトにしたいのですが、
(1)そのラインオブジェクトはControlから派生させて自分でライノブジェクト自身で描画させるべきでしょうか。
(2)それとも単なる(Control派生ではなく)オブジェクト化して、親表示窓Controlに個別に描画ルーチンを呼ぶ形にするべきでしょうか?
一般的にどうなのかなと思いまして。

(1)だったら、表示窓側の親オブジェクトは特に何も考えずに子が思いのままに描画する。
と思っていたのですが、背景処理が手間かと思えてきました。
子に当たるラインオブジェクトを描画すると親部分を上書きするからです。
リージョンを切れば親の描画部分を塗りつぶさなくても描けそうですが、折れ線なのでPATHが複雑になりすぎるかと思います。

(2)だったら特に背景塗りつぶし過ぎに関しては何も考えなくてよいのですが、
Paintルーチンで子オブジェクトにGrapicsオブジェクトを渡すサブルーチンコール形式になると思うのですが、なんだか嫌なのです。
一般的にこういうことをやりたい場合にはどうしますか?
変なことを言っているようだったら指摘してください。



661 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 18:02:28 ]
拡張性を考えれば当然後者だろ

662 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 19:57:03 ]
WPFなら前者だね

663 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:56:09 ]
Excel使え

664 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:37:46 ]
どこかにチャートコントロールあったはず

665 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:39:16 ]
ZedGraphとか

666 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:37:23 ]
ZenGraphってスクロール機能つけられる?

667 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:45:33 ]
便乗で質問なんですが
ZedGraphとかNplotを仕事(商用)として使ってる人いますか?


668 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:25:12 ]
ListViewの編集はなんで先頭のカラムしかダメなの?
面倒だね。

669 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 00:59:59 ]
WPFなら自由自在

670 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:18:50 ]
いやそういう話じゃなくて。



671 名前:660 mailto:sage [2008/06/04(水) 10:13:48 ]
皆さま。
ZenGraphとかNplotとかあるんですね。
これらを使うかどうかはともかく、これらの実装を参考にさせてもらいます。
どうもありがとう。


672 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:17:36 ]
Personクラスの派生クラスとして
Man,Woman,Noneを考えます。
Man,Woman,NoneはPersonクラスのstaticなメソッドを介して生成されるものとします。
Man,Woman,Noneのコンストラクタのアクセシビリティをそれぞれ
public,protected,privateにしております。
publicなManは生成されます。
protectedなWoman,privateなNoneは生成できません。
こういうときはコンストラクタのアクセシビリティをinternalにすればいいようです。
こういうinternalの使い方は正しいでしょうか?


673 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:20:56 ]
クラスライブラリを作ってるなら全然アリ
単一プロジェクトなら無意味

674 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:29:34 ]
他のアセンブリに公開するつもりがないならinternalでいいんじゃね

675 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:49:20 ]
Man,Woman,Noneクラスは外部に見せる必要がないならこういう手もある。
やりたいこととは違うと思うがクラス自体を見えなくすればコンストラクタの隠蔽は不要になる。
public enum PersonType { Man, Woman, None };

public class Person {
 public static Person GetInstance(PersonType x) {
  switch (x) {
   case PersonType.Man: return new Man();
   case PersonType.Woman: return new Woman();
   default: return new None();
  }
 }
 private class Man : Person { public Man() {} }
 private class Woman : Person { public Woman() {} }
 private class None : Person { public None() {} }
}

class Startup {
 static void Main() {
   Person man = Person.GetInstance(PersonType.Man);
   Person woman = Person.GetInstance(PersonType.Woman);
   Person none = Person.GetInstance(PersonType.None);
 }
}


676 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:53:36 ]
C++から入ると、friendが無いのがちょっと不便に感じるね。

677 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:56:41 ]
friendは邪悪だからなくていいよ。

678 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:22:41 ]
partial使えば内部型でもファイルを分けて書けるよ

679 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:31:51 ]
>>676
主にテスト用途だけどFriend Assemblyってのがある。
通常はprivateな型やメソッドをテストするのに使う。

680 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:57:45 ]
>>675

コレって変だと思うのはオレだけ?





681 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:03:44 ]
お前だけ
Comparer<T>.Defaultとか例を挙げたらキリがない

682 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:10:23 ]
ああすまんComparer<T>.Defaultは違うね
Stream.Null(実際の型はStream+NullStream)とか

683 名前:デフォルトの名無しさん [2008/06/04(水) 23:40:00 ]
>>680
君だけではないよ。
Factoryってこうやらないだろ?



684 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 23:59:22 ]
XmlReader.Createとかあるでしょ
一応MS的にはこういうのも「ファクトリメソッド」と呼ぶらしい

685 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:09:09 ]
どこが変だとか、どうあるべきかとか書いてくれないと答えようがない

GetEnumerator()の実装例でyield returnを使わないケースで内部クラスを使っている
なおC#の内部クラスはJavaのstaticな内部クラスと同等だから誤解のないよう

686 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 01:55:39 ]
というか基底クラスであるPersonクラスが具体的な派生クラスを知っているのが不自然。
気持ち悪い。

687 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 03:35:19 ]
既定クラスがBuilderを兼ねてるのがいやだったらPersonとファクトリーを分離するのは問題ない。
ただ、拡張可能なようにBuilderやStrategyパターンで作ってゆくと、
クラスやインターフェイスの数がすごいことになるから過剰な汎用化には反対したい。

688 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 04:39:40 ]
突然質問してごめんなさい。

皆さんはC#とかってどうやって勉強してるんですか?
こないだはじめたんだけど、資料が少なくて、学習がすすみません。
いい勉強法とかオススメの書籍があれば教えてください。

ちなみに今は実際にソフトウェア作ってみて、わからないことがあったら調べて・・・って感じです。

689 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 07:52:47 ]
C#で資料が少ないとか言ってたら何も覚えられん。

690 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 08:05:32 ]
MSDNに全て有る



691 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 08:47:31 ]
>563-567 >690
の質問とかぶると思うのですが。
 オープンなC#ソースでストラテジーパターンを実現しているらしき所を見かけたので、
newのコストについて教えてください。

【ソース概要】
・クラスConcreteAとConcreteBは同じParentStategyクラスの派生。
・それぞれのクラスには違う条件でこの方法で状態遷移する。
void override update(){
  ・・・
  if(hoge<hage)
    {parentStategyInstance = new ConcreteA()}
  else
    {parentStategyInstance = new ConcreteB()}
  ・・・
}
・update()は頻繁に発生する。
・各コンストラクタはメンバを一つ更新する一行のみ。
・ガベコレでメモリ使用量のコストが無いことは解ったつもり。

 C++ならキャスト一択の所と思うのですが、JITのおかげでこの書き方が
実は最高にスマートって事になっちゃいないか知りたいんです。

※JITのおかげさまで、簡単にベンチテストが作れない事が問題なんです><
※オブラートに包んだ所にミソがありそうなら、どんどん公開します。 O!S!I! O!S!I!

692 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:07:15 ]
Stategy自体選択ミスに1票

693 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:08:56 ]
switch最強伝説を更新するんですか? ('A`) >692

694 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:14:22 ]
C#自体の選択ミスに1票

695 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:19:38 ]
C#のEnum型とswitchの相性の良さは無敵だぉ!! デザパタ厨涙目! プギャー(^0^)9

696 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:27:05 ]
>695
私もそう言う事が聞きたかったので、ありがとうございました。

是非参考になるサイトをご紹介頂きたくお願い致します。 m(_ _)m

697 名前:デフォルトの名無しさん [2008/06/05(木) 09:28:56 ]
 ペイントを操作して、絵を描こうとしているのですが、
ドローイングエリアをうまくクリックしてくれません。
どなたか、どうすればいいのか教えていただけませんでしょうか?

[StructLayout(LayoutKind.Sequential)]
public struct RECT {
public int left;
public int top;
public int right;
public int bottom;
}
const uint WM_LBUTTONDOWN = 0x201;
const uint WM_LBUTTONUP = 0x202;

public void RemotePaint() {
IntPtr hWnd;
string sClassName = "MSPaintApp";
string sWindowText = null;
sClassName = "AfxFrameOrView42u";
sWindowText = null;
hWnd = FindWindowEx(hWnd, IntPtr.Zero, sClassName, sWindowText);
SetForegroundWindow(hWnd);
RECT winRect = new RECT();
GetWindowRect(hWnd, ref winRect);
System.Threading.Thread.Sleep(1000);
PostMessage(hWnd, WM_LBUTTONDOWN, 100, 100);
System.Threading.Thread.Sleep(500);
PostMessage(hWnd, WM_LBUTTONUP, 100, 100);
}


698 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:39:13 ]
>>566
サブクラスのコンストラクタが動く前に
オーバーライドされた仮想関数が呼び出されるわけで
ちょっと気持ち悪いですね。

699 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:41:09 ]
>>691
あまりにも頻繁にUpdateが呼ばれるならやや効率は悪いだろうな。
でも多分誤差レベル。
大抵ほかの処理でそれ以上にメモリ使ってるだろうから。

ただ、作りとしてはぱっとしないな。


700 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:18:52 ]
>ぱっとしないな
ぶっちゃけそこなんです。

 上の話の終わり方だと、ConcreteAとConcreteBを継承した大きなクラスを作って
処理部分だけ、switchかdelgate型で置き換え可能にする。
・JITはswitchが強いってことは何処までか?
・一つの処理がどの程度長いとdelgate型が有利になるか?
でバッチテストが作れるなと思ってました。
  っていうか、そういうテストした人の本や社員のサイトがあっても良いなと。

これも「ぱっとしないな」と思ってくれたら、むしろ愉快なんですけどね。

あと
>大抵ほかの処理でそれ以上にメモリ使ってるだろうから。

私の
>・ガベコレでメモリ使用量のコストが無いことは解ったつもり。
への返事でそんなに深い意味は無いですよね?

※最大メモリ使用量より速度優先
※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。



701 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:22:09 ]
delegateの"e"が抜けてる。

702 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:25:28 ]
デリゲートなんかは下手に保持しとくより毎回newした方が速いらしいね

703 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:32:07 ]
thx
delegateは捨てましょう。

…C的には、関数ポインタよりnewが早i(ry

JITのnewまわりの最適化を見られれば、それでも疑問は解決できます。

704 名前:702 mailto:sage [2008/06/05(木) 11:36:07 ]
>>703
意味わかってる?
デリゲートが遅いって言ってるんじゃなくて,デリゲート型のオブジェクトをnewするときの話だよ

705 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:45:56 ]
>704
ミスリードです>< すいません。

 最初に戻ると、元parentStategyInstanceを持ってるクラスを作った時に、
デリゲート型のオブジェクトをnewできます。

あとは
  if(hoge<hage)
    {exceDelege = ConcreteAexceDelege}
  else
    {exceDelege = ConcreteBexceDelege}

あと、
>※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。
これ、 ConcreteA、ConcreteBでずらずら並んで、20個ぐらいあったら一気に話が不毛になるな。('A`)



706 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:51:10 ]
だから、逆なんだ。
  if(hoge<hage)
    {exceDelege = ConcreteAexceDelege}
  else
    {exceDelege = ConcreteBexceDelege}

よりも >702は
  if(hoge<hage)
    {exceDelege = new exceDelegater(ConcreteAexce)}
  else
    {exceDelege = new exceDelegater(ConcreteAexce)}

707 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:05:13 ]
newの最適化っつっても、確保に関しては基本的にマネージヒープの
未割り当て領域へのポインタをオブジェクトサイズ分進めるだけだぞ。
もちろん頻繁にnewすればGC起動の機会を与えることになるから、
パフォーマンスを気にするならインスタンスのキャッシュは基本ではあるが。

708 名前:691 mailto:sage [2008/06/05(木) 12:34:44 ]
 話を長引かせる様な書き方をしてしまってすいません。
>696 >700-701 >703 >705-706
まで私ですね。

>ConcreteA、ConcreteBでずらずら並んで、20個ぐらい
は失言でしたが、>707にはそこまで考慮して貰ってありがとうございます。
「インスタンスのキャッシュは基本」
これを確認出来て良かったです。

ソースの出所が良い所ぽかったので、>704みたいな事は無いか色々勘ぐったんです。

<ちら裏>
switchしかりnewも、CLRやJITの最適化って非線形で決めてナシなんだな。
皆さん好きですか?
私は、規模が変わるたびにバッチテスト・ベンチマークテストする事になりそうで('A`)

709 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:51:30 ]
大抵現実に影響があるようなパフォーマンス問題は
そんな細かい話ではない。


710 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:53:58 ]
デリゲートがキャッシュするよりnewってのは初めて聞いたな。
どこででた話?
それかひょっとして非常に使用頻度の低いデリゲートの話?




711 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:56:14 ]
>709 けどそれって、C#の開発経験があるって言えるんですか?
毎日好きな言語で遊んで、顧客が限定してきた時だけC#って奴と差がないじゃん。

712 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:03:29 ]
visual studioでメッドを全部折りたたむ技ってないですか?

713 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:05:09 ]
>>711??
何のことを言ってるんだ?


714 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:06:11 ]
こういう事を
>そんな細かい話
って言い捨てること。

715 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:18:25 ]
>>714
プロならコストと効率を考えて、大して効果の上がらない箇所の最適化に
拘って労力を注ぐくらいなら、もっと他にすることがあるだろうと思うがな
そういうところをいじくり倒せるのはむしろ趣味で遊んでる奴のほうじゃね

716 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:25:04 ]
>715
>プロならコストと効率
そりゃどの言語でもそうだよ。
話をループさせてることに気付いてる? 会話下手?

俺は優しいから"C#でのコストと効率"の経験って解釈してあげるよ。

717 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:28:38 ]
>>716
煽る以外に言い返す言葉が見つからないならレスするなよ

718 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:33:19 ]
>715のプロとしてのコストと効率の経験と、趣味で遊んでる奴との混同具合が心配です。

719 名前:デフォルトの名無しさん [2008/06/05(木) 13:46:50 ]
usingを使ってStreamReaderを読んでますが、
whileで最後まで読んで、もう一度whileで読みたいのですが、
どうすればいいんでしょうか。

720 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:52:18 ]
>>719
こういうこと?
streamReader.BaseStream.Seek(0, SeekOrigin.Begin);




721 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:54:51 ]
>>712
アウトラインのことなら、編集 - アウトラインで

722 名前:719 mailto:sage [2008/06/05(木) 14:00:03 ]
>>720
おお!!出来ました!助かりました!
ありがとうございます!


723 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:16:28 ]
優先度の問題。
そんな細かい話を気にする必要があることだってあるが、
現実には引っかかるのはもっと別のところであることがほとんど。
もっと気をつけるべきとこは他にいっぱいある。
ってだけの話、無意味とは言わん。


724 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:19:08 ]
だろうね。 大概解ってるだろ。
俺、>709って初見じゃないもん。 定期的に湧く厨だと思った。

725 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:19:37 ]
条件分岐の効率なんて、文字列処理一発でも挟まれば全く無意味。
だから処理効率より設計の方を重視する方がいい、ほとんどの場合は。


726 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:24:24 ]
>>724
誰かさんはこの程度でベンチテスト毎回やるんだと言ってるから相当優先度が高いんだろ
解ってるとは思えん

727 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:29:50 ]
次のようにXMLファイルを読み込もうとしてるのですが、
どうやら読み込みに失敗している環境があるらしいのです。
if (File.Exists(Directory.GetCurrentDirectory() + "\\" + "data.xml") == true)
{
 Type[] et = new Type[] { typeof(Data) };
 System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), et);
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
そこでまず、本当にXMLファイルの読み込みに失敗しているのかメッセージボックスでチェックしたいのですが、
try
{
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
catch
{
MessageBox("読み込み失敗");
}
こんな風に書いちゃってもいいのでしょうか?

728 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:32:37 ]
その時も文字列処理を引き合いに出してたな。
だいたい、その辺りにC#の用途の向き不向きボーダーラインがあるんかな。
More Effective C++みたいなイメージでは不毛と。

729 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:00:24 ]
>>727
肝心の例外情報握り潰したら話にならんだろ
つか今時CurrentDirectoryかよ

730 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:02:22 ]
>729は catch の後ろに何もない事を言っている様だ。
try .. catchのヘルプに戻ろう。



731 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:35:17 ]
CurrentDirectoryの何が悪いのかわからん。
まさかレジストリやマイドキュメントに保存するのか?W

732 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:39:09 ]
カレントにするやつは無知か手抜きだろ

733 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:46:27 ]
exeのフォルダならともかく、
カレントは起動方法によって変わるから問題だろ
元々そういう仕様なら関係ないけど

734 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:46:32 ]
カレントディレクトリがショートカットとかで変更されたらどうするんだ?

735 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:49:56 ]
俺の負けだ。 言わせてくれ。
そこは

   throw; //スルー

だろ。
俺は敗者だ。 だけどなんかスッキリした。

質問者おいてこぼりだが、確かに>728の模範解答は期待。

736 名前:727 mailto:sage [2008/06/05(木) 15:54:41 ]
聞きたいのはCurrentDirectoryのところではなく、
usingステートメントをtryで囲んでもいいのかな?と思ったのです。

読み込み失敗時の例外情報はヘルプでFileStreamを調べたのですが例外の種類がわかりませんでした。
例外の種類はどうやって調べたらいいんでしょうか?

737 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:00:52 ]
起きえる例外がわからなければSystem.Exceptionで受ければいいだろ。
起きる例外はMSDNに載ってると思うけど。

738 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:13:54 ]
MSDNでFileStream コンストラクタ (String, FileMode)を引いたら例外の種類が書かれていました。
try
{
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
catch(System.Exception e)
{
 MessageBox(e.ToString());
}
としましたが、usingをtryで囲ってもいいのかが知りたいです。


739 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:15:36 ]
どうして駄目だと思った?

740 名前:727 mailto:sage [2008/06/05(木) 16:31:25 ]
>>739
usingステートメントって例外が起きた時にステートメント内のdisposeを保証してくれるんですよね。
なのでtry句が複雑にネストしてしまう気がしたからです。
例外が自分の環境でも再現出来ればいいのですが、
他人の環境なので再現できないので、メッセージボックスを仕組んで原因を調べようかなと思いました。



741 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:43:55 ]
try句が複雑にネストしてしまう、の意味が分からない。

742 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:45:18 ]
usingをtry-finallyに展開してみる。
try { 
 readonly System.IO.FileStream fs = new System.IO.FileStream("data.xml", System.IO.FileMode.Open);
 try { DataList = (ArrayList)serializer.Deserialize(fs); }
 finally { fs.Dispose(); }
} catch(System.Exception e) { 
 MessageBox(e.ToString()); 

usingではcatchしてないからDeserializeで例外が起きた場合は外側のtry-catchブロックが補足する。
問題になるとすればcatchの段階でまだ開いている状態のfsにアクセスしたい場合。
Deserializeとfs.Dispose()の両方で例外が起きた場合。
こういったことが気になるなら、usingを使わずtry-catch-finally構造に変える。

743 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:50:38 ]
蒸し返してすまんが、CurrentDirectoryでひとこと。
コンソールアプリならカレントディレクトリは普通に使う。
GUIの場合は意味がない。
exeのあるディレクトリがカレントディレクトリであると考えているなら明らかに間違い。

Directory.GetCurrentDirectory() + "\\" + "data.xml", 
この部分は余計。相対パスならカレントからの相対パスになるので
"data.xml"
だけでで十分。

744 名前:727 mailto:sage [2008/06/05(木) 17:04:26 ]
>>742
分かりやすい説明ありがとうございました。

>>743
参考になりました。ありがとうございます。

745 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 17:21:07 ]
>>742
>Deserializeとfs.Dispose()の両方で例外が起きた場合。
キャッチされるのは後からの例外の方だったよね?

746 名前:デフォルトの名無しさん [2008/06/05(木) 20:00:17 ]
質問させていただきます。
フォーム上に画像を表示するプログラムを書きたいのですが、
イベントとして、フォームが表示されたと同時に描画したいのです。
このような場合、イベントはどのように記述すればよいのでしょうか。
もしくは、イベントを使わない方法があればそちらもご教授ください。

747 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:01:16 ]
GUIのプログラムの中で
GUIとは何の関係もないオブジェクトAが居ますが
デバッグ用途でGUIのとあるメッセージウィンドウに文字列を出力させたいとします。
オブジェクトAのようなGUIに無関係なオブジェクトが大量に居るような場面で
それらの出力文字列をGUIのとあるメッセージウィンドウに文字列を出力させたいわけですが。
どうやってそのオブジェクト達とメッセージウィンドウ間をインターフェイスさせればよいでしょうか?
Qtをちょこっと触ったことがあるのですが、その場合はsignal/slot機構を使って、わりと簡単に実現できたのですが
C#の場合はsignal/slotの代わりにeventを使うことになるかと思います。
eventの型となるdelegateをどこで宣言するかなぁ〜と考えるのですが、
どこにも宣言したくありません。
どうすればいいですか?


748 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:50:02 ]
メッセージ表示するもしくは通知するTraceListenerでも作ればいいんでない?


749 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 22:16:43 ]
>>735ってどういう意味?

750 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:15:02 ]
>>743
逆に言えば、カレントディレクトリがexeのあるディレクトリであることを
プログラム側で保障すれば問題ないということでもある

まあ、その場合でも相対パス使うだろうから、
Directory.GetCurrentDirectory()は不要だけどな



751 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:18:57 ]
>>750
Open/Saveダイアログを使うとカレントディレクトリが動いたりしなかったっけ。
以前はまった記憶がある。

752 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:37:16 ]
ていうか、おまいらデリゲート使うときに毎回宣言してるの?
自分はDelegate<Result,Param1>とか宣言しといて全部それつかってる。
おかげでFuncとどう整合性とろうか思案中だがなぁorz

753 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:42:08 ]
イベントハンドラはEventHandler<TEventArgs>使え

754 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:59:49 ]
outやrefに対応できないんだよな…


755 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:05:31 ]
class Reference<T> { public T Value { get; set; } }
こんなの作っとけば

756 名前:750 mailto:sage [2008/06/06(金) 00:07:58 ]
>>751
確かに、FileDialog使うときは

RestoreDirectory = true

にしないとまずいな
てか、既定値がfalseとかありえん

757 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:48:22 ]
>>755
世の中そうもいかんこともあるのよ。
リモーティングとか。


758 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:29:58 ]
>>752
まさにこういう使い方をするために、宣言時に識別子を省略出来たらいいのに。

759 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 04:03:17 ]
>>754
それは知恵が足りないだけ。
できるよ。

760 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 07:08:25 ]
マルチプルアイコンを含むIconインスタンスから、各アイコンを取得したいのですが、
どうすればよいのでしょうか。



761 名前:760 mailto:sage [2008/06/06(金) 07:46:58 ]
自己解決しました。
Icon.Save()でバイナリデータを得て、それを分割した上でIconコンストラクタに与えればいいですね。
もっとスマートな方法がありそうな気もしますが、とりあえずそれでいきます。

762 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 09:30:47 ]
コンストラクタでSize指定だけはできる

763 名前:747 mailto:sage [2008/06/06(金) 12:09:04 ]
>>753
>>イベントハンドラはEventHandler<TEventArgs>使え

どうもです。
こういうのがあるんですね。
ただこれだとEventArgsカスタムクラスをどこかで定義しなければならないです。
EventArgsカスタムクラスに依存するのがなんだかシャクなんで。

たとえば
talkerインターフェイスを用意するとして

interface ITalkter{
        public delegate void printf(string fmt,prams object[] args);
}

こういうことができたら、
ITalkerを継承したクラスを作ってしまえばそれでOKなんですけど
ITalkerインターフェイスに依存するのは納得できるんで。
ただ、interfaceでは型宣言出来ないらしく。。。
なんで出来ないんだろう。。。。
ちなみにtalkerは大量に居ます。
listenerは1個だけっていう想定。

何かいい方法はありませんか。


764 名前:747 mailto:sage [2008/06/06(金) 12:19:13 ]
もしくは
public event void delegate(object sender,params object[] arg) printf;
のような感じで
名無しの型を宣言すると同時に変数定義みたいなことができたらそれだけでいいですね。
こういうことって可能なんでしょうか?


765 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:25:10 ]
interface ITalkter{
 string PrintString{ get; }
}

こうとか

interface ITalkter{
 void Print(Action<string> print);
}

こうとか

interface ITalker{
void Print(IListener listener);
}

こうとかじゃだめなの?

766 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:46:17 ]
DebugListener/TraceListenerで十分だと思うけど。

767 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 13:27:34 ]
>>763
talkerの役割がよくわからないな。
実際に表示する部分なのか、それともメッセージを発行する元なのか?
それからdelegateをeventと1対1で作らなければいけないとか思ってないか?

768 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 14:49:41 ]
>>761
P/InvokeでExtractIconExとか。

769 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:41:02 ]
EventHandler<TEventArgs>を使いたくないのだったら、普通にAction<T>でも使うってのは?
オブジェクトAの中に
public event Action<string, object> printf;
を実装する。

これならカスタムクラス使わんで済むでしょ。

770 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 23:54:33 ]
>>747>>764
デリゲートを使うにはデリゲート型が事前に作成されている必要がある
また、匿名メソッドやラムダ式を使った場合でも、型が自動的に作成されることはない

なので、君がやりたいと考えていること(デリゲートを使用して云々)は恐らく不可能

まあ、本来の目的からすると、出力タイミングをGUI側で制御するなら>>765
オブジェクト側で制御するなら

interface ITalker {
  void SetPrintCallback(Action<string> print);
}

もしくは

interface ITalker {
  void SetListener(IListener listener);
}


>>769
void (object sender, T e) where T : EventArgs

に合致しないデリゲートをイベントにするのはやめれ
# MSのガイドラインなんて知らん、というなら止めはしないが

さらに言うと、
・デリゲート型の名前のサフィックスは EventHandler
・第2パラメータの型(上記 T)の名前のサフィックスは EventArgs
・2つのパラメータ名は上記の通り(sender, e)



771 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:33:51 ]
正直msのガイドラインなんか知ったこっちゃ無い


772 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:55:01 ]
なら使うな

773 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 06:58:46 ]
ここはCompact Frameworkの質問はおk?

774 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:01:03 ]
だから使わないんだって

775 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:01:24 ]
C#にからめればOK

776 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:03:46 ]
Compact FrameworkでWindows Mobile用2chブラウザを作ってるんだが、
スレ一覧にListViewを使ってるんだ。
ListViewItemCollectionにAddRangeが無くてforeachでスレデータ回してアイテム作ってAddさせてるんだが
どうにも低速なんだ。
AddRangeの代わりになるものは回してAdd以外ないだろうか。

777 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:19:17 ]
BeginUpdateやってる?

778 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:20:04 ]
>>777
やってる。

779 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:53:10 ]
ListViewへの追加はPCでもかなり遅いからなあ
1000件くらいになりそうなときはVirtualModeにしてるけど、Compactじゃ使えないのか

780 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:55:15 ]
>>779
2chの板のスレ一覧データだし、700項目くらいPCでやった場合ドパァッって表示されるんだがなあ。
VirtualはCFからは使えないな。



781 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 08:36:09 ]
自分で擬似的なものを描画するのが一番速いのかな

782 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 08:56:03 ]
MSのガイドライン無視したクラスライブラリって見てて恥ずかしい

783 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 09:15:58 ]
Formの上でGridクラス作ったが、20万件でも一瞬で追加・表示されるようになった(´・ω・`)

784 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 09:17:25 ]
ListViewってMSの中の底辺プログラマが作ったんだろうか

785 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:12:31 ]
作ったのがだいぶ昔のことで、
ここまで大量のデータが取り扱われるとは考えられなかったからだと思う。

786 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:29:20 ]
描いた円を上キーでジャンプさせるにはどうすればいい?

787 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:41:02 ]
意味が分かりませんがKeyDownイベントでそういう処理書けばいいんじゃないでしょうか

788 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:54:23 ]
いや、そのKeyDownの中身が分からなくって

789 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:56:34 ]
KeyDownイベントの中身で円を描く場所を変えて描画処理に投げる

790 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:56:35 ]
円をどうやって描いてるかジャンプってどういう意味なのか分からなくって



791 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:58:45 ]
プログラミングが下手な人って質問も下手だよね

792 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:00:20 ]
ダブルバッファにしろよ
画面ちらつくぞ

793 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:20:11 ]
上向きの初速を与えて、一定の下向きの加速度を受けながら運動するようにしたい。
例えば、20進んで一瞬停止して、15進んで一瞬停止して、の繰り返しでいいのか

794 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:26:27 ]
v = v0 + gt と言う式を当てはめれば良いだけじゃん

795 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:32:28 ]
↑アホ

796 名前:デフォルトの名無しさん [2008/06/07(土) 12:37:46 ]
tをどうすれば?

797 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:40:12 ]
タイマーでも使ってろ

798 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:48:39 ]
変数tを入れれば位置まで出せる公式があったろ
リアルにやるならtをタイマーを使って現実時間とぴったり合わせりゃいい

799 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:58:07 ]
加速度を9.8/sずつ減らせばいいんでね?

800 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:15:33 ]
p0 : 初期位置
v0 : 初期速度
g : 重力加速度(約-9.8)
p(t) : 初期時刻からの経過時間tの時の位置

p(t) = p0 + v0*t + 0.5*g*t*t



801 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:23:50 ]
つかいつの間に重力加速度の話になったんだ

802 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:44:46 ]
>>800
それをwhileに入れれば出来そうだけど、ジャンプ中も左右移動したい

803 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:46:52 ]
なんかこのスレ方向性分かんなくなってきたなw


804 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:55:23 ]
ジャンプ中左右移動したいなら

new Timer( () =>
{
 位置更新
 描画
});

void KeyDown(...)
{
switch(key)
case ←:
   左にちょっとずらす
...
}
こんな感じで出来るのかな
普通は
while(true)
{
入力ゲット
 位置更新
 描画
 時間が来るのを待つ
}
こんな感じなのかな
よく知らん

805 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:46:12 ]
>>802
物理的に表現したいならこんな感じです

a:加速度 v:速度 p:位置 dt:微小時間
とすると、こういう微分方程式が成り立ちます

v(t)/dt = a
p(t)/dt = v(t)

dtはゲームなら1フレームの時間(約16.7ms)と考えるのが普通です
この式を例えば前進差分(ぐぐってね)で微分項を近似するとこうなります

( v(t+dt) - v(t) ) / dt = a
( p(t+dt) - p(t) ) / dt = v(t)

t+dt時間における速度と位置を知りたいので式を変形します

v(t+dt) = dt * a + v(t)
p(t+dt) = dt * v(t) + p(t)

この式をゲームのプログラムなんかではこう表現します

void Update( float dt )
{
 velocity += dt * acceleration;
 position += dt * velocity;
}

で、左右移動したいとき、というのは速度に値が加えられている状態なんで、
velocityに対して基本速度を加えておけばOKです


806 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:51:23 ]
って書き終わって凄く後悔した
スレ違いにもほどが

807 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:23:48 ]
>805はY方向だけなので、Xは別にしないとだめだぞ。
横への移動を表す加速がY方向へは関係しないとき、XとYは独立して扱えるからよい子のみんなは気をつけよう。

808 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:40:07 ]
気をつけるまでも無く自明だと思うのですが!

809 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:07:23 ]
型を書いてないからアレだけど
ベクトル型を使うのが普通なんで

810 名前:デフォルトの名無しさん [2008/06/08(日) 10:51:16 ]
過疎



811 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 11:54:09 ]
IDEの使い方に関するおすすめの書籍は?

812 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:17:44 ]
ListViewで特定のカラムだけ非表示にすることは出来ますか?
リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたいのです。

813 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 18:36:00 ]
>>812
ListViewのColumnHeaderで特定のカラムだけWidth=0にすることが出来ませんか?
リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたければそうすることもできるでしょう。

814 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:05:09 ]
>>813
非表示にしたいカラムだけ幅調整不可って出来ますか?
Widthを0にしただけでは幅調整されて見えてしまうので・・・。

815 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:00:43 ]
ListViewItemから派生させたクラスで持つようにして
そのオブジェクトをListViewに追加すれば?

816 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:12:26 ]
つかTagで十分だろ

817 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:27:03 ]
>>815
なるほど。ありがとうございます。
>>816
Tagは使ったこと無いので調べてきます。
ListViewの方ではなくListViewItemの方ですよね?

818 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:33:03 ]
ColumnResizingとかそんな感じのイベントあるから、
そこで非表示にしたいカラムが幅調整されそうになったら制限すればいい。

819 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:34:14 ]
>>818
なるほどありがとうございます。
Tagを使ったものがまさに用途にあった使い方でした。

820 名前:デフォルトの名無しさん [2008/06/09(月) 10:09:01 ]
pc11.2ch.net/test/read.cgi/tech/1212972014/



821 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 12:07:21 ]
メソッド呼び出し中にキー入力を受け取るにはどうすればいいですか?

822 名前:デフォルトの名無しさん [2008/06/09(月) 12:16:03 ]
>>821

メソッド呼び出しを別スレッドにして、メインスレッドでキー入力を
待てばいいんじゃない? 全然はずしてたらご免。

823 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 12:17:01 ]
モードレスダイヤログ?

全然外してるかも。

824 名前:あにす ◆sGTL1yK0.6 mailto:sage [2008/06/09(月) 18:46:26 ]
DoEvents()?
外してるかな…。

825 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 05:54:09 ]
>>702
for (int i=0; i<1000; i++) Hoge((a) => a + 1);
のようなコードは次にように最適化されるようだ。
HogeDelegate f = null;
for (int i=0; i<1000; i++) {
 if (f == null) { f = (a) => a + 1; }
 Hoge(f);
}

826 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 06:30:01 ]
>>825
ということは>>702はデマってことか

827 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 07:01:43 ]
デマというかもうちょい境界線が上なんだろうな。

828 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 11:32:48 ]
質問
以下のようにListのSyncRootで排他処理を行っている最中に
Listの実体を入れ替えた場合、
この排他でLock開放待ちをしていたほかのスレッドはどうなるのでしょうか?
lock (((ICollection)(mylist).SyncRoot)[

if(xxx){
mylist = new List();
}
}


829 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 12:23:17 ]
とりあえずそんなキモいことするな

mylistの置き換えより先に別スレッドがmylist.SyncRoot取得してたら古い方でロック待ちするし
置き換え後にSyncRoot取得したら新しい方でロック待ちする
古い方でロック待ちに入ったらロック取得したスレッドのlockステートメント終了でロックに入る
新しい方ならロックされてないから待たないでそのままロック取得するだろう

830 名前:828 mailto:sage [2008/06/10(火) 12:45:29 ]
やっぱり駄目ですよね。
コレでは排他処理の意味をなさない。

わかりました!!有難う御座います。




831 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:33:47 ]
ListViewのTagで思い出したが、なんでシリアル化してもTagは保持されないのですか?

832 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:51:45 ]
何が入ってるか分からないから
保持しても意味がないものが入ってるかもしれないから

833 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 22:53:07 ]
あまり納得できんが、そういうことなんだと納得しておきます。

834 名前:デフォルトの名無しさん [2008/06/10(火) 23:06:12 ]
ADO.NET 2.0で、System.Data.SqlClientを使って、バッチ処理ってどうやんのが普通なの?
なんかSqlCommandSetってのが昔はあったらしいけど、今は隠されてしまったみたいだし、
ていうか、
var cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandText = "begin transaction;" +
"insert into t values(1,2,3);" +
"insert into t values(2,3,4);" +
....
"commit transaction;";
みたいにカンマで区切っただけのSQL文でも一応できたみたいなんだけど、
C#/ADO.NET2.0/SQL Serverでほかの人はどういう風にバッチ処理してるのか知りたいです。

835 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:19:11 ]
ストアドプロシージャです。

836 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:21:23 ]
リンクの冒険

837 名前:デフォルトの名無しさん [2008/06/10(火) 23:30:44 ]
>>835
お返事ありがとうございます。
ところで、クライアント側でユーザーが複数項目を選んで、
編集して、それで更新みたいな処理の流れだと、可変引数が
使えないストアドでは対応しきれないのでわないでしょうか?

838 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:40:52 ]
>>836
えーと……ゼルダの伝説?

それはともかく、C#のバージョンが分からんが3.0ならLINQがおすすめ
GUIでD&Dするだけでエンティティクラスが作れて、デフォルトでトランザクション処理

LINQ to SQLがSQL Server限定なのがあれだけど

839 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:58:07 ]
>>837
「バッチ処理のパラメータを格納しておくテーブル」を作るという手もある。
そのテーブルにINSERTしてからバッチ用のストアドプロシージャを起動して、
ストアドの中でテーブルを読み込んで、それを元に処理を行う。
結果のサマリーも格納するようにすれば、バッチ処理の履歴も兼ねることができる。

840 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 20:40:20 ]
C#中でエクセルのファイルを開こうとすると、下記のエラーが発生します。
ちなみに.NET Framework 2.0を使っています。

System.Runtime.InteropServices.COMExeption(0x80040154):CLSID{00024500-0000-0000-C000-000000000046}を含むコンポーネントのCOMクラスファクトリを取得中に、次のエラーが発生しました。:80040154
3台あるPC(XP)で1台で起こりますがその原因が分かっておりません。
作成したプロジェクトのbin\release以下には3個のCOMと関係がありそうなDLLがあります。
・Interop.Excel.dll
・Interop.Microsoft.Office.Core.dll
・Interop.VBIDE.dll
これら3個を
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
を使って登録しても結果は同じです。
どういった原因が考えられるでしょうか?





841 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:21:57 ]
そこにはExcelがインストールされていないなんてオチじゃないよな。

「00024500-0000-0000-C000-000000000046 80040154」でググって
最初に出てきたところに書いてあった事例がまさにそうだっただけだけど。
forums.msdn.microsoft.com/en-us/netfxbcl/thread/5a338c18-b2e5-44b5-b15a-530d99a34656/

842 名前:840 mailto:sage [2008/06/11(水) 21:26:24 ]
確認させていただきたいのですが、
Excelがインストールされていない環境では、COMを通じたエクセルファイルの操作というのはやはり出来ないものでしょうか?
というのは、
動作確認をした3台のうち
1台にだけExcelをインストールしていたつもりだったのですが、実際には2台にインストールされており、
上記の
System.Runtime.InteropServices.COMExeption(0x80040154):CLSID{00024500-0000-0000-C000-000000000046}を含むコンポーネントのCOMクラスファクトリを取得中に、次のエラーが発生しました。:80040154
このエラーはエクセルがインストールされていないパソコンでだけ起こっていました。
レジストリのCLSIDに無理やりエクセルを登録たところエラーが変わって
System.IO.FileNotFoundException: CLSID {00024500-0000-0000-C000-000000000046} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80070002。
   場所 NFSAutoGui.Tettou.product(String path)
こういうことになってしまいました。
FileNotFoundExceptionってようするにExcel.exeが見つかりませんよ、ということかと思いますが。

ということで
Excel.exeがインストールされていない状態では、COMを通じたエクセルファイルの操作というのはやはり出来ないものでしょうか?


843 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:31:00 ]
>>842
そりゃ、できんわな。それができたら、みんなExcel買ってくれなくなってMSが困っちゃう。

844 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:36:37 ]
>>841
>>843
どうも。。。
インストールしてないつもりのPCで動いたと思ってたんで動くかと思っていました。
アホ過ぎ。

ところで
Excelのバージョン10が開発マシンに入っております。
COMの参照設定で、Microsoft Excel 10.0 Object Library のバージョン1.4を設定しているのですが、
これで配布した場合って、Excelのバージョン10.0が入っていないと動かないんですかね?
Excel 2007しか入っていないようなPCでは動かないんですか?


845 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:43:55 ]
>>842
だって、そのExcelファイルの操作って、
Excelが持っている機能を呼び出しているだけだ。
普段目にするUIはExcelの1つの顔にすぎない。

846 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:59:28 ]
>>844
YES

847 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:01:05 ]
解放忘れとかやりまくってそうだな

848 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:10:55 ]
こんなこと言ってる奴がまともに作れてるわけないだろ

でバージョン依存したくないならせめてVB.NETにしとけ

849 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:15:41 ]
WSHのVBSとか呼び出すのが楽だよ

850 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:19:02 ]
>>845
そういうことですね。
>>846
了解しました。
>>847
一応タスクマネージャのプロセスタブにEXCELは居ないので大丈夫かと...

ところで、
開発マシンにEXCEL10しか入っていませんが、
その他のバージョンのEXCELも扱いたい場合に必要になってくるのが
PIAとかいうものなのでしょうか?




851 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:40:52 ]
YES

852 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:42:04 ]
あんたは質問を有料にしたいわ

853 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 23:58:05 ]
DateTime型のToString()の書式設定はどんな環境の場合に変わるんでしょうか?
たとえば("d")ならカルチャによって変わりますが、
カスタム書式の("yyyy/MM/dd")も環境によって変わるようです。
どんな環境で変わるんでしょうか??

854 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:37:13 ]
>>853
質問の意味がよくわからないけど「カルチャが異なる環境で変わる」ということが聞きたいのかな。
CurrentThreadのCurrentCultureとかCurrentUICultureとかを色々変えながら動かしてみると
わかりやすいかもしれない。
わかりにくいかもしれない。

855 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:37:53 ]
カルチャによって変わるよ。

"/" はカルチャ依存の日付区切り文字だし、
この世には和暦とかヒジュラ暦とかあるだろ。

856 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:47:15 ]
>>854-855
ありがとうございます。
"/"はカルチャ依存なのですね。
カスタム書式なら"/"も表示してくれると思っていたのですが、それすらも期待してはいけないのですね。
自分の環境では再現できない&相手の環境がよくわからないので質問しました。
では"yyyyMMdd"ならどの環境でも期待通り"20080612"になることを前提にしていいのでしょうか?

857 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:11:03 ]
>>856
>>855の最後の行を読んで下さい><

DateTimeFormatInfo.InvariantInfoわたしとけばいいよ。

858 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:17:15 ]
>>856
CultureInfo ci = new CultureInfo("ja-JP", true);
ci.DateTimeFormat.Calendar = new JapaneseCalendar();
Thread.CurrentThread.CurrentCulture = ci;

Console.WriteLine(DateTime.Now.ToString("yyyyMMdd")); // 200612
Console.WriteLine(DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo)); // 20080612

859 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:17:26 ]
>>857
なるほどありがとうございました!
yyyyでも和暦だと20とかになるんですね。
DateTimeFormatInfo.InvariantInfoで解決しました。

860 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:18:12 ]
>>858
ありがとうございました。勉強してみます。



861 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 04:18:07 ]
Compact FrameworkのWebBrowserでDocumentTextにHTML設定するとプログレスバーが出てくるのが嫌なんだけど
非表示にする方法はあるだろうか?
それともHtmlView.dllをラップしたほうが賢明だろうか

862 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:14:25 ]
できるだけメモリ使用量を減らすため、
IDisposableを実装したほうが良いクラスの判断でまよっています。

クラスA DataSetをプロパティとして保持
クラスB stringをプロパティとして保持
クラスC byte配列をプロパティとして保持

クラスAはDisposeメソッドを用意してデストラクタから呼び出していますが、
クラスBとCもDisposeを用意したほうが良いでしょうか?

また、stringやbyte配列はDisposeメソッドがないので、どうやってメモリを解放するのかもわからないです。

863 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:38:41 ]
全部IDisposable無用

864 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:48:12 ]
Disposeを実装するのは、自前でネイティブリソースを扱う時か
Disposeを持つクラスをメンバとして持つ時だけで良い。

それ以外ではメモリの開放はGCにまかせた方が一般的にパフォーマンスは高い。
なんとなくメモリは少ないほうがいいよね的な考えしかないなら逆効果にしかならんよ。

性能を犠牲にしてでもどうしても局所的にワーキングセットの縮小をせまられるのなら
参照をnullにしてGC.Collectを呼び出す。


865 名前:862 mailto:sage [2008/06/12(木) 12:58:06 ]
>>863-864
ありがとうございます。

なるほど、ではどうしても実装するならクラスAだけで
良いのですね。

Webアプリなのですが、特定のページにアクセスが集中し
使用メモリが大きくなってしまうので、できるだけ解放できるところは
解放したかったのです。

処理終了時にGC.Collectを呼び出すことにします。

866 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:22:05 ]
GCでオブジェクトが回収されるときの動作は
1 デストラクタ(ファイナライザ)があればそれを実行する
2 メモリの回収
Disposeは1を代行するもので、メモリの回収はあくまでもGCが行う。

867 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:22:22 ]
質問
RichTextBoxに画像を挿入したいんですが、無理?

868 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:27:55 ]
とりあえずクリップボード越しなら可能

869 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:35:42 ]
>>868
サンプルコード貼ってある所知りませんか?

870 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:41:09 ]
検索エンジン様が知ってることを知ってる



871 名前:862 mailto:sage [2008/06/12(木) 17:31:00 ]
>>866
ありがとうございます!
だいぶ勘違いしていました。
デストラクタでDispose呼んでも意味ないのですね。

872 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:05:15 ]
え、デストラクタとGCは関係ないんだと思ってた…。
じゃあデストラクタが実行されるタイミングってスコープを抜けた瞬間とは限らないの?

873 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:10:28 ]
C#でデストラクタ?

874 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:13:38 ]
>>872
全然関係ない。スコープと一致させたいときにはusingを使わないといけない。
逆に言えばそれがIDisposeとusingの存在意義。

>>873
まあC# 1.0のころはデストラクタって言っていたはずだし、いいじゃないか。

875 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:16:20 ]
DisposeとGCも全く関係ないよ
種も仕掛けもない本当にただの普通のメソッド

876 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:18:11 ]
あ、そっか。C#はデストラクタなんてほとんど書かないや。

877 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:20:35 ]
本当にどうしてもどうしても必要な場合でなければむしろ書いてはいけない

878 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:56:46 ]
IDisposeを実装するときの基本パターン

class DispBase : IDisposable {
 ~DispBase() { Dispose(false); }
 public void Dispose() { Dispose(true); System.GC.SuppressFinalize(this); }
 public virtual void Dispose(bool disposing) {
  if (disposing) { }
 }
}

GCとの関係といえばこの命令だけ。
System.GC.SuppressFinalize(this);
後片付けが終わったからファイナライザは呼び出さなくていいとGCに指示している。
これでファイナライザは呼び出されなくなる。

879 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:03:21 ]
パフォーマンスとかメモリとかやたら気にする奴が
こういうでたらめやって事態を悪化させやがるんだよな…

GC呼ぶなんてやめとけよ、特にWebではな…


880 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:05:54 ]
余計な一言はいいから、ね



881 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:07:23 ]
いつでも回収できるメモリは空いていると同じということを理解できるまでには修行が必要じゃて
セッションにでっかいオブジェクトの参照抱え込んだままで、GC.Collect呼びまくるとかやってそう

882 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:08:02 ]
これくらい言っとけばたまたま見かけて疑問を持つ奴が増えて好都合

883 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:12:21 ]
そういやあれ不思議なんだよな。
メモリとか異様に気にするのにセッションとかは湯水のように平気で使うのな。


884 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:21:12 ]
結局、明確にスコープ抜けたときにリソースを即座に解放して欲しいという場合で複数から参照されてる場合には参照カウント的なものが必要になるんだ世根(´・ω・`)

885 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:27:41 ]
COM InteropのRCWがそういう具合になってますね。
もう少しスマートにできなかったものか。

886 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:37:51 ]
ファイル書き込みじのフォーマットのことですが。
下記プログラムを実行すると。
=====================
static void Main(string[] args)
{
    StreamWriter sw = new StreamWriter("test.txt",false,Encoding.GetEncoding(932));
    sw.WriteLine("{0,10} => {1}","ABCD",1234);
    sw.WriteLine("{0,10} => {1}","あいうえ",1234);
    sw.Close();
}
=====================
結果として
=====================
      ABCD => 1234
      あいうえ => 1234
=====================
こういった出力になります。
説明を添えると、
ABCDの前に半角スペース文字6文字
あいうえの前に半角スペース文字6文字。
という出力結果になります。

理想としては、
ABCDとあいうえの右端をそろえたいので
あいうえの前に半角スペース文字2文字が入って欲しいのです。(あいうえは8文字とみなす。)

そのようなことは可能でしょうか?
どのようにすれば可能でしょうか?



887 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:34:01 ]
ttp://unicode.org/Public/UNIDATA/EastAsianWidth.txt

ここに、UnicodeにおけるCJKの表示幅の規定があるから、
適当に文字列の表示幅を計算して残りを埋めれば良い

888 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 06:42:57 ]
>>886
つまり、いわゆる全角文字を半角文字2文字分として処理したいってことか?
Encoding.GetByteCount()で、各文字コードにおけるバイト数が得られるから、
Shift-JISにおけるバイト数を使ってスペースの文字数を計算すればいいだろう。
こんな感じで。

Encoding sjisEnc = Encoding.GetEncoding(932);
string text = "あいうえ";
string space = new String(' ', 10 - sjisEnc.GetByteCount(text));
Console.WriteLine("{0}{1} => {2}", space, text, 1234);

889 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:35:46 ]
インストーラーの起動条件でJ#2.0再配布パッケージを
必須にする方法教えて下さい。

890 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:12:29 ]
スレ違い



891 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:16:12 ]
いや 殆どC#で一部だけJ#使ってるんすよ…

892 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:17:38 ]
いや、その理屈はおかしいだろ…

893 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:01:44 ]
その発想はなかったわ
ってかVSスレで聞いたら?

894 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:03:22 ]
ほい 逝ってきます。
すまぬかった

895 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:56:58 ]
delegateを使用して(使用しなくても同様のことができればいいのですが・・・)

using System;
using System.Collections.Generic;

delegate int getItem();

class DelegateTest
{
public static void Main()
{
List<int> liList = new List<int>();
getItem a = new getItem(A);
a += new getItem(B);
a += new getItem(C);

liList.Add(a());
}

static void A(){return 1;}
static void B(){return 2;}
static void C(){return 3;}
}

この様なプログラムを走らせてliListに[1,2,3]が入って欲しいのです。
(当然ながらというか、)実際には[3]しかはいりません。
マルチキャストデリゲートにしたのは実行したいメソッドの数が実行時にしか分からず
できればif文分岐を少なくしたいと思ったからなのですが、
やはりメソッドを一つ一つ実行しなければ無理でしょうか?
もしくはメソッドの戻り値をリストにして、そのリストを次のメソッドの引数をリストにして、最後にaddrangeでしょうか?
何か上手いテクニックがあれば、どなたかご教授下さい。


896 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:04:03 ]
普通にgetItemコレクション作ってforeachでList<int>にAddしてけばよくね?

897 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:09:34 ]
デリゲートの引数にコレクション渡してAddしてもらえば?

898 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 14:14:43 ]
>>895
複数の、戻り値を持つデリゲートを一括で管理したい場合は、
マルチキャスト- ではなく、デリゲートのコレクション/リスト などを使う

例えば、こんなふうに

var funcs = new List<Func<int>> { A, B, C };
var values = funcs.Select(f => f()).ToList();

あと、A,B,Cはvoidじゃなくてintな

>>897
それだと、仕様外の操作(複数追加、Insert、Clear、etc.)まで出来てしまうのであまり良くない
自分しか触らないから何でもいいっていうなら構わないけど

899 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:34:56 ]
add/remove付きのイベントにしてしまえばマルティキャストっぽく見せられるかも
List<getItem> evlist = new List<getItem>();
public event getItem ItemsEvent {
  add { evlist.Add(value); }
  remove { evlist.Remove(value); }
}

this.ItemsEvent += () => 1;
this.ItemsEvent += () => 2;
this.ItemsEvent += () => 3;
evlist.Select(f => f()).ToList();

900 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:01:37 ]
>>897の考え方が一番正当でしょ
コレクションをそのまま渡すんじゃなくて,値を登録するためだけのクラスを作って引数に渡す



901 名前:900 mailto:sage [2008/06/16(月) 19:05:54 ]
考え方は,ってだけだよ
マルチキャストは使うのはあんまり良くないかも

902 名前:895 mailto:sage [2008/06/16(月) 20:14:14 ]
皆さんレスありがとうございます。
とりあえずはコレクションを引数に渡すやり方で実装できました。
ラムダ式を使った方法を教えてくださった898,899さんのやり方は
ちょっと理解ができませんでした・・・申し訳ありません。
デリゲートのコレクションは使ったことがないので勉強してみたいと思います。


903 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:28:26 ]
ITfMessagePump(TSFのInterface)をC# Formアプリで使ってる人いる?
メッセージループが競合してどうすりゃいいか、分からんのだが・・・。

904 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:32:33 ]
いません

905 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:39:48 ]
そうか。だよなー。

906 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:53:11 ]
>>903
ご想像通りメッセージループを自前のものに置き換えるしかない。

907 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:09:54 ]
その方法を知りたいな

908 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:26:33 ]
>>907
メッセージディスパッチャに関してはP/Invokeで動くというか、
普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて
P/InvokeでDispatchMessageすればおk。
必要ならWinFormのApplicationクラスのソースでも眺めて見れ。
折角公開されたんだし。WPFももう公開されたんだっけ?
WPFアプリケーションでWinFormsを併用するときのドキュメントも参考になるかも。

というかメッセージディスパッチャにWPFのApplicationクラスを使いつつ
WinFormsを表示するのが楽かもしれんな。XP以降専用になっちまうが。

あとはExecutionContextの実装もちゃんとやっておくとベター。

909 名前:907 mailto:sage [2008/06/17(火) 03:29:53 ]
>あとはExecutionContextの実装もちゃんとやっておくとベター。

SynchronizationContextの間違い。すまそ。
msdn.microsoft.com/ja-jp/library/system.threading.synchronizationcontext.aspx

910 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:31:08 ]
ぐあ
909==908ね。



911 名前:908 mailto:sage [2008/06/17(火) 04:00:28 ]
実際試してみた。WPFのApplicationクラスでWinForms。
一応動くことは動くみたい。
この方法ならWPFのSynchronizationContextが使われるので
SynchronizationContextはそのままでOK、なはず。
---------------
// PresentationFramework.dll
// System.Windows.Forms.dll
// WindowsBase.dll
using System;
static class Program
{
  [STAThread]static void Main(){ new CustomApplication().Run(); }
}
public class CustomApplication : System.Windows.Application
{
  protected override void OnStartup(System.Windows.StartupEventArgs e)
  {
    base.OnStartup(e);

    var form = new System.Windows.Forms.Form()
    {
      Width = 640,
      Height = 480,
      Text = "Test Window",
    };
    form.Disposed += (_o, _e) => this.Shutdown();
    form.Show();
  }
}

912 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:03:10 ]
>>908
ありがと。
Application.csは見ていて、FPushMessageLoopでGetMessageWしてるのは確認したんだが、
ThreadContextの処理と整合性を取りつつも、
ITfMessagePump::GetMessageする確実な手段が分からなくてね。

ThreadContext周りの処理はinternal/privateがひしめいていて、
うかつに手を出せないし、お手上げ状態。

WPFは要件的に採用は厳しいかな。

いずれにせよ、overrideなり、Filter的なものでGetMessegeを自前の処理を行う仕組みはなさそうだね。

>普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて
>P/InvokeでDispatchMessageすればおk。
おkな理由を教えてもらえると嬉しいな。

913 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:24:01 ]
>>912
>おkな理由を教えてもらえると嬉しいな。

PresentationFramework.dllが中でやっていることがまさにそれだから、で説明になる?
System.Windows.Threading.Dispatcher.PushFrameImplおよび
System.Windows.Threading.Dispatcher.GetMessageと全く同じことをすれば動く。
で、納得してもらえるんだろうか……

914 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:36:47 ]
たとえばNetworkStreamのBeginReadでAsyncCallbackを指定したとする。

このコールバック中にEndReadで例外が発生したらアプリが強制終了してしまう。

この例外をメインスレッド、少なくとも呼び出したスレッドで処理するにはどうすればよろしいでしょうか?

915 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:42:52 ]
例外を補足できない?

916 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:27:34 ]
>>914
Windowsアプリなら、Control.BeginInvokeでEndRead呼べば
発生する例外もメインスレッドの管轄になるはず
ただ、例外チェインの最後のエラーしか取れないかも

コンソールアプリならしらね

917 名前:デフォルトの名無しさん [2008/06/18(水) 10:06:15 ]
xmlファイルからデータを取得する方法について教えてください。

下記のxmlファイルtest1.xmlを作成しました。
test1.xml
 <?xml version="1.0" encoding="utf-8" ?>
  <Items>
   <Item ID="001">
    <Name>aaaa</Name><Age>10</Age>
   </Item>
   <Item ID="002">
    <Name>bbb</Name><Age>20</Age>
  </Item>
 </Items>

test1.xmlのデータを下記のプログラムで読み込みました。
001  XmlDocument xmlDoc = new XmlDocument();
002  xmlDoc.Load("c:\\test1.xml");
003
004  string wID = "002";
005  XmlNode xmlNode = xmlDoc.SelectSingleNode("//Items/Item[@ID='" + wID + "']");
006  string wName = xmlNode.SelectSingleNode("//Name").InnerXml;
007  string wAge = xmlNode.SelectSingleNode("//Item/Age").InnerXml;

私の予想ではwNameには"bbb"、wAgeには"20"が入ると思っていたのですが
実際にはwNameには"aaa"、wAgeには"10"が入ります。

プログラムの005行目の処理でxmlNodeには確かに<Name>bbb</Name><Age>20</Age>が抽出されています。
006-007行目で、そこから更に//Nameを抽出したのにwNameに"bbb"が入らず"aaa"が入ってしまうのは何故ですか?

また,このような絞込みっぽい処理を行うには、どのようにすれば良いでしょうか。

918 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:10:56 ]
そこで // 使っちゃ駄目だろ

919 名前:917 mailto:sage [2008/06/18(水) 10:17:43 ]
>>918
Σ(゚д゚lll)
//はずしたら上手くいきました。

なぜこういう事になるのか勉強して出直してきます。
ありがとうございました。

920 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:16:35 ]
javaばっかりでいつも不思議に思っているんですが、
キーワードでas base isとかがかぶったらどういう回避方法があるんでしょうか。




921 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:21:07 ]
何を言いたいのか良く分からん

922 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:28:48 ]
@as @base @is

923 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:36:16 ]
ソース上で既に使っていて、キーワードとかぶっているときはどうなるんでしょうか。
またソースに手を入れて変更しないとダメなんでしょうか。

924 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:51:53 ]
1.0から3.0までで変数名に使えないキーワードは増えてなかったと思うが

925 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:38:42 ]
c, javaのソースからc#に移植というか少し手を入れるときキーワードの問題が発生しませんか?
特にc#は独自のキーワード名が多いみたいですけど。


926 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:41:35 ]
勝手な拡張もいいんですけど、もとのソースの関数名がas, in, baseとかだとどうするんでしょうか?
関数名のAPIの方を変更できないし泣きませんか?
そうするとC#で作る気力も無くなるんですけど。

927 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:43:58 ]
C#はjavaじゃないから嫌いだとか
子供に生まれてこなくて良かったとか言い出す奴らは
来てもらわなくてもいいよ


928 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:48:49 ]
いや、そういうことじゃないんですけど。
まともにプログラミングの話を出来ないなら、別にいいですよ。
噂どおり、C#の人はC++厨房と変わらないようですねw

929 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:53:56 ]
asとかを使いたければ@asとしてくれ
他言語からの移植なんてそう簡単にはいかんよ

930 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:54:39 ]
typedefとか#defineが欲しいといいたいのかな?泥沼だと思うがね。
同じ言語の世代間の違いならコンパイルオプションや
pragmaのようなコンパイル指令で逃げるのだろうけど、
他言語からの場合は良識に任せるしかないな。
移植を前提にしたコードでbaseとかinとかselfとか変数に
使ってたらそういう名前を使った奴がアホだろ。




931 名前:デフォルトの名無しさん [2008/06/18(水) 20:56:23 ]
簡単なことだし、ここでちゃんと教えればすむことなのに、「C#の奴はやっぱり変人しかいないよ」とか噂を流される方がいいのかな?
まあ、>>927みたいなしきり屋がいるようなところじゃ、こっちの方がよくわかんないけど。

ここでは>>927みたいなしきり屋に従わなければいけないのですか?

932 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:58:36 ]
伊武雅刀の「子供達を責めないで」のオマージュだろね。
フルすぎるネタで若い子にはわからないぞ;;

933 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:05:04 ]
>>931
はいはい、とっとと噂を流す仕事に戻ってね。

934 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:05:46 ]
これ聞いて落ち着け
ttp://jp.youtube.com/watch?v=YaCkfvm3Oyw


935 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:16:13 ]
>>930
Cならともかく、C#みたいなしんまい言語を前提にコードかけるかよw
in selfとかをキーワードに設計する方が多言語からの移植を考えないようなアホじゃないのか。
おまえはいつも、次の言語のキーワードとぶつからないように考えながら書いてるのか?アホはおまえだなw

936 名前:デフォルトの名無しさん [2008/06/18(水) 21:18:57 ]
>>933
Javaの世界ではC#の奴はめちゃ嫌われてるよ。
演算子オーバーロード―がどうとかうるさいしww
VBほどじゃないけど(笑)

937 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:21:33 ]
それをC#のスレで言って何がしたいのか分からん
嫌われてるからJavaやれってか?
そんな気を使わなくてもC#一筋なやつの方が少ないだろ

938 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:26:14 ]
C#一筋で食っていけるほど仕事がないな。

939 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:26:54 ]
Javaの新機能はほぼ全てC#のパクリなのにな

940 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:28:49 ]
だから移植前提で独自キーワード入れないでほしいんだけど。またMSの悪い癖(独自拡張?)がでちゃったんですか?



941 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:31:26 ]
昔COBOLという言語があってな。
ていうか独自キーワードってなんだよ。
Javaのキーワードが他の言語からの移植を考えて決められてるなんて初耳だ。

942 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:33:07 ]
>>940
Javaを使い続ければすむことじゃないのか?

943 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:51:19 ]
Javaって $_ みたいな名前定義できなかったっけ?

CLIだとどうなってるんだろ?

944 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:59:50 ]
Java屋?
C#出たときあちこち馬鹿にしまくったくせに掌反してパクり始めた奴らだろ?
そりゃあんだけ醜態晒せば嫌って、なかったことにでもせんとなwwww

まあそれはいいとして @ つければキーワードとして扱われなくなるよ。VBなら[]で囲むんだっけかな

相互運用のためにその手の機能を持つことが推奨されてる。ちなみにCILは「どんな識別子でも」持てるから
限界はあるんだけどな

945 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:06:13 ]
移植するのに変数名まで同じにしたい痛い人がいるスレはここですか

946 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:07:26 ]
実際そんなに独特な予約語多くないだろ
2.0以降に追加されたキーワードは全て文脈次第だし

947 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:09:25 ]
あそうそう、コンテキストキーワードも多いっての書き忘れてた

948 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:14:03 ]
半年も使わないと忘れちゃうしキーワード多すぎだろ。
いちいち覚えるのとか別に苦痛じゃないんだけど、なんかMSに束縛されてるみたいで嫌じゃないか?
まあ、変なところがあったらコンパイラが叱ってくれるからいいんだけど…

949 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:17:23 ]
…半年はさすがに記憶力悪すぎかろくに触ってなかったレベルだろう。

950 名前:デフォルトの名無しさん [2008/06/18(水) 22:19:51 ]
scriptfpとかpackageはそのままでjavaに移植できるの?
java使ったことないんでしらんけど。

そもそも多言語移植の時に変数名そのままで移植できなきゃやだやだやだ
なんてバカかよ。ほとんど意味ないと思うんだが。
そこまでしたいならまずjavaの段階で適宜リファクタリングして移植すりゃ
いいことなんじゃねーの?



951 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:21:05 ]
ざっくり読むと
アホがjavaからC#へ移植を試みて文句言ってる
のに食いついたって感じ?
暇だなぁ、お前等

952 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:23:01 ]
J#でもつかってろよ

953 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:26:15 ]
おお、まさにJ#でこの話終わりだなww

954 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:26:25 ]
コンテキストキーワードよりもはるかに気持ち悪いのは,
インターフェイスとか抜きで特定の名前(引数)のメソッドの呼び出しに変換される機能
foreach→GetEnumerator()とかコレクション初期化子→Add(引数任意)とかクエリ式とか

955 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:28:08 ]
C#コンテキストキーワードって
get set partial where yield value と後はC#3.0で導入されたクエリキーワードぐらいだよな。

>忘れちゃうキーワード
explicit implicit stackalloc unchecked volatile あたりは時々忘れそうになる。

956 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:30:41 ]
add/removeとかも<コンテキストキーワード

957 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:30:57 ]
そろそろ次スレ立てたほうがいい?970くらいでいい?

958 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:32:24 ]
>>954
java5にも同じのあるじゃないか
Iterable/Iteratorでfor ( : ) をお忘れではないか

959 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:35:22 ]
>>958
C#のはダックタイピング的なのでちょっと違う。
多分>>954はその事を知ってて書いてる。

960 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:52:38 ]
Whereという名前のメソッドがあればクエリ式のwhere使えるんだよね



961 名前:デフォルトの名無しさん [2008/06/18(水) 22:53:33 ]
>>955
ええ!それは忘れないだろ。
それ、使わないならC#言語じゃなくてもいいでない?
ん・・・このスレのレベルは、理解に苦しむ・・

962 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:03 ]
>>959
了解、インターフェイスがなくてもメソッドの名前が一致してればOKという話か。
usingはなぜかIDisposable.Dispose()でないと受け付けない。
これもメソッドの名前だけで使わせて欲しいよ。

963 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:17 ]
>>956
リファレンスのキーワードの項に、
>>955のとクエリキーワードは載ってるけど、add/removeが載ってない
中の人にも忘れられてる?

964 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:03:23 ]
add/removeはデリゲートだけでデリゲートでも普通使わないからやっぱり忘れられていると思う。

965 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:03:48 ]
C#というのは、Javaと比べるとポインタ演算unsafeとstackallocが売りだと思うんだけど…

966 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:07:13 ]
いやなウリだな

967 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:08:34 ]
>>964
WinFormでもWPFでもコントロールのイベントはカスタムしてるのがほとんどだぜ

968 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:11:15 ]
便利なものはどんどん積極的に組み込んでアピールしていこうっていうのがコンセプトでしょ

969 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:13:49 ]
ヘジたんはむしろ抑え役っぽい

970 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:17:46 ]
抑え役だし押さえ気味だよなぁ。
というかあいつら基本的に自分たちでだいぶ使ってから出すから
まぁそんなもんかという気はする。



971 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:32:38 ]
VBと違ってクエリ演算子のサポートが消極的すぎ
中途半端に付けるくらいならクエリ式なんて無くてよかった
メソッド形式だけだとどうしてもインパクトに欠けるからなあ

972 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:32:42 ]
javaがいったいいくつ独自キーワードを取り入れたか

973 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:35:19 ]
今のC#のウリは関数型とラムダ式だろ
JavaやC++とくらべて進んでるところは

974 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:38:10 ]
次はついに動的型くるかも

975 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:42:53 ]
動的型というか、動的っぽい記述が一時的につかるようになる dynamic ブロックになりそうかな。

976 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:45:46 ]
GetEnumeratorは仕方ない。
ジェネリックがなかったころだから。


977 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:48:39 ]
Mix-in 入れてくれんかな

978 名前:デフォルトの名無しさん [2008/06/18(水) 23:49:20 ]
相変わらずC#はキモイな
どこがどうキモイかを気がついてないようだけどw

979 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:54:12 ]
>相変わらずC#はキモイな
何言ってる?
現在進行形でキモクなってんだよっ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef