2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

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

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

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

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

前スレ
ふらっとC#,C♯,C#(初心者用) Part47
http://pc12.2ch.net/test/read.cgi/tech/1257067411/

2 :デフォルトの名無しさん:2009/11/18(水) 23:56:43
-----関連スレ

C#, C♯, C#相談室 Part55
http://pc12.2ch.net/test/read.cgi/tech/1255530225/

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

----参考サイト

http://www.google.co.jp/
http://msdn.microsoft.com/ja-jp/library/default.aspx
http://homepage3.nifty.com/midori_no_bike/CS/
http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html
http://dobon.net/vb/dotnet/
http://jeanne.wankuma.com/tips/
http://www.labasp.net/CsharpNote/

3 :デフォルトの名無しさん:2009/11/19(木) 00:10:27
zip解凍を下記コードでしているのですが、
ClickOnesで発行しインストールしたPCの中で一台だけ例外で動作しません。
VisualStudioから「デバックを開始」だと正常に動きます。
動かないOSはXPです。(他のXP機やVista・7は動作します。)
Shell32は参照設定してローカルコピーもしてます。

try {
Shell32.ShellClass s32 = new Shell32.ShellClass();
Shell32.Folder zip = s32.NameSpace(filename);
Shell32.Folder zipex = s32.NameSpace(dir);
Shell32.FolderItems zipItem = zip.Items();
zipex.CopyHere(zipItem, 20);
}
catch (Exception e) {
MessageBox.Show(e.ToString());
}

<例外の内容>
System.InvalidCastException: 型 'Shell32.ShellClass'のCOMオブジェクトを
インターフェイス型'Shell32.IShellDispatch5'にキャスト出来ません。
IID '{866738b9-6cf2-・・・略}'が指定されたインターフェイスのCOMコンポーネント上でのQueryInterface 呼び出しのときに
次のエラーが発生したため、この操作に失敗しました:
インターフェイスがサポートされていません(HRESULTからの例外:0x80004002
(E NOINTERFACE))。
場所 Shell32.ShellClass.NameSpace(Object vDir)

エスパーな内容で申し訳ありませんが、宜しくお願いします。


4 :デフォルトの名無しさん:2009/11/19(木) 00:11:30
前スレ950です
>>前991
確かに、1/3で呼ばれることも有りますね…
幸い除外値は1つなのですが、他に方法ありますか?

5 :デフォルトの名無しさん:2009/11/19(木) 00:15:24
よっぽど極端な場合なら
int[] 全ての許容値 = {…};
result = 全ての許容値[random.Next(0, 全ての許容値.Length)];

6 :デフォルトの名無しさん:2009/11/19(木) 01:26:52
>>3
http://msdn.microsoft.com/en-us/library/bb774116(VS.85).aspx
IShellDispatch5 は、Vista 以降に追加されたインターフェース
XPからは使えないわな。
bin以下に interopなんたらって生成されてない?
されてるなら、そいつはdllコピーを見に行かずPCにインストールされてるdllを見にいく。

動作しているXPのマシンはたぶんXPでも動作するようなパッチがあたってんじゃね?
MSUpdateでとりあえず全部最新にしてみたら?

7 :デフォルトの名無しさん:2009/11/19(木) 08:29:54
>>4
結果をずらせばいい。

2〜8の乱数で除外値5の場合、
2〜7の乱数を発生させて、結果が5以上なら+1する。

一般化すると・・・
min〜max-1の範囲で乱数発生
結果がexclusion以上の場合は+1する。

これだと乱数発生は一回ですむし、ループもいらない。

8 :デフォルトの名無しさん:2009/11/19(木) 08:51:50
Visual C# 2008 Express Edition で勉強中です
全国の市町村検索データベースを作成しようと思っています
(漢字、よみがなであいまい検索できるようにしたいと思っています)

全国の市町村の数くらいなら、テンプレートの「データセット」でも大丈夫でしょうか?
またはSQLiteを使った方がいいでしょうか?
それとも他にいい方法がありますでしょうか?


初心者すぎて、入り口が広すぎで検索しても絞り込めないです
お知恵をお貸し下さい


9 :デフォルトの名無しさん:2009/11/19(木) 09:23:17
>>8
せめてDB使ったほうがいいんじゃないかな?


10 :デフォルトの名無しさん:2009/11/19(木) 10:39:56
Graphics#DrawString() を使って縦書き描画をすると、
ローマ数字が90度回転して描画されてしまうのですが、
どうしたら良いでしょうか?

[ソース]
Graphics g = pictureBox1.CreateGraphics();
String drawString = "あいうえおTUV";
Font fnt = new Font("@MS ゴシック", 16, FontStyle.Bold);
StringFormat sf = new StringFormat();
sf.FormatFlags = StringFormatFlags.DirectionVertical;
g.DrawString(drawString, fnt, Brushes.Black, 0.0F, 0.0F, sf);

fnt.Dispose();
g.Dispose();

11 :3:2009/11/19(木) 12:20:05
>>6
>bin以下に interopなんたらって生成されてない?
されてましたorz
DotNetZip Libraryを使ってみる事にします。
回答ありがとうございました!

12 :3:2009/11/19(木) 14:00:41
ウィンドウに関連付けられたテキストを取得したいのですが、
取得するテキストサイズが分からない場合どうすればいいのでしょうか。
あらかじめ大きめにサイズを指定しておくしか無いですか。
現在は下記のようにしていますが、途中までしか取得できません。

byte[] buf = new byte[255];
StringBuilder sb = new StringBuilder();
sb.Length = 255;

SendMessage(hWnd, WM_GETTEXT, 255, sb);

13 :デフォルトの名無しさん:2009/11/19(木) 14:03:52
WM_GETTEXTは見つけられて何で気付かないのかねぇ

14 :3:2009/11/19(木) 14:23:44
>>13
ありがとうございます!
WM_GETTEXTLENGTHで取得出来そうです。

15 :デフォルトの名無しさん:2009/11/19(木) 15:20:04
そもそも3の質問は解決してるんだから
同じ人って主張する必要ないんじゃない?w

16 :デフォルトの名無しさん:2009/11/19(木) 15:41:02
>>15
恥ずかしながら名前の消し忘れです。
>>12を書き込んでから赤面しましたが、
書いてしまったので質問中は統一しました><

17 :8:2009/11/19(木) 18:18:22
>>9
いろいろ調べて、敷居を低くしました(涙

・System.Data.SQLiteでデーベース構築
・PupSQLiteで市町村データベースインポート

後は検索するコードをがんばればいけると思っています
まぁすんなりはいかないと思いますが、その時はみなさんのお力を貸して下さい

18 :デフォルトの名無しさん:2009/11/19(木) 19:07:08
>>17
イイヨイイヨー
頑張れ

19 :デフォルトの名無しさん:2009/11/19(木) 19:24:51
ComboBoxのDatasourceにDataTableをぶち込んだ後に、Datasourceから値を取得したらArrayになります。
ここからLINQで操作したいのですがいい方法ないでしょうか?

20 :デフォルトの名無しさん:2009/11/19(木) 20:09:46
datasourceから取り出すときにキャスト

21 :デフォルトの名無しさん:2009/11/19(木) 20:48:11
まえスレ>>998
できるよ。


22 :デフォルトの名無しさん:2009/11/19(木) 22:02:17
タブコントロールを使ってるんですが
デフォルトがだっさくてしょうがない
外見変える方法はないですか?

23 :デフォルトの名無しさん:2009/11/19(木) 22:07:10
自分で描画すればー
検索キーワードはオーナードローとカスタムドローでどうぞ

24 :デフォルトの名無しさん:2009/11/19(木) 22:09:22
WPFならコード書かずに見た目変え放題

25 :デフォルトの名無しさん:2009/11/19(木) 22:10:32
>>24
XAML弄るのはコード書かないとは言えない気がするぜ
ハードル的な意味で

26 :デフォルトの名無しさん:2009/11/19(木) 22:15:28
Expression Blendと格闘中
変え放題ねぇ、いつになったらできるようになるんだろう

27 :デフォルトの名無しさん:2009/11/19(木) 22:16:28
プログラマならXAMLは手書きから入った方が理解しやすいと思うよ

28 :デフォルトの名無しさん:2009/11/19(木) 22:34:53
ありがとうございました

29 :デフォルトの名無しさん:2009/11/19(木) 22:35:16
C#のMSDNみても情報量膨大すぎて何からはじめればいいかわからん。
C#初めてなんだけどまずMSDNのどのページを見ればいいの?

30 :デフォルトの名無しさん:2009/11/19(木) 22:44:30
C#の言語仕様についてなら・・・

MSDNのC#プログラミングガイド
http://msdn.microsoft.com/ja-jp/library/67ef8sbd.aspx

MSDNでもいいけど↓なんかもお勧め
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/index.html


31 :デフォルトの名無しさん:2009/11/19(木) 22:49:31
将来的な需要を言うとC++とC#だとどっちが良いのかな?


32 :デフォルトの名無しさん:2009/11/19(木) 22:50:43
C++じゃねえかなあ
個人的にはC#のが好きだが

33 :デフォルトの名無しさん:2009/11/19(木) 22:51:56
だよね・・・C++を学ぶなら先にC#学んでおいた方がいいかな?

34 :デフォルトの名無しさん:2009/11/19(木) 23:05:25
設定を効率よく保存する方法ってどんなのがありますか?
バイナリやテキスト(.iniなど)などが主流だとは思うんですけどね

35 :デフォルトの名無しさん:2009/11/19(木) 23:08:13
将来的な需要ならC#だろ

36 :デフォルトの名無しさん:2009/11/19(木) 23:09:51
アプリケーション設定かXmlSeriarizer

37 :デフォルトの名無しさん:2009/11/19(木) 23:10:46
>>34
どの観点から見て効率よくなのかが分からない

プログラム的にはシリアライズしてファイルに書き出した方が楽だろうけど
人間がそれを読むのはテキストや設定ファイルに比べれば多少面倒臭い

38 :デフォルトの名無しさん:2009/11/19(木) 23:13:48
バイナリとテキストってそれ以外になにがあるっちゅーねんってつっこみはおいといて、
C#でやるならxmlが主流ですよ。

>>31
Windows上でアプリケーション書くだけっていうならC#じゃないのかねぇ。
言語学ぶだけならC#先でもC++先でもどっちでもいいけど
VC++は色々ややこしいからやめといた方がいいと個人的には思う

39 :デフォルトの名無しさん:2009/11/19(木) 23:15:38
もうヘッダ眺めただけで拒絶反応でるくらいC++嫌いになった

40 :デフォルトの名無しさん:2009/11/19(木) 23:21:30
今のC++は変態的なテンプレートプログラミング言語って感じがするなぁ
大人しくC#から入った方が幸せじゃね?


41 :デフォルトの名無しさん:2009/11/19(木) 23:24:11
構造体が嫌いでxmlよりini使ってるんだけど
実際どうなのかな?

42 :デフォルトの名無しさん:2009/11/19(木) 23:26:38
>>41
読み書きって自前で実装してるの?

43 :デフォルトの名無しさん:2009/11/19(木) 23:27:10
構造体とXMLに何の関係があるのかも分からんし
どうなの?って何聞いてるんだか意味不明だよ

44 :デフォルトの名無しさん:2009/11/19(木) 23:29:53
わかりません

45 :デフォルトの名無しさん:2009/11/19(木) 23:33:23
iniはフラットな構造だけど
xmlは階層構造してる(=構造体)ってことじゃないかね?
どうなのかなって言われても時代遅れですとしか。

46 :デフォルトの名無しさん:2009/11/19(木) 23:40:04
>>45
iniも一応階層構造だし、むしろシンプルな構造体はiniに近いでしょ

47 :デフォルトの名無しさん:2009/11/19(木) 23:42:36
じゃあマークアップ言語が嫌いってことか
WPFとか駄目なんかな

48 :デフォルトの名無しさん:2009/11/19(木) 23:43:28
>>10
"@MS ゴシック" を
"MS ゴシック" にする

49 :デフォルトの名無しさん:2009/11/19(木) 23:47:28
すいません質問させてください。
以下のようなプログラムを動かした場合に、Main()の中の
@をAに書き換えても(どちらでも)問題なく動作します。
Func()内部で生成されるインスタンスArrayListのスコープを考えると
@の書き方が正しいのでしょうか?
そもそもAでは
 Func()から復帰するときに復帰値をコピーしようとして
 復帰値をコピーする受け皿インスタンスが無い。→例外!
みたいな動作かと思っていました。
Aにしたとき、al = b.Func();の行で何が起こっているのでしょうか?

解かりにくい説明かもしれませんが、よろしくお願いします。

class aaa {
  public static void Main() {
    @ArrayList al = new ArrayList(); //AArrayList al;
    bbb b = new bbb();
    al = b.Func();
    foreach (string s in al) Console.WriteLine(s);
  }
}
class bbb {
  public ArrayList Func() {
    ArrayList al = new ArrayList();
    al.Add("111");
    al.Add("222");
    return al;
  }
}

50 :デフォルトの名無しさん:2009/11/19(木) 23:56:23
newされた参照型のオブジェクトはどこかになんとなく存在してて、
常にそのオブジェクトの電話番号でやり取りするの
変数に入ってるのもメソッドの引数も戻り値も全て実体ではなくて電話番号

51 :デフォルトの名無しさん:2009/11/19(木) 23:59:32
受け皿インスタンってなんだよw

52 :デフォルトの名無しさん:2009/11/20(金) 00:06:14
参照型について勉強しましょう
どんな本やサイトにも説明があります
ここでちょっと聞いて解るようなものではありません

53 :49:2009/11/20(金) 00:22:42
どうも回答ありがとうございます。

>>50
なるほど、newしたインスタンスのスコープを勘違いしていました。
メソッド内で生成したものでも、メソッド復帰時に解放される
わけではないのですね。
null指定したりGCで殺されるまでnewで生成されたインスタンスは生きつづける、
と理解できました。

>>51
いや〜、Cだと関数呼び出しで構造体受け渡すとコピーが発生するじゃないですか?
そういうイメージなのかと勘違いしていました。

>>52
ポインタ参照だと理解しています。


54 :デフォルトの名無しさん:2009/11/20(金) 00:24:34
参照型なんて余裕
http://msdn.microsoft.com/ja-jp/library/cc406735.aspx
下のほうにある図みりゃおk

55 :デフォルトの名無しさん:2009/11/20(金) 00:28:54
>>53
null指定したり〜〜行き続ける

いくらなんでも使用中に勝手に殺されたら嫌過ぎるだろwwwwwwww
つかいものになんねぇよwwwwwwwww

56 :デフォルトの名無しさん:2009/11/20(金) 00:53:47
null代入しても消えません
使われなくなったらそのうちいつのまにか消えてます

57 :デフォルトの名無しさん:2009/11/20(金) 03:42:22
int a;
double b=2.32;
a=(int)b; //a=bはダメ

みたいに(int)をつけなきゃいけなくなってるのは
int型やdouble型にimplicitだかが定義されていなくて
explicitだけオーバーロードされてるから
ってあってますか?

でもMSDNのdouble構造体ってとこみたら
演算子のオーバーロードにexplicit書いてないけど
何か特殊な方法でやってるわけじゃないよね?

58 :デフォルトの名無しさん:2009/11/20(金) 05:50:33
組み込み型とか配列は特殊で、機能がILや言語レベルで実装されていたりする

59 :デフォルトの名無しさん:2009/11/20(金) 09:22:30
システムの機能に任意のタイミングで
SQL鯖2008のバックアップを出来るようにしてほしいと言われたんだけど
どれでいこうか迷ってる

@マネージメントスタジオを直で使わせる
Aosqlのバッチを用意して使わせる
B2のバッチをPGからキック
CPGから直でバックアップSQL実行
DSQLDMOを使う

他にもありそうですが、皆さんどのような方法で実装していますか?

あと皆トランザクションをある程度の量で切り捨てなければいけないような環境だとどうしてるんだろう・・・


60 :デフォルトの名無しさん:2009/11/20(金) 09:39:53
Microsoft SQL Server 総合スレ 7
http://pc11.2ch.net/test/read.cgi/db/1231665917/l50


61 :デフォルトの名無しさん:2009/11/20(金) 10:06:02
>>60
サンクス

すれ違いごめ
そっちで聞いてきます。


62 :デフォルトの名無しさん:2009/11/20(金) 11:43:31
リストビューでカラムを適用したアイテムのtextをカラムの長さに合わせて自動で折り返して
欲しいのですが、これはラベルワープtrueではだめなのでしょうか?。
自分で長さに合わせて改行しないとだめですか?。

63 :デフォルトの名無しさん:2009/11/20(金) 11:56:17
改行を入れても改行されませんよ
フフンw

64 :デフォルトの名無しさん:2009/11/20(金) 12:10:09

高さの計算とかめんどくさいだろうしオーナードロ-とかでやるのも厳しいからやろうとしたこともないが

DataGridViewで代用してるなぁ…

65 :デフォルトの名無しさん:2009/11/20(金) 12:29:35
ラベルワープって何だよ

66 :デフォルトの名無しさん:2009/11/20(金) 12:34:12
ワードラップだろ

67 :デフォルトの名無しさん:2009/11/20(金) 12:54:43
(Keys.G | Keys.Alt)をXmlSerializerでシリアライズすると
<Keys>LButton RButton Cancel MButton XButton1 XButton2 A B C D E F G Alt</Keys>
こうなるんですけど、
なんで
<Keys>G Alt</Keys>
こうならないのか意味がわかりません
誰か助けてください

68 :デフォルトの名無しさん:2009/11/20(金) 13:00:31
FlagsAttributeがついてるせいで内部で少しややこしい処理をしている
デシリアライズすれば元に戻るから気にするな

69 :デフォルトの名無しさん:2009/11/20(金) 13:06:59
ありがとうございます!!
ファイルの中身がめちゃくちゃになってたからびっくりして質問しちゃいました
助かりました!!

70 :デフォルトの名無しさん:2009/11/20(金) 14:07:35
>>57
それはintとdoubleに互換性が無いから。
それぞれ用途が違い内部表現も違うので、相互に変換する場合には明示的に変換処理が必要。
C#の場合はキャストまたはas構文を使う。
intとdoubleに関しては組み込み型なのでキャストで十分。

IEEE754 で調べてごらん。

71 :デフォルトの名無しさん:2009/11/20(金) 14:14:36
すいませんListViewで垂直スクロールバーが出ているかどうか知りたいんですが
何か方法はありませんか?

72 :デフォルトの名無しさん:2009/11/20(金) 14:24:09
ListViewを継承したクラスを作って
protectedなメソッド調べてごらん。

73 :デフォルトの名無しさん:2009/11/20(金) 14:25:43
>>21
ありがとです。
だったらスマートフォン買うときはWindowsMobile機にしよっと。

74 :デフォルトの名無しさん:2009/11/20(金) 15:48:46
C#の配列って
C言語の配列と違って
メモリ上に物理的に連続してないの?
C言語なら
405FAC40にa[0]があったら
405FAC44にa[1]があって
・・・・AC48にa[2]、というふうに
連続してたけどC#は違う?

75 :デフォルトの名無しさん:2009/11/20(金) 15:51:27
違う。
stackalloc使いなさい。

76 :デフォルトの名無しさん:2009/11/20(金) 15:53:44
もしくはfixed

77 :デフォルトの名無しさん:2009/11/20(金) 16:05:49
へぇ。C#の配列ってめちゃくちゃに並んでるんだ?C言語と比べて効率悪そうだね。

78 :デフォルトの名無しさん:2009/11/20(金) 16:08:40
連続してる。だからunsafeでポインタが使える。
ただし配列全体は固定されていない。移動することがある。

79 :デフォルトの名無しさん:2009/11/20(金) 16:11:52
それはガベージコレクタが勝手にやってるんでしょ?

C#の参照型はポインタ型と違って直接アドレスを表示できないけど
例えば

405FAC40にa[0]があったら
405FAC44にa[1]があって
・・・・AC48にa[2]、というふうにならんでたのがガベージコレクタが勝手にコンパクションを実行して

638AC044にa[0]
638AC048にa[1]
・・・・C04Bにa[2]

みたいになっちゃうってことでいいの?

80 :デフォルトの名無しさん:2009/11/20(金) 16:17:29
それを知って一体何する気なんだろう・・・・

あ、いや 気になることってあるもんね

81 :デフォルトの名無しさん:2009/11/20(金) 16:20:13
効率の観点から言ったら内部では連続してるんじゃねえかなぁ
それを前提にしてはいけないんだろうが

82 :デフォルトの名無しさん:2009/11/20(金) 16:33:52
おれも連続しているとは思う
どうせアドレスなんか使わないけど

83 :デフォルトの名無しさん:2009/11/20(金) 16:43:55
データがそこに直接あるのではなくてJPがあるんじゃないの

84 :デフォルトの名無しさん:2009/11/20(金) 16:44:14
C#(CLR)の配列は本質的にはgcnewなので、連続はしている。
79のいうように、知らない間にアドレスが変わってる、なんてことはありうる。
そういうことをやってもらうためのガベージコレクションでもあるわけで。

85 :デフォルトの名無しさん:2009/11/20(金) 16:50:28
参照は移動しても大丈夫。
ポインタはそうはいかない。
配列全体は連続してる。

86 :デフォルトの名無しさん:2009/11/20(金) 19:37:27
そんな事より>>1よ、ちょいと聞いてくれよ。スレとあんま関係ないけどさ。
昨日、近所のメモリ内行ったんです。メモリ内。
そしたらなんかインスタンスがめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか垂れ幕下がってて、ジェネレート2、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、ジェネレート2如きで普段来てないメモリに来てんじゃねーよ、ボケが。
ジェネレート2だよ、ジェネレート2。
なんかダイナミック変数とかもいるし。ダイナミック配列でメモリか。おめでてーな。
よーしパパ逆参照しちゃうぞー、とか言ってるの。もう見てらんない。
お前らな、ガベージコレクションやるからその席空けろと。
メモリ内ってのはな、もっと殺伐としてるべきなんだよ。
隣のアドレスに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。

87 :デフォルトの名無しさん:2009/11/20(金) 19:42:53
garbage collector in real-life

88 :デフォルトの名無しさん:2009/11/20(金) 22:13:01
ホームページビルダーみたいなエディタをC#で
作ってみたいなー

89 :デフォルトの名無しさん:2009/11/20(金) 22:14:59
ホームページビルダー懐かしいな
今はWikiみたいに簡単に自分のページを作れるけど
ページビルダーみたいなのっていまだに売れてるんだろうか

90 :デフォルトの名無しさん:2009/11/20(金) 22:15:12
ここはお前の日記帳じゃねえんだ

91 :デフォルトの名無しさん:2009/11/20(金) 22:16:06
WPFのRichTextBoxで作ったFlowDocumentをXHTMLに変換すれば楽勝

92 :デフォルトの名無しさん:2009/11/20(金) 22:41:40
>>87
パソコンがなくなった。どうしてくれる

93 :デフォルトの名無しさん:2009/11/20(金) 22:42:48
友達いない奴はみんなGCに回収されるんですね

94 :デフォルトの名無しさん:2009/11/20(金) 22:47:40
明示的にDispose()実行するまではまだなんとかなる。早まるな。

95 :デフォルトの名無しさん:2009/11/20(金) 22:50:34
つまりガベージコレクションは俺たちの社会の縮図だったわけか・・・

96 :デフォルトの名無しさん:2009/11/20(金) 23:06:14
気付かないのか?
お前達はusingステートメントで初期化されていたことに…

97 :デフォルトの名無しさん:2009/11/20(金) 23:28:32
さてと、米にバルス!

98 :97:2009/11/20(金) 23:29:13
ごばく
すまそ

99 :デフォルトの名無しさん:2009/11/20(金) 23:29:28
ラピュタは2ちゃんの鯖を落とす程度の能力か

100 :デフォルトの名無しさん:2009/11/21(土) 02:36:28
ガベージコレクションってメモリの管理だけをする道具
っていう認識でいいの?

101 :デフォルトの名無しさん:2009/11/21(土) 02:44:45
>>100
それじゃあメモリアロケーターだ。
ガベージコレクションはインスタンスの寿命を管理するシステムのこと。

102 :デフォルトの名無しさん:2009/11/21(土) 02:51:06
じゃあ構造体はインスタンスじゃないから
ガベージコレクションに管理されないの?

103 :デフォルトの名無しさん:2009/11/21(土) 03:16:18
インスマウス

104 :デフォルトの名無しさん:2009/11/21(土) 03:22:29
邪神崇拝者の来る場所じゃないぞ

105 :デフォルトの名無しさん:2009/11/21(土) 06:07:27
WinXP Pro SP3、VS2008, .Net 3.5 C#で開発を行っております。

以下のコードを実行したところ、System.Runtime.Remoting.RemotingExceptionが出てきたり、出てこなかったりするケースがあって困っております。
Exceptionのメッセージは以下の通りです。
オブジェクト '○○' が切断されたか、サーバーに存在しません。

どなたかもしよろしければ、原因・対策などご教示いただければ幸いです。
よろしくお願いします。

//コード
private HogeHogeHoge x = null;
private AppDomain hostedAppDomain = null;
//初期化
private void Init() {
  AppDomainSetup setup = new AppDomainSetup();
  setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory.ToString();
  Evidence evidence = new Evidence();
  evidence.AddHost(new Zone(SecurityZone.MyComputer));
  hostedAppDomain = AppDomain.CreateDomain("XXX", evidence, setup);
  x = hostedAppDomain.CreateInstanceAndUnwrap("HogeHoge", "HogeHogeHoge") as HogeHogeHoge;
}
//終了
private void Exit() {
  if (x != null) {
    // xの終了処理  ここでSystem.Runtime.Remoting.RemotingException
    x.Disose();
  }
  AppDomain.Unload(hostedAppDomain);
}

106 :デフォルトの名無しさん:2009/11/21(土) 08:46:14
Exitが2回呼ばれているんじゃ?

107 :デフォルトの名無しさん:2009/11/21(土) 09:06:38
>>102
構造体はスタックに確保されるからGCで管理はされない。

108 :デフォルトの名無しさん:2009/11/21(土) 12:34:53
え?

109 :デフォルトの名無しさん:2009/11/21(土) 13:25:46
「え?」とか「は?」とかバカじゃないの、もうちょっと何か書こうよ。

クラスのメンバーに構造体がある場合や、Boxingされたケースとか、
例外はあるが基本的に言ってることは正しいと思うけど。


110 :デフォルトの名無しさん:2009/11/21(土) 13:47:38
今回初めて印刷のロジックを作ることになりました。

「PageSettings.HardMarginX」と「MarginBounds.X」
のちがいは何でしょうか?

実行して値を表示させたとき、
「MarginBounds.X」 = 100、
「PageSettings.HardMarginX」= 13
となりました。

どちらも印刷可能範囲の左上端を示していると思いきや全く異なる値でした。
どういうちがいがあるのか、
ご存知の方、教えてください…!

111 :デフォルトの名無しさん:2009/11/21(土) 13:50:16
マージンは印刷しないサイズ、ハードマージンは印刷できないサイズ
ハードマージンは見なくて大丈夫だと思う

112 :デフォルトの名無しさん:2009/11/21(土) 14:14:08
>>111 さんありがとうございます。
今作成中のアプリケーションは、
全国の何ヵ所かの家庭や店舗で利用してもらおうとしており、
それぞれの家庭や店舗のプリンタの機種が様々なのですが、
どんな機種でも、おおよそ決まった位置に明細を印刷しようと思っています。
この場合もマージンで問題ないでしょうか。
たびたびの質問で恐縮ですが、よろしくお願いします。

113 :デフォルトの名無しさん:2009/11/21(土) 14:53:53
>>112
印刷は所詮はアナログの世界なので、どうしても狂うことが出てくる。
オフセット(マージン)、縮尺は、ある程度印刷時に変えられるように作っておいたほうがいいよ。

114 :デフォルトの名無しさん:2009/11/21(土) 15:22:26
>>113
だから、前にもこのスレあたりで書いたと思ったが、そんな訳がないだろう、ってw

プリンタの実装がそんないい加減なものならどうして葉書の郵便番号なんか
ちゃんと枠内に印刷できるんだ。

テキトーなこと言う奴が多すぎるな。

115 :デフォルトの名無しさん:2009/11/21(土) 15:30:58
つーか、フチなし印刷できるプリンタ、できないプリンタでハードマージンは違うだろよ。
調整機能は必須。

116 :デフォルトの名無しさん:2009/11/21(土) 15:35:52
>>115
だから、そういうテキトーなことを言わないこと。
葉書印刷ソフトだけでも世の中にいろいろあるが、そんな「調整機能」が
付いたソフトは見たことがない。

そんな泥臭い作業を人間様に任せるようなダメ設計になってるのなら
windowsもページプリンタもこんなに普及してねえよ。

117 :デフォルトの名無しさん:2009/11/21(土) 15:37:16
これがゆとりってやつか・・・。

118 :デフォルトの名無しさん:2009/11/21(土) 15:39:18
http://www.yomiuri.co.jp/net/qanda/qanda081215.htm

> 「筆まめ」の「印刷位置微調整」機能
>
> 筆まめ19など、はがき作成ソフトには印刷位置をミリ単位で微調整する機能が備わっている。
> 筆まめの場合は、ファイルメニューの「印刷位置微調整」から利用する
> 郵便番号の位置だけを微調整する機能もある。



119 :デフォルトの名無しさん:2009/11/21(土) 15:42:31
>>116
         ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    <そんな「調整機能」が
    |      |r┬-|    |      付いたソフトは見たことがない。

     \     `ー'´   /
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"〜〜``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ    <.だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /      |r┬-|    | (⌒)/ / / //  
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /  
ヽ    /      `ー'´      ヽ /    /     
 |    |   l||l 从人 l||l      l||l 从人 l||l   バ   
 ヽ    -一''''''"〜〜``'ー--、   -一'''''''ー-、 ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒)) バ
                             ン

120 :デフォルトの名無しさん:2009/11/21(土) 15:44:45
>>118
それは古い精度の悪いプリンタ(現実にはあまりないが)を使っている人を
想定した「念のための機能」であって、>>115が主張するように必須の機能なんかじゃない。

通常はそんな馬鹿げたことをしなくても、少なくともmmオーダーの精度で
正確に位置決めされた印刷が行えるようになっている。

っていうか、印刷のコード書いたことがない馬鹿は黙っていた方がいいよ。

121 :デフォルトの名無しさん:2009/11/21(土) 15:47:42
で? ユーザーがどんなプリンタを使ってるのか特定できない以上、>>118みたいな
調整機能は必須だろ?

122 :デフォルトの名無しさん:2009/11/21(土) 15:47:56
というか、.NETだとそのためのプロパティがHardMarginX,HardMarginYなんだよ。
これで用紙の左上とプリンタの印刷可能領域(印刷時のハードウエア座標の原点)
のズレが取得できるようになっている。

123 :デフォルトの名無しさん:2009/11/21(土) 15:47:58
>そんな「調整機能」が付いたソフトは見たことがない。

124 :デフォルトの名無しさん:2009/11/21(土) 15:48:17
プリンターの印刷可能領域に左右されずに、
用紙の左上から決まった場所に印刷するには、
例えば(100-ハードマージンX,200-ハードマージンY)
とすべきですか?それとも
例えば(100-マージンX,200-マージンY)
とすべきですか?
マージンはプログラム上で何も設定していません。
よろしくお願いいたします。

125 :デフォルトの名無しさん:2009/11/21(土) 15:49:55
>>121
だから、現実問題としてはそんなプリンタは市場にほとんど存在してない。
紙送りの精度が悪いので有名だったHPの10年前の製品だって、そんな機能が
必要になるほどズレたりはしない。

126 :デフォルトの名無しさん:2009/11/21(土) 15:53:50
まー、そう思うなら調整機能付けなきゃいいだけだわな。

実際、有名どころの年賀状印刷ソフトにはついてるし、俺もあとで修正するのは面倒だから、
そういう機能を付けるけど。

127 :デフォルトの名無しさん:2009/11/21(土) 15:56:59
>>124
用紙の、の場合は、マージンは使わない。
ハードマージンの分を含むか含まないかは、試してみてくれ

128 :デフォルトの名無しさん:2009/11/21(土) 15:57:55
HTMLエディタを作る場合の内部的なデータの持ち方は
どんなのがいいでしょう?


129 :デフォルトの名無しさん:2009/11/21(土) 15:58:37
機能によって違うんじゃね?

130 :デフォルトの名無しさん:2009/11/21(土) 16:01:19
データ実体はHTML&CSSだろうな

131 :デフォルトの名無しさん:2009/11/21(土) 16:33:34
プリンタによって1ページに収まったり収まらなかったりするんだから、
その手の調整機能は普通いるんじゃないの?


132 :デフォルトの名無しさん:2009/11/21(土) 16:36:11
         ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    <そんな「調整機能」が
    |      |r┬-|    |      付いたソフトは見たことがない。
     \     `ー'´   /
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"〜〜``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

133 :デフォルトの名無しさん:2009/11/21(土) 16:46:33
どうでもいいが、幼稚な奴が多いのな。
俺は馬鹿な奴は嫌いじゃないが、幼稚な奴とコミュニケーションができない
真性ヲタはどうしようもないクズだと思ってる。

134 :デフォルトの名無しさん:2009/11/21(土) 16:51:07
揚げ足取りで勝った気になる困ったちゃんは少なからずいるものだ

135 :デフォルトの名無しさん:2009/11/21(土) 16:51:24
>>133
お前みたいな幼稚なレスしかしない奴もクズだけどな

136 :デフォルトの名無しさん:2009/11/21(土) 16:52:58
僕.NEET
喧嘩はやめて

137 :デフォルトの名無しさん:2009/11/21(土) 16:54:41
みんなゴメン。

138 :デフォルトの名無しさん:2009/11/21(土) 17:04:54
>>133
俺も幼稚な奴は嫌いだけど論理的じゃない奴も嫌い
前2行をどう呼んだら3行目に繋がるんだ?

139 :デフォルトの名無しさん:2009/11/21(土) 17:27:04
幼稚な奴は小学校からやり直した方がいいな。

年賀状印刷ソフトに調整機能なんてついてない! とか言い張って、
ソースが提示されてるのに、現実問題としてそんなプリンタはほとんどない! か。

ほんと、テキトーなことを言う奴が多いなw

140 :デフォルトの名無しさん:2009/11/21(土) 17:30:18
プリンタはアナログの世界で動く機械であって、
必ずしもアプリ側で指定した内容でずれなく印刷できる保証がどこにもない。

で、プリンタドライバのユーリティーでもある程度調整は効くだろうけど、
それで無理なような突っ込んだ内容はアプリ側でもある程度対応できるようにしておくべきだろう、という話。
必要だと思わないならやらなきゃいいだけさ。
別にスレが荒れるような内容じゃない。

141 :デフォルトの名無しさん:2009/11/21(土) 17:36:06
>>114>>116 が釣り師ということで。この話題終了。

142 :デフォルトの名無しさん:2009/11/21(土) 17:44:15
マージンは余白で、
ハードマージンは常用プリンターの印刷可能開始位置だよね。
ところで、
マージンの値をページ設定ダイアログから指定していないときは、
C♯上のマージンの初期値はいくらになるの?

143 :デフォルトの名無しさん:2009/11/21(土) 17:46:21
>>140-141
無知無能なくせにしつこいなお前さん。
本当にプログラマか?
っていうか、君(ら)は今までプリンタ使ったことないのかね。

1万前後で買えるキャノンやエプソンの最下位グレードのインクジェットだって
位置決めの問題なんかないんだよ。

そんなことは例えばワードで葉書印刷をしたってわかるし、
自分でコードを書いて印刷されたものを物理的に測定したって分かる。

馬鹿な癖に頭の中だけで考えているからそういうとんでもない勘違いをすることになる。

144 :デフォルトの名無しさん:2009/11/21(土) 17:57:38
俺、キヤノンiP3100の付属CD印刷ソフト使ってるけど、微調整しなきゃズレるぞ?

145 :デフォルトの名無しさん:2009/11/21(土) 18:04:32
>>144
俺もそれ使ってるけど微調整したことない

なんでクエスチョンマークをつけるんだ?

146 :デフォルトの名無しさん:2009/11/21(土) 18:06:08
同じプリンタで同じように印刷すれば、そりゃ、位置はズレないだろうよ。
ズレるようなら、それは不良品。

そんな話をしてるんじゃなくて、違うプリンタで位置がズレるか、って話。
印字位置の調整機能を持ったソフトなんて、それほど山のようにあるだろ?

もう釣りはいいから、さっさと死ねよ。

147 :デフォルトの名無しさん:2009/11/21(土) 18:09:13
>>145
微調整したことない?
妙だな、CDのメーカーによって変更しなきゃいけないのに
ああ、気にしてないってだけか

148 :デフォルトの名無しさん:2009/11/21(土) 18:11:53
>>146
だから、プリンタの違いによる物理座標の違いを補正できないような糞設計には、
プリンタ側もウィンドウズ側もなってはいないの。

何度も言うように、.NETでも2.0以降はHardMarginX、HardMarginYプロパティが
ちゃんと容易されていて、必要ならこういう差異をちゃんと補正できるようになっているんだよ。
ウダウダ言ってないで実際コード書いてみれば分かるから。
プリンタぐらい持ってるでしょ。

149 :デフォルトの名無しさん:2009/11/21(土) 18:13:10
同人でズレてるのは見かけるな。

150 :デフォルトの名無しさん:2009/11/21(土) 18:16:41
フォントなんて3だか9だかの倍数じゃないと、メーカーによって大きさがバラバラだったよね。

151 :デフォルトの名無しさん:2009/11/21(土) 18:17:45
なら、年賀状印刷ソフト会社にでも教えてやれよ。「調整機能は不要です!」って。

152 :デフォルトの名無しさん:2009/11/21(土) 18:27:13
>>142
ですが、ご存知の方、教えてください…
(>_<)。

153 :デフォルトの名無しさん:2009/11/21(土) 18:29:39
「同じように印刷すれば、どのプリンタでも印字位置はズレない」

こんな命題が成り立つわけないのは自明だろ。全メーカーの全プリンタで検証して
はじめて成り立つわけだし。

俺はそんな検証したくないし、そもそも、位置ズレに悩まされたこともあるから、
調整機能を付けるよ。

154 :デフォルトの名無しさん:2009/11/21(土) 18:29:50
>>152
やってみればいいじゃん。

155 :デフォルトの名無しさん:2009/11/21(土) 18:42:50
万人が使えるUIなら当然微調整機能くらいは付けるわな

156 :デフォルトの名無しさん:2009/11/21(土) 18:43:42
このどうでもいい議論いつまで続くんだろう

157 :デフォルトの名無しさん:2009/11/21(土) 18:44:37
C#でグローバルIPを取得するにはどうすればいいですか?

158 :デフォルトの名無しさん:2009/11/21(土) 18:46:26
>>157
ルータに問い合わせるかリモホを表示するサイトにアクセスして
その結果を利用するか

159 :デフォルトの名無しさん:2009/11/21(土) 18:46:52
>>157
なんのグローバルIPをどんなアプリから取得したいんだよ?

LAN 内からルーターのグローバルIPが取りたい、ってことなら、UPnP か、
いったん外部にアクセスしてそっちからもらうか、だな。

160 :デフォルトの名無しさん:2009/11/21(土) 18:48:32
>>158,159
ルータに問い合わせるって簡単に出来ますか?
リモホを返すページ作ってアクセスさせてみます

161 :デフォルトの名無しさん:2009/11/21(土) 18:52:13
perl だけど、サンプルあったぞ。

http://hydro.energy.kyoto-u.ac.jp/~sekiyama/upnp/upnp-get-extaddr

162 :デフォルトの名無しさん:2009/11/21(土) 18:54:43
あ、SSI使えたので流用しようかと思いましたが、
ありがとうございます。使わさせて頂きます。

163 :デフォルトの名無しさん:2009/11/21(土) 19:53:58
デリゲートはメソッドをカプセル化する型

164 :デフォルトの名無しさん:2009/11/22(日) 01:10:28
SMTPClientを使ってメールを送るプログラムを作っていたのですが、
WinXPの自分のPCだと問題無く動作するのですが、
Vistaの友人のPCだと、

メールを送信できませんでした。
場所 System.Net.Mail.SmtpClient.Send(MailMessage message)
場所 ConnectForm.Sendmail_DoWork(Object sender, DoWorkEventArgs e)]

となり、詰まってます。smtpはVistaで使えないのですか?

165 :デフォルトの名無しさん:2009/11/22(日) 01:17:08
>>164
メール送受信関係はWindowsのアキレス腱。
だって、元々SMTPはメールサーバー同士でメールをやり取りするためのプロトコルだぞ。
メールサーバーをローカルに立てているWindows機なんてそこらにはないだろ?

ってことで、メール送信に関しては失敗したときの動作を必ず決めておくべき。
質問の答えだが、別にVistaだから使えないってことはない。
クライアントマシンの環境次第。例えばオレのマシンじゃ動かない。

166 :164:2009/11/22(日) 01:34:04
言葉足らずでした。
自分の場合、どの環境からも送信出来るようにと思い、
YahooやGoogleのフリーメールをsmtp経由で送信しているのですが、
それでもそんなものなんでしょうかね?

167 :デフォルトの名無しさん:2009/11/22(日) 01:47:03
>>166
だから、クライアントマシンの環境次第だと言ってるじゃないか。察してくれよ。
ちなみに今時SMTPの標準のポートが空いてるプロバイダなんてまずねーよ。

168 :デフォルトの名無しさん:2009/11/22(日) 07:02:38
FillRectangleメソッドではRectangleFを指定できるのに、
DrawRectangleメソッドではなぜRectangleFが指定できず、Rectangleしか指定できないのでしょうか?
floatのX,Y,Width,Heightを直接記述するとデバッグでエラーにならないのだから---
RectangleFが指定できたらいいのですが・・・・・できますでしょうか。
ご存知の方よろしくお願いいたします。

169 :デフォルトの名無しさん:2009/11/22(日) 09:05:49
言われてMSDN見てみた。ホントに一貫性無いな・・・なんでだろ。
Graphics..::.DrawRectangle メソッド (Pen, Single, Single, Single, Single)
あるから出来ないわけないよね。
Graphics..::.DrawRectangles メソッド (Pen, array<RectangleF>[]()[])
に食わせるか、ラップ関数作って食わせるか。

170 :デフォルトの名無しさん:2009/11/22(日) 09:16:37
>>164
とりあえずエラーの場所だけ書かれてもな

171 :デフォルトの名無しさん:2009/11/22(日) 11:07:51
C#はCと違って文字列はアドレスはないの?

char *P="もじれつれつ";
みたいなことできない?

172 :デフォルトの名無しさん:2009/11/22(日) 11:09:56
うん。

173 :デフォルトの名無しさん:2009/11/22(日) 11:13:21
そうなんだ。不便だのぉ

174 :デフォルトの名無しさん:2009/11/22(日) 11:17:12
ポインタ管理しなくていいから楽でいいじゃん

175 :デフォルトの名無しさん:2009/11/22(日) 11:21:37
>>171
ポインタは無いけど、イテレータ(Enumerator)ならあるよ。
ただし、string自体がimmutableなので、読み取り専用になるけど

176 :デフォルトの名無しさん:2009/11/22(日) 11:21:39
GCって何ですか

177 :デフォルトの名無しさん:2009/11/22(日) 11:22:43
ググレ

178 :デフォルトの名無しさん:2009/11/22(日) 11:29:40
エンスーな写真月刊誌

179 :デフォルトの名無しさん:2009/11/22(日) 12:10:22
C#は、他プロセスにアタッチして、
そのプロセスが持つフォームのタイトルテキストを変更するような
プログラムを作成出来ますか?

180 :デフォルトの名無しさん:2009/11/22(日) 12:13:32
うん
大抵はDllImport祭りになるけど

181 :デフォルトの名無しさん:2009/11/22(日) 12:14:59
XPでVistaのガジェットのようにデスクトップに表示するアプリを作りたいのですが
どのようにすればいいのでしょうか

182 :デフォルトの名無しさん:2009/11/22(日) 12:30:24
作ればいいと思うよ

183 :デフォルトの名無しさん:2009/11/22(日) 13:03:14
文字列を区切って変数に代入するメソッドはどうすればいい?

class Test{
    public int x;
    public int y;
    public void func(string s){
    }
}

func("132/145")みたいに/で区切ると
x=132、y=145が入る
ようなことがやりたいんだけど。

184 :デフォルトの名無しさん:2009/11/22(日) 13:05:34
string や int の性的メソッドを調べてみるべし

185 :デフォルトの名無しさん:2009/11/22(日) 13:14:19
>>183
Splitかければいい。というか、こんなのは基本だろ?
分割できなかったときは、たぶんこの場合はnullを返すよりは例外を出したほうがいいだろうな。

186 :デフォルトの名無しさん:2009/11/22(日) 13:16:33
>>183
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/317vbsplit/vbsplit.html

187 :デフォルトの名無しさん:2009/11/22(日) 13:26:37
unsafeでポインタ使えるから色々試してみるのも面白いよ
splitより簡単にできることはないけど

188 :デフォルトの名無しさん:2009/11/22(日) 13:33:31
実はただの分割じゃなく数式の解析が目的でしたとかなー

189 :デフォルトの名無しさん:2009/11/22(日) 13:39:55
>>71で、「ListViewで垂直スクロールバーが出ているかどうか知りたいんですが」ってカキコしたんだが
スルーされてしまったけど、やはり無理?

190 :デフォルトの名無しさん:2009/11/22(日) 13:45:34
それが人に物を聞く態度か?

191 :デフォルトの名無しさん:2009/11/22(日) 13:54:07
教えてくれたらロリ画像だします・・・

192 :デフォルトの名無しさん:2009/11/22(日) 14:02:55
そうしたら通報します・・・

193 :デフォルトの名無しさん:2009/11/22(日) 14:05:16
>>189
ClientRectangleの外にItem(かSubItem)が存在するかどうかで判定するとか。
…泥臭いやり方だなw

194 :デフォルトの名無しさん:2009/11/22(日) 14:28:01
>>193
どうもです。ListViewをOwnerDrawしている状態で、ヘッダーの長さを水平スクロールバーの出ない長さに調整したいのですが
縦スクロールバーを考慮いてその分ヘッダの長さを短くすると、バーが出ない時に白く残っちゃうんですよね
これを何とか消したいんですが他のアプローチ考えてみます

195 :デフォルトの名無しさん:2009/11/22(日) 14:31:55
>>189
ListViewのカスタムコントロール作ったことあるが、そのときはGetScrollBarInfoでやった
表示/非表示を知りたかったわけじゃなく、縦横それぞれのスクロールバーの
自動表示をコントロールしたくて実装した副産物
初心者スレでAPI薦めるってどうよって思ったが、正直ほかの方法は知らない


196 :デフォルトの名無しさん:2009/11/22(日) 15:01:46
>>195
ありがとうございます。一応サンプル有ったからこれからテストしてみようと思います
http://www.pinvoke.net/default.aspx/user32.getscrollbarinfo

197 :デフォルトの名無しさん:2009/11/22(日) 16:32:01
PrintDocumentにて、商品明細書を作成しています。、A4縦の単表に100ほどの項目名称や金額をDrawStringメソッドやDrawRectangleメソッドを併用して記述しているのですが、プレビューが出るのに15秒かかってしまいます
(>_<;)。
項目数が多い場合、これくらい時間がかかるものなのでしょうか…。
皆様はどのような工夫をして、レスポンスを上げていますか?
よろしくお願いします。

198 :デフォルトの名無しさん:2009/11/22(日) 16:35:50
どのようにしているからレスポンスが遅いのかが分かりません。

各処理の区切りごとに時間を計測してどのボトルネックになている部分をまず探してみてはどうでしょう?

例えばDBからデータの取得が遅いとか色々あると思います。



199 :デフォルトの名無しさん:2009/11/22(日) 16:37:15
15秒は遅いな
単票なら座標計算に手間取る事は無いだろうから、データ取得あたりで時間掛かってないか見てみた方がいい

200 :デフォルトの名無しさん:2009/11/22(日) 17:05:30
>>199
ありがとうございます。
データは、今は直接、DrawStringメソッド内に文字列を指定しています。

DrawStringメソッドにて文字列の右揃えや左揃えを細かく指定し、さらに背景にFillRectangleでグレーの網掛けも随所に入れています。
DrawStringメソッドと
DrawRectangleメソッド、
FillRectangleメソッドを
1つの関数に定義して、100項目ほどの文字列の描画について、全てその関数で行う形にしています。
いい方法と思いましたが、項目定義が増えるほど一気に重たくなりました
(T_T;)。

DrawStringメソッドの中でPointのみを指定し、Rectangleを使わないようにした方が軽いかもしるません。

これから随所を削りながら試験してみます。

もし、何かコツなどのご意見がありましたらぜひ教えてくださいっ…!!

201 :デフォルトの名無しさん:2009/11/22(日) 17:11:35
>>200
どちらかっつーと、データをレンダリングするのより
データを取ってくるのに時間が掛かってるんじゃないかと思うが。

コードの断片ごとに掛かってる時間を計測して、標準出力に出して眺めてごらんよ。

202 :デフォルトの名無しさん:2009/11/22(日) 17:11:39
たかだか100項目程度のそれで15秒もかかるとは思えない

生で書き込んでるんだったら 適当に文字を置換して晒してみれば?
座標計算の所が気になると言えば気になるけど

203 :デフォルトの名無しさん:2009/11/22(日) 17:20:59
PDFにしないからだよ

204 :デフォルトの名無しさん:2009/11/22(日) 17:23:46
>>203 え?

205 :デフォルトの名無しさん:2009/11/22(日) 17:35:35
>>200
半分の50項目だったら何秒?
半分コメントアウトして試してみて

206 :デフォルトの名無しさん:2009/11/22(日) 18:04:12
ListViewの話ですが、スクロールバーの検出に成功してカラムの調整まで成功しました
が、水平スクロールバーの再描画というか消えるところまでは出来ませんでした
もう少し頑張ってみます

207 :デフォルトの名無しさん:2009/11/22(日) 18:41:52
配列と列挙型ってどう違う?
いやまぁ違うところは違うけどさ。
列挙型でできることって配列使っても簡単に同じことできね?
列挙型の存在価値がわからんがなんのためにあるの?

208 :デフォルトの名無しさん:2009/11/22(日) 18:43:33
全く違うだろう
というかどういうのをして同じことって言うの?

209 :デフォルトの名無しさん:2009/11/22(日) 18:46:00
配列だと代入できんじゃん
わざわざラップクラス作る?
そのほうが無駄な手間だ

210 :デフォルトの名無しさん:2009/11/22(日) 18:50:29
>>207, 209
?????
何を言ってるんだ???


211 :デフォルトの名無しさん:2009/11/22(日) 18:51:44
>>209>>207に向けてるんだと思う。

212 :デフォルトの名無しさん:2009/11/22(日) 18:51:55
もう一度教科書読むことを勧める


213 :デフォルトの名無しさん:2009/11/22(日) 18:53:36
>>211
それはそれでイミフだ
>>207のイミフな発言をどう解釈して>>209の回答になったのかも非常に気になる

214 :デフォルトの名無しさん:2009/11/22(日) 18:53:38
>>206
194を読まずにレスしたからGetScrollBarInfoっていったけど
本来の目的は横スクロールバーの表示抑制なんじゃないの?
そうであるならイベントハンドラでカラムサイズを調整すれば済むと思うけどダメだった?

215 :デフォルトの名無しさん:2009/11/22(日) 18:55:58
>>207
列挙型で出来ることを配列で簡単に実現してるケースを知りたいわ
enum Color { Red, Blue, Green };

String[] color = {"Red", "Blue", "Green"};

とでも思ってるんだろうか・・・

216 :デフォルトの名無しさん:2009/11/22(日) 18:56:05
string[] 時間={"あさ","ひる","よる"}
enum 時間 {あさ,ひる,よる}

Now=時間[1];
if(ひるなら)
ほにゃらら

if(Now==時間.ひる)
ほにゃらら

これは何がどうちがうの?

217 :デフォルトの名無しさん:2009/11/22(日) 18:56:40
>>214
カラムサイズ調整までは何の問題もないけど、リストにロード直後だと再描画してくれませんでした
カラム調整は確認したから大丈夫ですよ

218 :デフォルトの名無しさん:2009/11/22(日) 19:00:04
>>216
なんで自分で調べないの?

219 :デフォルトの名無しさん:2009/11/22(日) 19:00:11
>>216
列挙体を関数の引数にした場合、列挙体以外の値以外入ってくる余地無くなるよね
これだけでも全然違うと理解できないかな?

220 :デフォルトの名無しさん:2009/11/22(日) 19:01:56
>>216
ぜんぜん違うだろ。

時間[1]っての見てだれが"ひる"だってわかんだよ。
それに Now に "まよなか" ってまちがって入れちゃった場合だれが気付いてくれるんだ?
もし時間の種類に "ひづけへんこうせんをこえるまではよるのつもりでいます" なんて長いパターン入れたら
比較に時間かかるわ無駄なメモリ使うわでもったいないよな。


221 :デフォルトの名無しさん:2009/11/22(日) 19:05:30
>>220
突っ込み所はそこなのか?
>>216は上ではNowに時間[1]ってのを代入してて、下じゃ比較してるだけなんだぞ

222 :デフォルトの名無しさん:2009/11/22(日) 19:07:55
enum は定数のラベル
実態は 1 とか 2 とか 3 なわけよ。

プログラムを組むときって状態を管理することが多いんだけど(あさだったらXX、ひるだったらYYとか)
状態の数が3つとか4つなら文字列なんか使うより数字使った方がメモリが無駄にならないし
処理も速いよね。

でも 1 とか 2 とかをプログラム中に直接書くと、書いてる人が混乱しちゃうし間違いやすい。
一人で数百行ぐらいのコード書くならまだしも2人3人ぐらいでやってるとあっというまに破綻する。

で、その 1 とか 2 のマジックナンバーに名前を付けることにしたのが enum なわけだ。
C時代は enum の他に #define なんてのもあったけど。
enum のいいところは変数にあらかじめきめられた数字「しか」代入出来なくしてくれる作用があって、
1 とか 2 で管理してる場合に間違って 9 とかが入っちゃって誤動作するのをコンパイルする段階で
見付けてくれるのよ。

223 :デフォルトの名無しさん:2009/11/22(日) 19:11:46
お前ら釣りに優しいなw
enum使ってくる時点で初めてではないだろ


224 :デフォルトの名無しさん:2009/11/22(日) 19:15:19
経験者があの質問するのは釣りでも無理だろ・・・

225 :デフォルトの名無しさん:2009/11/22(日) 19:17:23
時間.ひる == "ひる" だと思ってるのか?もしかすると。

226 :デフォルトの名無しさん:2009/11/22(日) 19:20:27
>>205
レスの流れからして、読み込み済みデータで描画して何秒なら分かるが。

227 :デフォルトの名無しさん:2009/11/22(日) 19:21:06
>>217
いや、なんというかアプローチの仕方が違うんじゃないかなって思ってさ
最初は縦スクロールの表示判定だったけど、その真意は横いっぱいに
表示したカラムのせいでアイテム数が増えて縦スクロールが出ると
結果的に横スクロールバーも出るっていう話ではないの?
そうであるなら、例えば縦スクロールバーのみ出しっぱなしにすれば
処理はシンプルになると思うし、縦スクロールバー隠しておくつもりなら
横スクロールバーは出ないようにしてしまったほうが、カラム調節で
チラツキの押さえ込みと格闘するより楽なんじゃないかなぁと・・・

228 :デフォルトの名無しさん:2009/11/22(日) 19:26:39
enumすら説明出来ないクズスレ

229 :デフォルトの名無しさん:2009/11/22(日) 19:29:37
>>226
半分の印刷で、時間が半分になるのか1/4になるのか、まさかの1/9になるのか
と言うことの確認。つまり二重ループ三重ループの疑い。

230 :デフォルトの名無しさん:2009/11/22(日) 19:35:20
1/9ってなんだオレ…三重なら1/8だorz

231 :デフォルトの名無しさん:2009/11/22(日) 19:56:13
なんでいちいちちょっとしたことするだけなのに
Mainを意味のないクラスで囲まなければならないんだ!不便!

232 :デフォルトの名無しさん:2009/11/22(日) 19:58:46
>>205
50項目のときは5秒でした。

サブルーチンの中で
※背景の塗りつぶしが必要ならFillRectangleを実行する。
※文字列を囲むならばDrawRectangleを実行する。
※文字列については常にRectangle構造体の中で水平垂直位置をパラメーターから与える
…これを150項目分行うようにしています。

項目が増えれば増えるほど、倍以上に遅くなっています。
FontなどのオブジェクトのDisposeが足りないのかなと思って直しましたが、結果はやはり15秒弱です。

233 :デフォルトの名無しさん:2009/11/22(日) 19:59:52
Font?
一項目ごとにフォント読み込んだりしてない?

234 :デフォルトの名無しさん:2009/11/22(日) 20:06:57
>>231
そこまで考えてるのになんで
ちょっとしたことするだけなのに Main なんて意味のないメソッドで囲まなければならないんだ!不便!
まで発想が飛ばないのかねぇ。

235 :デフォルトの名無しさん:2009/11/22(日) 20:08:29
どう見ても>>231はわかってる奴の発想だな
>>209にはとても及ばない

236 :デフォルトの名無しさん:2009/11/22(日) 20:16:45
>>181

237 :デフォルトの名無しさん:2009/11/22(日) 20:24:43
>>229
え、多重ループの疑いがあったとして項目数減らしても計算量は線形でしか減らないキガス・・・
ああ、そもそもルーチンを何回も何回も呼び出している疑いか。あるね、そんな事。

238 :デフォルトの名無しさん:2009/11/22(日) 20:25:44
>>227
用途は趣味で作っているメディアプレーヤーだから、1行の時もあれば100行近い場合もあるんですよ
で、曲名のカラムを調整して縦スクロールバーが無い時はいっぱいまでカラムを延ばして
バーが出たらバーの分だけ曲名を縮める。
そうしないと縦スクロールバーが無いとOwnerDrawしたカラムヘッダーの最後が真っ白けになっちまうし、
逆に縦スクロールバーが出ている時に伸ばしたら横スクロールバーが出るのがちょっとウザイ
現状、調整後に横スクロールバーが残っても、縦または横にスクロールした瞬間に消えるんですけどね

239 :デフォルトの名無しさん:2009/11/22(日) 20:29:26
一回5secとして三回回って15sec。項目半分に減らして2.5secとして三回回って7.5sec。
減らした比率でしか計算量は減らないから、237は勘違い。

240 :デフォルトの名無しさん:2009/11/22(日) 20:30:52
>>235
しかしながらC++とかに慣れてるとは・・・とてもじゃないが思いにくい
不便とかを超えてもう当たり前になっている所だからぶっちゃけどうでもいい
そして、そんな一か所がなんだってんだ もっといろいろあるだろう orz

241 :デフォルトの名無しさん:2009/11/22(日) 20:34:40
>>232
1/3だと微妙だけど二重ループの可能性は高いな
ありそうなのは、
項目1つ目の場合は1つ目を描画し、2つ目の時は1つ目と2つ目を描画し…のパターンと
項目1つ描画するつもりが全項目描画している関数を呼び出している…のパターン

242 :デフォルトの名無しさん:2009/11/22(日) 20:36:07
>>232
disposeしたところでGCに回収してもらわないと意味がない
そんで強制的に回収させてたら余計に遅くなるんではないかと・・・
メモリがないわけではないんなら

ところで150項目てあるけどループ回数は何回?
単純に150?
それとも違う?

1項目は そのサブルーチンを何回使う?

フォントはでいるだけ使いまわしてる?
(例えば明細用を最初に定義して使いまわす)

243 :デフォルトの名無しさん:2009/11/22(日) 21:04:27
描画するデータをその都度どこかから持ってきてるとかかな

244 :デフォルトの名無しさん:2009/11/22(日) 21:09:01
スタティック変数使って、何回通ったか数えてみてから考えても良いかも

245 :241:2009/11/22(日) 21:12:26
オレ算数できてなかったorz
1/3の数の描画で1/3の時間だったら、1項目の描画の途中で変に遅い部分があると言うだけだな

246 :デフォルトの名無しさん:2009/11/22(日) 21:16:24
>>238
それなら、縦スクロールバーは常に出しっぱなしにして、
横スクロールバーは常に非表示にしておけば一番スッキリするんじゃないの?
少なくともカラムの幅に関係なく横スクロールバーは出ないようにしてしまえば
かなり問題は簡単になると思うんだがなぁ

247 :デフォルトの名無しさん:2009/11/22(日) 21:16:57
>>232
さっきから埒が明かないな。ソースコードさらしたほうが早いんじゃね?
おそらく相当ひどい実装になってるんじゃないかと予想。

248 :デフォルトの名無しさん:2009/11/22(日) 21:55:21
>>246
どうもListViewでは、スクロールバー自動と無ししか選択できないみたいです
ShowScrollBarをテストしてみたんですが、無効化されるようですね
他にやり方有りましたら教えていただけませんか?

249 :デフォルトの名無しさん:2009/11/22(日) 22:01:17
FontオブジェクトやRectangleオブジェクトを生成するのって
そんなに負荷がかかるものなのですか?
明朝体やゴシックが入り混じっているときも、
変更があるときだけ生成し直すのが良策なのかな。

250 :デフォルトの名無しさん:2009/11/22(日) 22:03:28
Fontはアンマネージリソース抱えてるので特に生成が重い類
Rectangleは構造体だからほとんどノーコストで作れる

251 :デフォルトの名無しさん:2009/11/22(日) 22:10:22
>>250
アンマネージリソース…?
はじめて聞いた。
クグルとするか
(>_<;)。

252 :デフォルトの名無しさん:2009/11/22(日) 22:20:52
Fontを150回作るだけで何秒もかかるものでもないんだから、気にするだけ無意味

253 :デフォルトの名無しさん:2009/11/22(日) 22:22:20
原因でないのは間違いないが普通は避ける

254 :デフォルトの名無しさん:2009/11/22(日) 22:31:43
>>232
一度FillRectangle、DrawRectangle、DrawStringを全部外して時間を計測してみて
それで1,2秒になるならそのどれが遅いかをどれか一つだけ描画するようにして試して
さっぱり速くならないなら、描画処理以前の問題と言うことで。

255 :デフォルトの名無しさん:2009/11/22(日) 22:53:47
問題の切り分け方から説明しないといけないのか
言語以前の問題では?

256 :デフォルトの名無しさん:2009/11/22(日) 22:56:53
>>181

257 :デフォルトの名無しさん:2009/11/22(日) 23:02:23
>>256
あれ、単なる非矩形ウィンドウだろ。

258 :デフォルトの名無しさん:2009/11/22(日) 23:06:31
form.FormBorderStyle = FormBorderStyle.None;
form.ShowInTaskbar = false;
はい終わり

259 :デフォルトの名無しさん:2009/11/22(日) 23:09:35
>>248
ShowScrollBarするという基本的な方針は間違ってない
俺はこんな感じで制御してる(thisは独自のスクロールバークラス)
どうしても分からなければメアド晒せばソースあげるよ
protected void ShowScrollBar(bool show)
{
 if (show != this.Visible){NativeMethods.ShowScrollBar(this.Handle, this.Orientation, show);}
 if (show == true)
 {
  SCROLLINFO info = new SCROLLINFO();
  info.cbSize = Marshal.SizeOf(info);
  info.fMask = ScrollInfoFlags.RANGE | ScrollInfoFlags.PAGE;
  NativeMethods.GetScrollInfo(this.Handle, this.Orientation, ref info);
  this.Enabled = (info.nMax >= info.nPage);
 }
}

260 :デフォルトの名無しさん:2009/11/22(日) 23:27:12
>>255
まぁ初心者スレだから・・・・

荒れているC#相談室では叩かれるかもしれんがw

261 :デフォルトの名無しさん:2009/11/22(日) 23:31:29
>>258
それでWin+Dの時はどうなるのか分かる?w

262 :デフォルトの名無しさん:2009/11/22(日) 23:39:45
そんな後出し言われてもなぁ・・・。

263 :デフォルトの名無しさん:2009/11/22(日) 23:44:25
いやガジェットのようにって書いたじゃん・・・

264 :デフォルトの名無しさん:2009/11/22(日) 23:58:18
でも、Win+D のときの話なんてひとつも書いてないじゃん。

ガジェットのように、なら、JavaScript で実装できること、とかも条件になんの?


265 :デフォルトの名無しさん:2009/11/23(月) 00:08:19
火病った
きもちわるい

266 :デフォルトの名無しさん:2009/11/23(月) 00:11:07
>>264
C#スレでJavaScriptとは?
Vistaは使ってなくて、お聞きしたいのですがガジェットはWin+Dでデスクトップから見えなくなる、
つまりWindowStateはMinimizedになるのですか?


267 :デフォルトの名無しさん:2009/11/23(月) 00:18:11
>>264
いい加減にしろオマエの知識じゃ無理

268 :デフォルトの名無しさん:2009/11/23(月) 00:37:34
ネイティブC++のDLLを作成→C++/CLIでラップ→C#で参照しています。
ネイティブDLLに含まれる列挙型AをC#で変数宣言しようとすると、
"'AI.Schedule' はアクセスできない保護レベルになっています。"とエラーになります。
これを何とかC#上で利用できるようにする方法はないでしょうか?

269 :デフォルトの名無しさん:2009/11/23(月) 00:40:21
そのAをどのように宣言しているのか・・・

270 :デフォルトの名無しさん:2009/11/23(月) 00:47:16
ネイティブの型はC#では扱えない

271 :デフォルトの名無しさん:2009/11/23(月) 01:00:21
>269
enum A{A1,A2,A3...}; このようなかんじです。

>270
やっぱりそうなりますね。C++/CLIで対応する列挙型を宣言し、
キャストして使うことにします。ありがとうございました。

272 :デフォルトの名無しさん:2009/11/23(月) 01:34:30
aの文字列の中に、bの文字列が何回入っているか調べて
intで回数を返すメソッドはどうやって作るんですか?

273 :デフォルトの名無しさん:2009/11/23(月) 02:04:49
string A = "こんにちはああこんにちはあははこんにちは" ;
string[] kugiri = { "こんにちは" };
int i = (A.Split(kugiri, StringSplitOptions.None).Length-1); //3

一例

274 :デフォルトの名無しさん:2009/11/23(月) 02:31:56
a = "abaababa"
b = "aba"

の結果は普通に3でいいのか?

275 :デフォルトの名無しさん:2009/11/23(月) 02:36:20
>>273
あー、配列で区切って長さを取得してるんですね。
とても参考になりました。ありがとうございます。
>>274
そうですね。

276 :デフォルトの名無しさん:2009/11/23(月) 08:40:20
>>272の見てて思いだしたけど
もしString.IndexOf()使って処理する場合は気をつけた方がいいかもね。

http://blogs.wankuma.com/naka/archive/2009/11/11/182901.aspx
http://d.hatena.ne.jp/siokoshou/20091112/p1

277 :デフォルトの名無しさん:2009/11/23(月) 08:45:58
>>276
こっちのが良い
http://d.hatena.ne.jp/siokoshou/20091111#p1

278 :デフォルトの名無しさん:2009/11/23(月) 08:49:45
>>275
>>273のやり方では>>274は2になるのに気づいているか?

279 :デフォルトの名無しさん:2009/11/23(月) 10:30:19
FxCop使ってないと絶対気付かんわな

280 :デフォルトの名無しさん:2009/11/23(月) 10:58:45
>>277
デフォルトのIndexOfはなんであんな変な結果になるんだろな


281 :デフォルトの名無しさん:2009/11/23(月) 11:05:30
String.ToLowerとかもカレントカルチャで動くから、そうおかしな琴ではないだろう

282 :デフォルトの名無しさん:2009/11/23(月) 11:08:38
MS自身がおかしな挙動だと思ってるからFxCopで警告出たりするんだろう

283 :デフォルトの名無しさん:2009/11/23(月) 11:09:00
Console.WriteLine( "AA".IndexOf("〇A") ); // 0
Console.WriteLine( "〇A〇A".IndexOf("AA") ); // 1

これは「〇」がなかったことにされるってことなのかね?
やっぱりよくわかんない・・・

284 :デフォルトの名無しさん:2009/11/23(月) 11:11:27
うおーうおー
なんで同じことをするのにいくつもやり方があるんだよおおおおおおおおお

285 :デフォルトの名無しさん:2009/11/23(月) 11:13:53
>>283
それはUnicodeの規格がおかしいのを忠実に実装したらそうなってるだけ

286 :デフォルトの名無しさん:2009/11/23(月) 11:15:06
>>284
それぞれに顕著な差(状況毎の性能差とか)があればいいんだけど
そんなでもないときは叫びたくもなるわなw


287 :デフォルトの名無しさん:2009/11/23(月) 11:15:57
>>285
なるほど。実装がおかしいんじゃなくて規格がおかしいのか。
ありがとう!

288 :デフォルトの名無しさん:2009/11/23(月) 11:21:15
これって最初からそろってるものが高性能すぎて自分で文法を覚えたりクラス作る必要ないね。
最初からそろってるフォーム等のクラスや構造体の使い方覚えるだけで十分そうだ。

289 :デフォルトの名無しさん:2009/11/23(月) 11:27:14
>>288
いや文法は覚えないと書けないだろw

あと、ポトペタで書く分にはそれでいいかもしれないけど
ちょっと何かしようと思うとすぐクラス書きたくなると思うよ。

290 :デフォルトの名無しさん:2009/11/23(月) 11:37:00
>>288
そうでもあるし、そうでもない。
またフォームのような基礎的な部品も時々アーキテクチャーが変わったりするから
(System.Windows.Forms→Windows Presentation Foundation)
いつまでも同じ部品を使い続ける、という方針はあまりお勧めできない。

クラスにせよメソッドにせよコードの仕切りに過ぎないので、
分ける必要のないコード量なら分けなくても別にいいし、
分けるべきだと判断すれば分ければいい。

291 :デフォルトの名無しさん:2009/11/23(月) 11:48:10
>>288
やればわかるけどそれで出来ることには限界があるよ

もっとも、教科書に載ってるようなアルゴリズムの実装なんかは
ほとんどしなくてよくなったとは思う

292 :デフォルトの名無しさん:2009/11/23(月) 11:48:45
ローカル変数とグローバル変数の中間みたいなのないの?

class Test{
private int x;

public void func1(){
}

public void func2(){
}

public void func3(){
}
}
func1とfunc2でxは共有したいけど
func3などそれ以外の部分でxを書き換えられなくない
みたいな。

293 :デフォルトの名無しさん:2009/11/23(月) 11:50:47
そんなものはありません
func3を別のクラスに移してください

294 :デフォルトの名無しさん:2009/11/23(月) 11:50:51
同一クラスの中で把握しきれないようなのならクラスの分割を考えた方がいいんじゃないか

295 :デフォルトの名無しさん:2009/11/23(月) 11:53:10
>>292
なんでわけたいのかとか設計によるけど

■継承
class Test{
private int x;
public void func1(){}
....
}

class Test2 : Test {
public void func3(){}
}

とか

■移譲
class Test2 {
Test test = new Test();
public void func1() { test.func1();}
...
public void func3(){}
}

実装を見せたく無い場合は普通はクラスをわける設計になるはず

296 :デフォルトの名無しさん:2009/11/23(月) 11:55:05
×移譲
◯委譲
でした・・・

297 :デフォルトの名無しさん:2009/11/23(月) 11:58:07
基本的にはない。クロージャ使うとか、そういうテクニックはあるけど。

298 :デフォルトの名無しさん:2009/11/23(月) 12:01:37
こういうことか
class Test {
public readonly Action func1, func2;
public Test() {
int x;
func1 = () => { Console.WriteLine(x); };
func2 = () => { MessageBox.Show(x.ToString()); };
}

public void func3(){ /*xは見えない*/ }
}
「こういうこともできる」というだけに留めておいてくれ
絶対使うな

299 :デフォルトの名無しさん:2009/11/23(月) 12:12:32
委譲の変形パターンだな

300 :デフォルトの名無しさん:2009/11/23(月) 12:42:21
それ int x; 大丈夫なのか?と思ったら、ラムダ式における変数のスコープって
いう新しい規則で保証されてるのか・・・やっぱラムダ式は敵だ。

301 :デフォルトの名無しさん:2009/11/23(月) 12:48:25
クロージャはその場限りのコールバックとして使うだけならきちんと理解して使えば全く問題ない
>>298みたいにローカル変数の寿命が延びるような使い方はあんまりよろしくない

302 :デフォルトの名無しさん:2009/11/23(月) 13:25:33
オブジェクトが生存する限り生存するという、インスタンス変数と
たいして変わんないものなんだけどなぁ。

303 :デフォルトの名無しさん:2009/11/23(月) 13:32:23
スタックがそのまんま残るとでも思ってるんじゃね

304 :デフォルトの名無しさん:2009/11/23(月) 13:33:14
クロージャは、俺にとってはあれば便利だけど、なけりゃないで困らない、
ってレベルだなぁ。

305 :デフォルトの名無しさん:2009/11/23(月) 15:01:57
スレッド活用しようとすると無ければ困る。


306 :デフォルトの名無しさん:2009/11/23(月) 15:25:11
>>259
色々ありがとうございました。原因がわかりましたので仮の修正で一応動き出しました
原因はItem追加をDrawItemで検出していたんですが、この時はBeginUpdateと
EndUpdateの間である為、数値的にはカラムもクライアント領域の大きさも変更されているのに
描画が更新されないことでした。仮の処理ですがタイマー起動してEndUpdate後にカラムを弄ると
水平スクロールバーを消すことが出来ました

まだ、不具合があるから色々煮詰めないと行けないけど何とかなりそうです

307 :デフォルトの名無しさん:2009/11/23(月) 15:33:40
研究室の先輩から引き継いだC#のプログラムがあるんですが、当方はQtでC++しか触ったことがありません。
それでこのプログラムを簡単にC++に変換できるのでしょうか?
それとも諦めてC#を覚えた方がいいでしょうか?

308 :デフォルトの名無しさん:2009/11/23(月) 15:34:42
あきらめた方がいい。

309 :デフォルトの名無しさん:2009/11/23(月) 15:36:03
C++/QtからC#/WinForms or WPF・・・

簡単にはいかないけど
プログラムが綺麗に作られてるならクラス設計とかはそのまんま引っ越せるとは思う。

310 :デフォルトの名無しさん:2009/11/23(月) 15:36:52
そういえばQt#ってあったな
今回の話とは一切関係ないだろうけど

311 :デフォルトの名無しさん:2009/11/23(月) 15:36:59
研究室ならどうせ中身はほとんどベターCだろ
GUI周りだけちょっと練習すれば十分

312 :デフォルトの名無しさん:2009/11/23(月) 15:59:39
まて、本人がC++の人でソースはC#だ。


313 :デフォルトの名無しさん:2009/11/23(月) 16:01:05
実際、C++はアセンブラ扱いだから、C#のほうが楽だよ。

314 :デフォルトの名無しさん:2009/11/23(月) 16:02:26
何を言っているんだ

315 :デフォルトの名無しさん:2009/11/23(月) 16:28:56
>>306
よかったね
質問と関係ないけど、タイマー使うよりメッセージ投げた方がスッキリするよ
const int LVEX_COLUMNRESIZE = WM_APP + 1; // 独自のメッセージ定義
PostMessage(this.Handle, LVEX_COLUMNRESIZE, 0, 0);

316 :デフォルトの名無しさん:2009/11/23(月) 16:34:13
・研究室の先輩から引き継いだC#のプログラム
・当方はQtでC++しか触ったことがない
という状況で
A.簡単にC++に変換できるのでしょうか?
B.それとも諦めてC#を覚えた方がいいでしょうか?
という質問に、
C#を覚えた方が楽と薦めてみたんだが・・・どっか勘違いしてるかな?

317 :デフォルトの名無しさん:2009/11/23(月) 16:35:19
C++がアセンブラ扱いってのが問題発言だろ。


318 :デフォルトの名無しさん:2009/11/23(月) 16:36:56
C++やっててJavaもやったことあるならすんなりいけるけど
C++だけだとちょっとはまるかもね。
移植するにしてもC#の知識は必要になるから、そのままC#覚えたほうが早そう。

319 :デフォルトの名無しさん:2009/11/23(月) 16:39:36
覚えたほうが早いに1票

320 :デフォルトの名無しさん:2009/11/23(月) 16:47:30
>>315
WinForm的にはBeginInvokeだろう

321 :デフォルトの名無しさん:2009/11/23(月) 16:58:10
クラスの設計がよくわからなくなってきたので助けてください。

■前提
複数のミニブログ(例えばTwitterとはてなハイク)のタイムラインを一つのリストにまとめて表示する
プログラムを作るとします。
基本的な機能は一緒なので、最大公約数的な抽象クラスを作り、画面の方でも抽象クラスで提供
されているプロパティに従って最大公約数的な画面表示を行なっていました。

例)
名前 - メッセージ - 日付 - システム
-----------------------------
太郎 - ほげほげ - 12 days ago in Twitter
次郎 - ふがふが - 30 days ago in HatenaHaiku

■質問
ここで、各ミニブログ特有の機能も画面上に反映させたくなった場合、画面側の方で
例えば if(message is TwitterMessage)... else if (message is HatenaHaikuMessage)みたいに
どのサブクラスのインスタンスか一々調べて処理を書くしかないのでしょうか?

例) HatenaHaiku の場合、キーワードも表示されるようにする
名前 - メッセージ - 日付 - システム
-----------------------------
太郎 - ほげほげ - 12 days ago in Twitter
次郎 - [独り言] ふがふが - 30 days ago in HatenaHaiku


322 :デフォルトの名無しさん:2009/11/23(月) 17:03:10
制御のモデルを変える。
メッセージに描画させればいい。

323 :デフォルトの名無しさん:2009/11/23(月) 17:03:30
固有メッセージ追加とかカスタマイズ用のメソッドとかインターフェースとか
そういうのを追加する。
細かいところのやり方はいろいろだけど。

324 :デフォルトの名無しさん:2009/11/23(月) 17:04:46
それが一般的な機能なら、クラス側に機能(インターフェイス)を持たせちゃうな。
で。Twitter 用のクラスでは何もしない、と。

特殊な機能なら、UI 側での判定もありじゃない?

325 :デフォルトの名無しさん:2009/11/23(月) 17:07:56
>>320
同期処理かつメインスレッドが所有するListViewを処理するのに
わざわざ非同期のBeginInvokeはねえよw
EndUpdateまで待つためにlockかWaitHandleまで必要になるぞ

326 :デフォルトの名無しさん:2009/11/23(月) 17:09:30
>>321
Decorator パターンで考える。
Decorate する必要がない時は空の ConcreteDacorator で代用。

327 :デフォルトの名無しさん:2009/11/23(月) 17:09:39
>>322
なるほど、各メッセージ自身が自分自身の描画方法を知っている形にするってわけですね。
そういった場合でモデルと画面描画を分離させたい場合は間にもう1クラスぐらいかませるようなやり方で
良いでしょうか?

[データモデル]
MessageModel
+ Name : string
+ Message : string

TwitterMessageModel → MessageModel
+ HashCode : string
HatenaHaikuMessageModel → MessageModel
+ Keyword : string

[画面表示用のコンポーネント]
MessageComponent
+ Draw() : bool

TwitterMessageComponent → MessageComponent
- model : TwitterMessageComponent
HatenaHaikuComponent → MessageComponent
- model : HatenaHaikuMessageComponent


328 :デフォルトの名無しさん:2009/11/23(月) 17:13:32
そういうクラスを考えるのは楽しいんだけどさ。
あんまり役に立たないよね。

329 :307:2009/11/23(月) 17:13:43
とりあえずC#をボチボチ勉強します。

330 :デフォルトの名無しさん:2009/11/23(月) 17:15:23
>>326
すまん、空の ConcreteDacorator で代用する必要はないか。
ConcreteComponent をそのまま使えばいいんだ。

・・・ってもう解決しそうだから、どうでもいいか

331 :デフォルトの名無しさん:2009/11/23(月) 17:15:31
>>323
各システム固有の何かをする、ってメソッドを追加する、みたいな解釈でしょうか?
なるほど・・・

>>324
抽象クラスにメソッドを持たせるということですよね。
この場合、特殊な機能が少ないうちは良さそうなんですが、
増えていくと抽象クラスが煩雑になりそうで・・・
#そもそもそんなに特殊機能がばらばらなのを抽象化して良いのか?って問題もあるけど。

>>326
Decoratorパターンを良く理解していないので調べてみます。
デザインパターンちゃんと勉強しないといけないなぁ・・・


332 :デフォルトの名無しさん:2009/11/23(月) 17:16:36
interface IExtraMessageField
{
public ExtraMessageField Type { get; } // {Name,Message,Date,System}
public string Message { get; }
}

class TwitterMessage{
}

class HatenaHaikuMessage: IExtraMessageField
{
public ExtraMessageField { get{ return ExtraMessageField.Message; } }
public string Message { get{ return ''[' +Keyword+ ']; } }
}

333 :デフォルトの名無しさん:2009/11/23(月) 17:16:53
>>328
switch とか if 連打の方がわかりやすかったり工数少なかったりするよなw


334 :デフォルトの名無しさん:2009/11/23(月) 17:19:50
初心者程抽象化したがるからなぁ

335 :デフォルトの名無しさん:2009/11/23(月) 17:19:58
そこまで拡張する必要性に迫られたことないし

336 :デフォルトの名無しさん:2009/11/23(月) 17:21:09
この場合の正しい解は、画面側で"is"使ってインスタンス判定、固有の処理をするだよ。


337 :デフォルトの名無しさん:2009/11/23(月) 17:21:59
仕事がありません
誰か下さい

338 :デフォルトの名無しさん:2009/11/23(月) 17:24:22
俺の仕事をあげようか
給料は俺がもらっとくけど

339 :デフォルトの名無しさん:2009/11/23(月) 17:26:25
うーん、何が正しいんだかよくわからなくなってきました・・・
設計難しいなぁ。

泥臭く書くだけならいくらでもできるんだけど
綺麗に書くとなるとさーっぱりだ・・・

こういう場合に >>336 みたいに「こういう場合はこれが正しい」って断言出来るようになるには
どんだけ経験つめばいいんでしょうね。

340 :デフォルトの名無しさん:2009/11/23(月) 17:27:58
断言したいだけなら、今すぐにもできるだろw

341 :デフォルトの名無しさん:2009/11/23(月) 17:32:01
>>336 は馬鹿すぎだろいくらなんでも。
オブジェクト指向言語使ってる意味ないよ。
Twitterがverupして機能増えた・・・なんて時に改修場所がいたるところにちらばるでしょ、それじゃ。

ちゅーことで断言するやつは疑ってかかった方がいいんじゃないかと思う。

342 :デフォルトの名無しさん:2009/11/23(月) 17:35:43
ぶっちゃけ、デザパタ使ったコードは非常に読み辛いからやめて欲しい。

343 :デフォルトの名無しさん:2009/11/23(月) 17:40:13
>>325
BeginInvokeはマネージドなPostMessageだよ
BeginInvokeが非同期というならPostMessageも非同期になる

344 :デフォルトの名無しさん:2009/11/23(月) 17:42:37
問題はEndUpdateが必ず呼ばれるとは限らないことだな
一行追加修正で呼ばないって選択肢もある

345 :デフォルトの名無しさん:2009/11/23(月) 17:44:06
巷で手に入るTwitter実装のソース見る限り
オブジェクト指向なんてこれっぽっちも考慮していない件

もし仕事じゃないなら、
どう綺麗に設計するかなんかより素早く楽しいものを作れるようにしたほうがいいよ
マジで


346 :デフォルトの名無しさん:2009/11/23(月) 17:47:25
素人の多いスレだなぁ

347 :デフォルトの名無しさん:2009/11/23(月) 17:49:41
>>346 の玄人な意見が楽しみです!

348 :デフォルトの名無しさん:2009/11/23(月) 17:52:12
仕事だと保守の問題があるからなるべく見やすいほうが好まれるからな
趣味のコードだとひたすら速度を追求したりする

349 :デフォルトの名無しさん:2009/11/23(月) 17:52:53
単純に表示とデータをバインドするクラスにやらせりゃいいだけ
初心者みたいにデータを表示側で加工判定とかもうね
設計の基礎中の基礎でしょうが

>>332
あとこれもおかしい
interfaceは主に汎用性のある振る舞いの定義に使う物
採用度の低い(このケースは一つのデータクラスだけ)ものにinterface作ってどうすんの
いったい何に怯えて定義したのさ?

あ、ちなみに俺、>>346じゃないよ
ただの無職だよ(∀`*ゞ)テヘッ

350 :デフォルトの名無しさん:2009/11/23(月) 17:53:59
でも、問題無ければマジックナンバーだって使うのが玄人だよな

351 :デフォルトの名無しさん:2009/11/23(月) 17:56:48
>>350

その流れでいくと
「本物のプログラマ」文章に行きつくw
ttp://www.genpaku.org/realprogrammerj.html
>本物のプログラマは、GOTO を恐れずに使う。
>本物のプログラマは、5ページにわたる長い DO ループを混乱せずに書ける。
>本物のプログラマは 算術 IF ステートメントを好む -- こうするとコードがもっと面白くなる。
>本物のプログラマは自己拡張コードを書く。とりわけ、タイトなループの途中で 20 ナノセカンドを節約できる場合には。
>本物のプログラマにコメントは不要である -- コードは一目瞭然なのだ。
>FORTRAN では IF 文や REPEAT...UNTIL、や CASE 文が構造化されていないので、本物のプログラマはこれらを使わないことを気に病む必要はない。そのうえ、これらの文は GOTO 指定で必要に応じて代替可能である。



352 :デフォルトの名無しさん:2009/11/23(月) 17:58:05
各事業所に配布する、帳票印刷プログラムを作成しているのですが、
Fontサイズについて、
13.5F、10F、9.5F、8.5F
のパターンのflort値を指定しています。
そこでお聞きしたいのですが、
(1)
パソコンによっては13.5Fなどのフォントサイズがないかもしれないですが、
できるだけ整数のフォントサイズを指定した方がいいのでしょうか。
皆さんは一般的に、
フォントサイズをどの範囲で選択されているのでしょうか。
(2)
極端なケースになりますが、
例えば13.1Fとか、7.3Fなどの端数を含めたフォントサイズの指定をすると
どういう扱いになるのでしょうか。
よろしくお願いします。

353 :デフォルトの名無しさん:2009/11/23(月) 17:59:07
>>349
表示とデータをバインドするクラスで
switchしたりif ... is ... するわけですね、わかります。

354 :デフォルトの名無しさん:2009/11/23(月) 18:09:21
>自己拡張コードを書く
今だとOSたんが許してくれません><


ところで、(意味を理解はしたんだけど)自己拡張って何だ?
self extending code か?と思って原文みたら

>self-modifying code

訳が違うよなぁ

355 :デフォルトの名無しさん:2009/11/23(月) 18:13:30
本物って言葉にオナニー以外の意味がないことがよく分かる名文

356 :デフォルトの名無しさん:2009/11/23(月) 18:17:13
>>353
えぇそうです
良くできました(´д`)エエコヤノ- ←これかわいくね?
表示フォーマットにあわせてそのクラスを作りそれにデータクラスをマップします
プログラム出来ても設計出来ない人に多いのが表示フォーマット=実データフォーマットとするパターン
もう目も当てられません
(C#なら属性使ってリフレクションでやっちまう方法もあるけどな(∀`*ゞ)テヘッ)

357 :デフォルトの名無しさん:2009/11/23(月) 18:20:05
>>351
後半の本物のプログラマは仕様書を書かないってのもおもしろいな
> 本物のプログラマは仕様書を書かない。ユーザーはどんなプログラムも手に入る身の上を幸運と思い、ありがたくおしいただくべきである。

だといいなあ

358 :デフォルトの名無しさん:2009/11/23(月) 18:21:13
>>356
それって今流行り(?)のM-V-VMってやつじゃね??

359 :デフォルトの名無しさん:2009/11/23(月) 19:08:51
MVVMはWPFに特化した構造だよ

360 :デフォルトの名無しさん:2009/11/23(月) 19:10:53
WPFがMVVMに特化のマチガイじゃねーの?

361 :デフォルトの名無しさん:2009/11/23(月) 19:16:49
違うよ
MVVMはWPFにあわせてMSの社員が考案したもの
コマンドバインディングっていうWPFの概念を活用する

362 :デフォルトの名無しさん:2009/11/23(月) 19:26:18
MVCとたいして違わんしな

363 :デフォルトの名無しさん:2009/11/23(月) 19:35:33
WPFのバインディングが強力だからというので
ViewをViewModelになんでもかんでもバインドするんだっけ

364 :デフォルトの名無しさん:2009/11/23(月) 19:46:36
MVVMは書かなきゃいけないことがたくさんになってわけわからん
うまくモデル化出来ないことも結構多くて不完全な気がする


365 :デフォルトの名無しさん:2009/11/23(月) 19:50:06
掲示板プログラムなんかで
投稿に失敗した場合、戻り値で失敗を知らせるのと
例外で失敗を知らせるのはどちらが正しい処理なんでしょうか。

失敗にバリエーションがある場合は例外の方がスマートかなと思ったんですが
使っていいのか今一わかりません。

366 :デフォルトの名無しさん:2009/11/23(月) 19:55:39
掲示板プログラムだったら成功したにせよ失敗したにせよいろんな情報が返ってくるだろうから
結果をまとめたオブジェクトを返すのがいいんじゃないか

367 :デフォルトの名無しさん:2009/11/23(月) 19:56:51
>>352
ですが、どなたか、アドバイスをよろしくお願いします…
(>_<)。

368 :デフォルトの名無しさん:2009/11/23(月) 19:58:34
  (M) V_V (M)
  ヽ(・ω・)ノ  フォッフォッフォッ
   /  /
   ノ ̄ゝ

369 :デフォルトの名無しさん:2009/11/23(月) 19:58:57
エラー起こした呼び出し元が直接エラー処理するならエラー返した方が良いが
更に上とかその上で纏めてなら例外だな

370 :デフォルトの名無しさん:2009/11/23(月) 20:01:45
>>367
それはC#じゃなくてWindowsの仕様とか各種プリンタのドライバに関する話だからスレチ気味だと思う
まずOSごとに挙動が違うし(ここで聞いてるって事は対象はWindowsだろうけど)
後者は多分、内部的には切り上げなり切り捨てなりやってるとは思うけど
ドライバに端数ありでもノーチェックで投げてるのか、プログラム側でPCにあるサイズに対応させてドライバに投げてるのかはどうなんだろう
おそらくあんまりそういうことする人居ないから自分で試してみる方が早いかもしれん

371 :デフォルトの名無しさん:2009/11/23(月) 20:06:45
>>367
印刷するところがよきに計らってくれる

372 :デフォルトの名無しさん:2009/11/23(月) 20:24:10
>>362
20年前のビットマップフォントじゃないんだから、
「サイズがない」なんてことは杞憂過ぎる。

これよく読んだほうがいいよ。
http://msdn.microsoft.com/ja-jp/library/dd297679.aspx

373 :372:2009/11/23(月) 20:25:38
アンカーミス
× >>362 ⇒ ○ >>367

374 :デフォルトの名無しさん:2009/11/23(月) 20:33:24
>>373
なるほど…いいリンクありがとうです。
俺も勉強になりました。
ところで、エクセルで8.25とかのフォントが指定できないのは、
ただ、エクセルがフォントを限定しているだけだからかな。

375 :デフォルトの名無しさん:2009/11/23(月) 21:34:31
Cをある程度かじって、本当につい最近
C#(vc2008)をはじめました。
初心者サイトを見ながら
System.Console.Write みたいなのでいじっている程度です。
そこで、突然こういった行が出て来ました。

System.Console.Write(2.ToString().PadLeft(10, '.'));

お聞きしたいのは 2.ToString().PadLeft(10, '.') の考え方についてです。
いろいろと調べてみると、System.Console.Write を
Systemという名前空間のConsoleというクラスのWriteというメソッドに
ドット演算子でアクセス(Cの構造体みたいな?)しているような感覚で
考えることができそうです。
その流れでいくと、2.ToString().PadLeft(10, '.') を理解することができません。
int型整数 2 のToStringメソッドの戻り値のPadLeftメソッドの戻り値?
intのメソッド?メソッドのメソッド?

どのように捉えたらいいのか何卒お教えください。






376 :デフォルトの名無しさん:2009/11/23(月) 21:36:31
それぞれのメソッドの返り値の型を見れば分かる

377 :デフォルトの名無しさん:2009/11/23(月) 21:38:03
string s = 2.ToString();
string ss = s.PadLeft(10, '.');
Console.WriteLine(ss);

378 :デフォルトの名無しさん:2009/11/23(月) 21:40:37
C言語を知ってるみたいなので細かいことは省略するが

メソッドは戻り値があるよな?
2.ToStringも戻り値がある。この場合はString型を戻り値にしてる。
"2"が返ってくるわけだ。
で、string型にもメソッドがあり、
PadLeftというメソッドがある。
これは文字を右寄せにするというメソッドだ。もちろん戻り値はString型

379 :デフォルトの名無しさん:2009/11/23(月) 22:04:30
皆様、迅速なお答えありがとうございます。
重ね重ねで申し訳ありませんが、
int型の整数(この場合は 2 )自体がメソッドをもっていて、
クラス(?) 2 のメソッドToString の戻り値が string型(例えば)"s"で、
string型の文字列(この場合は例えば"s")自体がメソッドをもっていて、
クラス(?) ”s”のメソッドPadLeftの戻り値がstring型例えば(”ss”)で、
それをConsole.Writeしてその戻り値が出力された・・・といった感じに
捉えてよろしいでしょうか?(冗長表現で申し訳ありません)

int や stringといった「型」がメソッドを持つというのが感覚的に捉えづらいのですが、
これはもうオブジェクト指向(?)プログラミングの本質を理解しない現状では
当然のことなのでしょうか…?

380 :デフォルトの名無しさん:2009/11/23(月) 22:09:56
型にその型自身に対する処理を含める考え方はオブジェクト指向の出発点だ

381 :デフォルトの名無しさん:2009/11/23(月) 22:10:09
C#ではint型もstring型みたいな基本的な型でもメソッドを持つ。
string型はそのままじゃintにならない

string s="2345";
int i;

i=s; //エラー

これは
i=int.Parse(S);
でok。
int自体がメソッドをもつってのはCから来たら新鮮(?)かもね

382 :デフォルトの名無しさん:2009/11/23(月) 22:13:31
>>379
難しいかな?
「型がメソッドを持つ」なんて言ったって、
要は構造体へのポインタを引数にとってその構造体をいじる関数ってだけだよ。

ただ第一引数の「構造体へのポインタ」がシンタックスシュガーで省略できるようになってるだけ。
なーんにも難しくない。

383 :デフォルトの名無しさん:2009/11/23(月) 22:14:14
int の実態は Int32
string も実態は String

384 :デフォルトの名無しさん:2009/11/23(月) 22:26:04
ありがとうございました。
かなりのことが理解できるようになり、今日一日唸っていたことが解決できました。

本当にありがとうございました!

385 :デフォルトの名無しさん:2009/11/23(月) 22:27:16
例えば、FormにTextBoxをはりつけて
そのTextBoxのなかになにかしらのコードを書くことによって
実行時にForm上のコントロールをいじりたい場合、どうやったらいいんでしょうか?
2008Expressを使ってます

386 :デフォルトの名無しさん:2009/11/23(月) 22:31:10
>>181

387 :デフォルトの名無しさん:2009/11/23(月) 22:34:53
>>385
できないと思った方がいい。
CodeDOM使って実行時にコードをコンパイルすればできなくはないけど
一度読み込んだコードは解放できないので>>385のような使い方をするとメモリリークする。
C#でなくてよければIronPythonやIronRubyを組み込むのが簡単。

388 :デフォルトの名無しさん:2009/11/23(月) 22:45:33
VisualStudioのC#の新規作成で
Windows フォーム アプリケーションを新規作成したとき
デフォルトの名前空間のusingが

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

これだけなんだけど、System.IOもよく使うから
いちいち新規作成するたびにusing System.IOって書くより最初から
using System.IOが入ってるようにしたいんだ。
どうやればいい?

389 :デフォルトの名無しさん:2009/11/23(月) 23:09:53
>>388
そんな余計なことは考えるな。
お前にとってはそうかもしれんが、世の中全体ではSystem.IOを使わないソースコードのほうが大半だ。

390 :デフォルトの名無しさん:2009/11/23(月) 23:10:40
>>387
無理なんですか、残念
IronPython、Expressでいけます?

391 :デフォルトの名無しさん:2009/11/23(月) 23:12:43
>>388
プロジェクトテンプレートを弄るしかないような気がする。
作ったことないけど
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCSExpress\ProjectTemplates\1041
の中に
WindowsApplication.zip
ってのがあって、
それ解凍して出てくる Program.cs だの form1.cs ってのの頭にいれるしかないのかなぁ。

デフォルトの壊したくなければユーザテンプレートのフォルダにコピーしてから編集だと思う。
たぶん。


392 :デフォルトの名無しさん:2009/11/23(月) 23:12:44
IronPythonは.NETさえ入っていればVisualStudio無くてもいい。

393 :デフォルトの名無しさん:2009/11/23(月) 23:15:43
>>325
何を言ってるのこの方は…


394 :デフォルトの名無しさん:2009/11/23(月) 23:16:12
>>387
ここ見ながらプロジェクトテンプレート作るといい。
http://msdn.microsoft.com/ja-jp/library/ms247120(VS.80).aspx

System.IO どころじゃなく
他にも良く書くパターンを色々盛りこんでつくりやすいテンプレート作るといいよ。


395 :デフォルトの名無しさん:2009/11/23(月) 23:18:07
>>389
System.IOを使わないと
ファイルの保存とかができないorz

もっと簡単にファイルに保存とかできる?

396 :デフォルトの名無しさん:2009/11/23(月) 23:19:03
>>389 はアフォ

397 :デフォルトの名無しさん:2009/11/23(月) 23:22:51
アフォ言うやつがアフォ
System.IO なんか普通使わない

398 :デフォルトの名無しさん:2009/11/23(月) 23:24:02
>>389
System.IOそんなに使わないだろってのには同意するけど
使ってないやつはIDEでまとめて除去できるんで、好きなようにやりゃいいと思う。

過剰反応しすぎじゃね。何か嫌なことでもあって機嫌悪いのか?

399 :デフォルトの名無しさん:2009/11/23(月) 23:24:32
>>394
おお、めっちゃわかりやすいz!
ありがとう!すげー、こんな便利な機能あったのか

400 :デフォルトの名無しさん:2009/11/23(月) 23:30:27
そんなことよりも、usingディレクティブをわざわざ自分で書くことなんてないと思うんだが

401 :デフォルトの名無しさん:2009/11/23(月) 23:33:30
まぁないな。使い初めにでてこないのが「ん?」ってのが
いやだといえばいやなんだがとりあえずすぐに Ctrl + . で
終わりだな。

402 :デフォルトの名無しさん:2009/11/23(月) 23:39:43
>>400-401
Ctrl + . で勝手に追加されるんですか??
やっても上手くいかない・・・どうやるんでしょう??


403 :デフォルトの名無しさん:2009/11/23(月) 23:43:36
>>402
StreamReaderって打ってからおもむろに「Ctrl+.」

難点はStreamReader部分だけはIntellisenseが効かないから
そのパッケージの良く使うクラス名しっかり覚えとかなきゃいけない点。

404 :デフォルトの名無しさん:2009/11/23(月) 23:44:47
>>402
スマートタグのショートカットだよ。
using されてなくて見つからないクラス名書いたらその部分の
右下あたりになんか四角いの出るだろ。
そのときに using かフルネームか選んで完了。

スマートタグ自体はインターフェイスの実装とか名前の変更とか
色々他にもあるけども。


405 :デフォルトの名無しさん:2009/11/23(月) 23:45:45
>>181

406 :デフォルトの名無しさん:2009/11/23(月) 23:46:00
入門書にならって、自分なりにclassとか書いてるんですが、どこまで細分化するか悩んでいます。
例えば、銀行口座クラス
class Bank
{
 public string Name; //銀行名
 public string Number; //口座番号(数学的計算対象にならないのでstringでok?)
}
というclassを作るとすると、銀行口座は最低でも店番、普通/当座、口座番号の3つに細分化出来るので
class Account
{
 public string StoreNumbar; //店番
 public int Type; //0と1で区別
 public string Number; //口座番号
}
というclassを作ったほうがよいのでしょうか?

407 :デフォルトの名無しさん:2009/11/23(月) 23:46:46
System.Messaging.dll への参照を追加する必要があります。
とヘルプに書いてるんですが
これって参照設定を右クリックして参照の追加でSystem.Messagingを追加するという意味なんでしょうか?
dllの追加、参照の追加、usingの違いがよくわかりません

408 :デフォルトの名無しさん:2009/11/23(月) 23:55:23
>>406
どう使うかによるんじゃないかな。
銀行名と口座番号だけ必要なら上でいいし、
銀行コード/店舗コードや口座の種類で処理わけるんだったら下だろうし。

必要な機能だけモデルに盛り込めばいいと思うよ。


409 :デフォルトの名無しさん:2009/11/23(月) 23:59:21
>>406
口座番号は string で良いけど、数字以外が設定された場合の処理を書いといたほうがいいよ。
あと普通/当座の区分け用の public int Type は enum にした方がよいかと。


410 :406:2009/11/24(火) 00:07:22
ありがとうございます。
>>408
確かに、必要に応じて必要な機能のみ実装しないと、どんなモデルも果てしなく巨大化しますよね。
事前にしっかり設計を考えるようにします。
>>409
enumは初めて知りましたorz
機能を知らないと余計な迷いや曖昧さが残ってしまいますね。
まず機能を把握出来るよう頑張ります。

411 :デフォルトの名無しさん:2009/11/24(火) 00:10:44
>>406
まあ、何が聞きたいのかよくわからないけど、とりあえず銀行クラスが口座番号の
情報を持つのはかなり奇妙に見える。

ひょっとしてこういうことが聞きたいのかな?

銀行口座を表すクラスAccountがあるとして、その中に全ての情報を平坦に並べるか、
それとも契約者氏名や口座番号といった口座情報を表すAccountInfoクラスと、
取引の履歴を表すTradeHistoryクラスを用意して、Accountクラスはそれらのインスタンスの
フィールドを持つようにすべきか、みたいなことを聞きたいんだろうか。

412 :406:2009/11/24(火) 00:16:17
>>411
おっしゃるとおりです。
ぼんやりと考えたまま書き込んでしまいました。

413 :デフォルトの名無しさん:2009/11/24(火) 00:25:39
>>407
> これって参照設定を右クリックして参照の追加でSystem.Messagingを追加するという意味なんでしょうか?
うん
> dllの追加、参照の追加、usingの違いがよくわかりません
dllの追加って表現はMSDNにあったっけ?
dllへの参照を追加って感じの文言じゃない?

ソースファイル冒頭にずらずら書くusingは
コードでその名前空間を書くのは省略していきなりクラス名書きますから
コンパイラさんは適当に補ってくださいねって意味
dllとは関係ない

414 :デフォルトの名無しさん:2009/11/24(火) 00:34:36
コンソールアプリケーションを新規作成して実行したらメモリが20MBもあるんですが、こっからどうやって削るんですか?

415 :デフォルトの名無しさん:2009/11/24(火) 00:40:55
あきらめろ。

416 :デフォルトの名無しさん:2009/11/24(火) 00:59:31
>>414
[DllImport("Kernel32")]
static extern bool SetProcessWorkingSetSize(IntPtr handle, uint min, uint max);
static void Main(string[] args) {
 SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, 0xFFFFFFFFU, 0xFFFFFFFFU);

 Console.ReadKey();
}


417 :デフォルトの名無しさん:2009/11/24(火) 02:10:46
>>387
>一度読み込んだコードは解放できないので
んあこたあない

418 :デフォルトの名無しさん:2009/11/24(火) 02:14:28
またそういうことをw


419 :デフォルトの名無しさん:2009/11/24(火) 02:15:15
あー>>418>>416宛ね


420 :デフォルトの名無しさん:2009/11/24(火) 02:47:32
>>416
コンパイルできました。
20MBから2MBに減りました
コンソールアプリのテンプレートを書き換えて使うことにします。ありがとうございました。

421 :デフォルトの名無しさん:2009/11/24(火) 03:01:35
やれやれ目欄も見ていないのか。一応マジレスしておこう。

>>420
http://msdn.microsoft.com/ja-jp/library/cc429341.aspx
> dwMinimumWorkingSetSize と dwMaximumWorkingSetSize の両方に 0xffffffff を指定すると、
> 指定したプロセスのワーキングセットのサイズが一時的に 0 になります。
> プロセスは実質上、物理 RAM メモリから仮想メモリにスワップアウトします。

422 :デフォルトの名無しさん:2009/11/24(火) 03:22:16
staticなクラス作っちゃうと
object型を継承してるから
インスタンス作成できず無意味なToString()が残っちゃうね。
あるのに使えないって気持ち悪いね。変な仕様にするなよなー。

423 :デフォルトの名無しさん:2009/11/24(火) 03:35:46
バイナリファイルを読み込んで中身を検索したいです。

filestreamからバイト配列に読み込んで、
Array.IndexOfとやったのですが、1バイトしか
検索出来ないみたいで詰まってます。
1バイトずつ確認するしか方法は無いのでしょうか。

バイナリエディタのように、たとえば16進数で[00 4B 16]が
あるかを確認したいです。

424 :デフォルトの名無しさん:2009/11/24(火) 03:39:32
パソコンは魔法の箱じゃないよ

425 :デフォルトの名無しさん:2009/11/24(火) 04:42:13
どうみてもパソコンは魔法の箱です。
こんな小さな箱にすげー膨大な情報が入ってて、無線で遠距離通信が可能で
超高速で計算ができるなんてどうみても魔法。

426 :デフォルトの名無しさん:2009/11/24(火) 05:28:47
黙ってろよ魔法使い

427 :デフォルトの名無しさん:2009/11/24(火) 05:47:44
まじょっこメグ!

428 :デフォルトの名無しさん:2009/11/24(火) 07:56:20
>>432
0x00 で検索、あったら次が 0x4B か確認、あったら次が 0x16 か確認ってことかなぁ。

部分配列を検索するメソッドはたぶん無いから自分でメソッド作るしかなさそう。
普通に一個づつ検索する他にBM法とかKMP法とかのアルゴリズムがあるから
がんばって!

429 :デフォルトの名無しさん:2009/11/24(火) 08:28:01
ショートパスだな

430 :デフォルトの名無しさん:2009/11/24(火) 14:49:56
>>428
>BM法とかKMP法
ありがとうございます!知りませんでした。
理解するまで時間がかかりそうですが、頑張ってみます!

431 :デフォルトの名無しさん:2009/11/24(火) 16:12:12
こんなエラーが出ました。これは一体、どういうことなのでしょうか?(´・ω・`)


エラー 1 ResX ファイル 行 171、位置 5 上のデータの型 は、作成中に次の例外をスローしたため読み込めません: GDI+ で汎用エラーが発生しました。 が無効です。
エラー 2 TargetInvocationException: 行 171、位置 5 上のデータの型 は、作成中に次の例外をスローしたため読み込めません: GDI+ で汎用エラーが発生しました。
場所 System.Resources.ResXResourceReader.ParseXml(XmlTextReader reader)
場所 System.Resources.ResXResourceReader.EnsureResData()
場所 System.Resources.ResXResourceReader.GetEnumerator()
場所 Microsoft.Build.Tasks.ProcessResourceFiles.ReadResources(IResourceReader reader, String fileName)
場所 Microsoft.Build.Tasks.ProcessResourceFiles.ReadResources(String filename, Boolean shouldUseSourcePath)
場所 Microsoft.Build.Tasks.ProcessResourceFiles.ProcessFile(String inFile, String outFile)
XmlException: 行 171、位置 5 上のデータの型 は、作成中に次の例外をスローしたため読み込めません: GDI+ で汎用エラーが発生しました。 行 171、位置 5 です。

432 :デフォルトの名無しさん:2009/11/24(火) 16:17:55
なにやってる最中のエラーかぐらい書けよ。
見た感じコンパイル中にリソースのファイルが
ぶっ壊れてて続行できなかったといった感じだが。

433 :デフォルトの名無しさん:2009/11/24(火) 16:37:24
ひょっとしてプログラムの実行中ではなく、デザイナの画面にそのメッセージが出てるのか?
そのプログラムはXMLを使ってる?

434 :デフォルトの名無しさん:2009/11/24(火) 17:57:56
Visual StudioでC#つくるとき
名前ってのと
ソリューションディレクトリを作成ってあるけど

ソリューションディレクトリってただプロジェクトのファイルの階層がちょっと変わるだけ?
作ったプログラム自体には何も影響なし?

435 :デフォルトの名無しさん:2009/11/24(火) 18:04:24
うん

436 :431:2009/11/24(火) 19:20:01
すまん。
ビルドしている時に出るの。
リソースの中にxml使っているけど、もらい物だから分からない。
どうしたら良いんだろう?(´・ω・`)

437 :デフォルトの名無しさん:2009/11/24(火) 19:23:29
まずそのもらい物を理解してから
質問したらどうだろうか

438 :デフォルトの名無しさん:2009/11/24(火) 19:33:29
理解するくらいなら自分で作り直した方が早い

439 :デフォルトの名無しさん:2009/11/24(火) 20:59:45
やった!クラスの継承ができた!
オーバーライドとかとかめんどくさいなぁ。
同じ名前なのに全く別の処理すんな!まぎらわしいだろ!

440 :デフォルトの名無しさん:2009/11/24(火) 21:02:05
面白くない

441 :デフォルトの名無しさん:2009/11/24(火) 21:09:43
int x=132*58;
printf("%d\n", x);

442 :デフォルトの名無しさん:2009/11/24(火) 21:43:47
>>434
初心者にとってはアプリはプロジェクト一個に納まるものという認識。
しかし熟練してくると一つのアプリでもDLLとEXEに分けるようになる。(例えば単体テストのため)
つまり、アプリ≠プロジェクト。
そうすると、関連するプロジェクトを纏めて管理できる機能が非常に有り難く感じてくる。

443 :デフォルトの名無しさん:2009/11/24(火) 21:48:45
C++で作ったDLLをC#でコールできるのでしょうか?

444 :デフォルトの名無しさん:2009/11/24(火) 21:50:19
優先度順
・関数をC向けにエクスポートしてC#からDllImport
・C++/CLI
・COM

445 :デフォルトの名無しさん:2009/11/24(火) 22:05:49
>>442
テストプロジェクトなんかは良く作るよな

446 :デフォルトの名無しさん:2009/11/24(火) 22:26:00
ラムダ式ってなんですか?派閥メンのことですか?

447 :デフォルトの名無しさん:2009/11/24(火) 22:27:01
ぐぐれよ

448 :デフォルトの名無しさん:2009/11/24(火) 22:30:41
こういうのでboolより小さいのってあります?

public struct abc
{
public bool name;
}

449 :デフォルトの名無しさん:2009/11/24(火) 22:33:26
ない
勘違いしてそうだけどboolは1バイトだからbyteと同じ大きさ

450 :デフォルトの名無しさん:2009/11/24(火) 22:38:41
>>449
それはしりませんでした
(*- -)(*_ _)

451 :デフォルトの名無しさん:2009/11/24(火) 22:39:12
boolは4バイトじゃないの?

452 :デフォルトの名無しさん:2009/11/24(火) 22:41:31
sizeof(bool)してみればわかるだろ

453 :デフォルトの名無しさん:2009/11/24(火) 22:42:01
調べてかけよ。1byteだよ。

それに絡んだすっごい雑談だがそのせいで bool は
blittable ではない(マーシャリング後は 4 byte)。


454 :デフォルトの名無しさん:2009/11/24(火) 22:44:31
boolはboolだから実際のデータ表現に依存したコードは書くなってことんなんだろ
MSDN見てもSystem.Booleanのサイズはなかなか載ってない

455 :デフォルトの名無しさん:2009/11/24(火) 22:48:22
まあでもサイズが大きいか小さいかぐらいは気にしたくはなるわなぁ。

456 :デフォルトの名無しさん:2009/11/24(火) 23:13:58
GetType()ってめちゃくちゃ重くないですか

457 :デフォルトの名無しさん:2009/11/24(火) 23:16:13
こういう重いメソッドってデバッグ用と割り切って使わないとだめですよね?
なんでソフトが遅いのか調べるのに苦労するんですが、こういう本番では使わない方がいいメソッドって区別する方法ないんですか?


458 :デフォルトの名無しさん:2009/11/24(火) 23:19:02
そのメソッドが遅いか遅くないかというのは相対的なものだからそういう考え方は意味がない。
たとえば,GetTypeはたいていリフレクションに使われるけど,
後に続くリフレクションの処理の方がずっと重いと考えられるからGetType自体のコストはほとんど無視できる。

459 :デフォルトの名無しさん:2009/11/24(火) 23:24:47
あーでもたとえば「リフレクションは重い処理だ」ってのはどういうとこ調べたらわかるのか、
とかは知りたいわな。


460 :デフォルトの名無しさん:2009/11/24(火) 23:26:49
言われてみると例外発生は高コストだ、とかも一体どこで覚えたのか忘れちゃったぜ

461 :デフォルトの名無しさん:2009/11/24(火) 23:27:32
リフレクションは重い処理だといってもそんなに頻繁に使わなければ問題ない。
普通に作って遅い所を直すのが正解。

462 :デフォルトの名無しさん:2009/11/24(火) 23:29:02
バインディングなんかは陰の方でリフレクション大活躍だしな

463 :デフォルトの名無しさん:2009/11/24(火) 23:32:57
何が高コストなのかおさえとくのは必要だと思うけどね。
実装のしやすさとコストを天秤にかけらんないじゃんね。




464 :デフォルトの名無しさん:2009/11/24(火) 23:33:00
全メソッドを抜き出して、処理時間を計測して、一覧表にするソフトを作れ

465 :デフォルトの名無しさん:2009/11/24(火) 23:34:50
**こういう本番では使わない方がいいメソッドって区別する方法ないんですか?**

わかんないならわかんないっていえばいいのに。
明後日の方向いた回答しか出来ないんだったら黙ってればいいのに。
なんでリフレクションは必要ですみたいな話になってんのよ。

466 :デフォルトの名無しさん:2009/11/24(火) 23:37:26
>>464
いいだしっぺの法則ktkr

467 :デフォルトの名無しさん:2009/11/24(火) 23:38:07
>>465
>わかんないならわかんないっていえばいいのに。
>明後日の方向いた回答しか出来ないんだったら黙ってればいいのに。
わかんないなら黙ってろよwwwww

468 :デフォルトの名無しさん:2009/11/24(火) 23:39:42
VTune がもう少し安かったらいいんだがなぁ…

469 :デフォルトの名無しさん:2009/11/24(火) 23:41:00
他のクラスから参照渡ししたいのですがthisに入れててしまうと参照渡しにならないようです。
どのように書けば良いのでしょうか?。

public FormName( ref int count)
{
InitializeComponent();

this.count= count;
}

470 :デフォルトの名無しさん:2009/11/24(火) 23:41:18
FxCopあたりもパフォーマンス警告出してくれるよね


ところで普通のプログラム書いてる時ってそんなにリフレクション使うか??


471 :デフォルトの名無しさん:2009/11/24(火) 23:41:38
事務処理システムを作成しています。
大量の項目のテキストデータを読み込む処理なのですが、項目数が420程あり、accessではテストデータの作成ができません。
皆さんは、この項目数のテキスト型のテストデータを作成されるとき、どのように編集されていますか?

472 :デフォルトの名無しさん:2009/11/24(火) 23:42:13
>>489
int の参照をクラス内に保持したいってことなんだろうけど
それは出来無い相談だぜ

473 :デフォルトの名無しさん:2009/11/24(火) 23:43:48
>>471
CSVみたいなのだったら perl だの ruby だのでテストデータを生成するプログラム書くことが多いなぁ。



474 :デフォルトの名無しさん:2009/11/24(火) 23:44:25
>>472
やはりそうですか、参照元に通知したい事があったので試みたのですが上手く動きませんでした。
他の手を考えてみようと思います。

475 :デフォルトの名無しさん:2009/11/24(火) 23:45:17
>>474
int なんかじゃなくイベントで通知したらいいんじゃないかと思います。

476 :デフォルトの名無しさん:2009/11/24(火) 23:51:13
>>470
まともに設計してるなら使わんよ
開発ツールなら使いまくり

477 :デフォルトの名無しさん:2009/11/24(火) 23:54:31
enum 評価 {良い, 普通, 悪い}

評価 このスレ評価 = 評価.良い;

478 :デフォルトの名無しさん:2009/11/25(水) 00:02:12
>>470
誰かも言ってるがバインド処理系にはよく使う
使わないと100ステップ〜数万ステップ以上かかないといけなくなる
10万ステップいかない小さなプログラムを作ったり、分業でちまちま作ってる人達には無縁の代物かもね

479 :デフォルトの名無しさん:2009/11/25(水) 00:05:37
>>471
仕事にけちをつけるつもりはないが、420項目が並列に並んでいることはまずありえないので、
まずはデータベースを正規化することから考える。

480 :デフォルトの名無しさん:2009/11/25(水) 00:29:34
趣味で書いてる時はリフレクション多用して遊ぶけど、仕事でやってる時は滅多に使わないな。

481 :デフォルトの名無しさん:2009/11/25(水) 00:30:02
リフレクションってアセンブリがどうこうするやつだっけ
知らんけど

482 :デフォルトの名無しさん:2009/11/25(水) 00:30:52
>>471
面倒だから Excel

483 :デフォルトの名無しさん:2009/11/25(水) 00:35:37
値型
メソッドにぶちこんでも変わらないやつ

参照型
メソッドにつっこむとかわっちゃうやつ

でおk?

func(int x){

x=3;
}
ってやっても、funcにint変数つっこんでも3にならないけど

func(class X){
X.abc=4;
}
ってやったら4にかわっちゃう
みたいな?

484 :デフォルトの名無しさん:2009/11/25(水) 00:40:36
そういういい加減な覚え方をすると嵌まります
C# 値型 参照型 でググって出てきたのを片っぱしから読んできなさい

485 :デフォルトの名無しさん:2009/11/25(水) 01:54:42
無料でC#できるっつーから無料のExpressをなんとなくDLしたけど
基本的なことはだいたい勉強した。
配列の宣言のほうほうとかif文とかdo〜whileを使うときはwhileのうしろに;をつけるとか。
次なにやればいい?

486 :デフォルトの名無しさん:2009/11/25(水) 01:59:34
やりたいことやれよw
ゲームでもツールでも、何かしら作りたいものがあるんじゃないの?

487 :デフォルトの名無しさん:2009/11/25(水) 02:03:20
入門者向けの手ごろな課題…GUIの勉強でラーメンタイマーとか?

488 :デフォルトの名無しさん:2009/11/25(水) 03:46:17
class A{
public readonly int x=20;
}

class B{
public const int y=20;
}

この場合、readonlyとconstの違いはインスタンスを作成しなくても使えるかどうかってだけですか?

489 :デフォルトの名無しさん:2009/11/25(水) 06:46:08
>>479
420項目ほどを打ち出す単票の帳票を作成するプログラムを作成していているのですが、
その帳票を後で再印刷するかもしれないんです。
なので、420項目のデータを考えています。

Perlなどの技術を知らないので、Excelしかないでしょうか…。
accessは項目数が超過してしまうと思います。

490 :デフォルトの名無しさん:2009/11/25(水) 06:59:28
>>485
まあ、作る前にクラスを勉強するべきだな

491 :デフォルトの名無しさん:2009/11/25(水) 07:09:21
デリゲートってどういう時によく使うんですか?
デリゲートなんかわざわざ作らないで呼び出される側のコードを書き換えた方が早いと思うんですが、
一人でソフト作ってる時にデリゲート使う事ってありえなくないですか?

492 :デフォルトの名無しさん:2009/11/25(水) 07:11:26
お前はそれでいいよ。

493 :デフォルトの名無しさん:2009/11/25(水) 07:47:10
2つのクラスをまたいでデリゲートと使うにはどう書けばいいんですか?
DTでアクセシビリティに一貫性がありませんというエラーが出てしまいます。
class delegateTest
{
 delegate void call();

 public void DT( call test )
 {
  test();
 }
}

class Program
{
 static void Main(string[] args)
 {
  delegateTest b = new delegateTest();
  b.DT(A);
 }
void A(){}
}

494 :デフォルトの名無しさん:2009/11/25(水) 08:27:24
>>478
それ設計おかしいよw
素人さん?

495 :デフォルトの名無しさん:2009/11/25(水) 08:30:13
>>493
とりあえずそのソースでは、classやdelegateがpublicじゃないため

496 :デフォルトの名無しさん:2009/11/25(水) 09:28:38
>>493
デリゲートは型だからクラスの外で宣言していい

497 :デフォルトの名無しさん:2009/11/25(水) 09:32:38
publicで呼び出せました。ありがとうございます
で、これはどう使えばいいんですか?

498 :デフォルトの名無しさん:2009/11/25(水) 09:38:12
デリゲートって関数ポインタか

499 :デフォルトの名無しさん:2009/11/25(水) 09:39:47
>>489
そんな設計ありえねーから頭冷やしてよく考え直せ。

500 :デフォルトの名無しさん:2009/11/25(水) 09:41:19
>>471
ID, 項目ID, 値
っていうテーブルを作って420行にすればいいじゃん

501 :デフォルトの名無しさん:2009/11/25(水) 11:51:21
>>489
420項目を単票に印刷するとしても単純に420項目並べないでしょ?
見やすい様にグループ分けするでしょ?
そうやってテーブルも作ればいいじゃない

502 :デフォルトの名無しさん:2009/11/25(水) 14:25:13
配列ってint a[1000];とかやったら1000まで確保されちゃうよね。

そうじゃなくて都合上
a[0]="aaa";
a[1]="bbb";
a[2]="ccc";
a[4]="ddd";
a[8]="eee"; //a[5]〜a[7]は存在しない
みたいにしたいんだが
2の累乗しかとれないようにするにはどうやればいい?

503 :デフォルトの名無しさん:2009/11/25(水) 14:31:16
Dictionaryで

504 :デフォルトの名無しさん:2009/11/25(水) 14:35:03
>>502
a[0]="aaa";
a[1]="bbb";
a[2]="ccc";
a[3]="ddd";
a[4]="eee";

で適当にインデックス変換すればいいだろ

505 :デフォルトの名無しさん:2009/11/25(水) 14:36:45
HashTableで

506 :デフォルトの名無しさん:2009/11/25(水) 14:42:58
厳密に制限するなら、クラス作ってインデクサで判断するべきだよな
内部管理はディクショナリが適当

507 :デフォルトの名無しさん:2009/11/25(水) 14:44:01
>>502
スレ違い

508 :デフォルトの名無しさん:2009/11/25(水) 14:47:51
>>502 2の累乗に0は存在しないよ

509 :デフォルトの名無しさん:2009/11/25(水) 15:51:58
すみません質問です
匿名関数を使用した場合、実装されているスコープのデータにアクセスできますが
ThreadStart等に匿名関数を指定して別スレッドで実行した場合、呼び出し元の関数が抜けても
スレッド内からは安全に呼び出し元のスコープ内の変数にアクセスできますか?


510 :デフォルトの名無しさん:2009/11/25(水) 16:14:42
>>509
MSDNをちゃんと読もうね。

511 :デフォルトの名無しさん:2009/11/25(水) 16:14:55
うん

512 :デフォルトの名無しさん:2009/11/25(水) 16:15:26
http://msdn.microsoft.com/ja-jp/library/0yw3tz5k%28VS.80%29.aspx

513 :デフォルトの名無しさん:2009/11/25(水) 16:18:48
デリゲートって
Aさんが大雑把なクラスの設計をして
Bさんがそのクラスの細かい動作を使うときに役に立つのか。

たった一人で全部作る場合いらないのかなぁ

514 :デフォルトの名無しさん:2009/11/25(水) 16:25:39
なんでやねん

515 :デフォルトの名無しさん:2009/11/25(水) 16:25:44
えっ?

516 :デフォルトの名無しさん:2009/11/25(水) 16:39:02
デリゲートの使い方の一例だが、ほんの少しだけ違う処理がある時
サブクラスを数揃える手もあるが、デリゲートを使った方がスマートに設計できる時もある
道具の機能は使う人の能力次第だわ

517 :デフォルトの名無しさん:2009/11/25(水) 16:43:13
取り敢えずはList<T>.Exists(Predicate<T>)やRegex.Replace(String,String,MatchEvaluator)
辺りでイベント以外のデリゲートの使い方を実感しておくと
後々「デリゲート使えば便利じゃね?」的な発想ができるようになると思う

518 :デフォルトの名無しさん:2009/11/25(水) 16:44:54
>>516
たしかにその人の能力しだいだが
能力のない人でも
道具の機能を有用に使える方法を集めたデザインパターンみたいのがもっとあればいいな

519 :509:2009/11/25(水) 17:12:58
ありがとう!
これで安心して使えます

520 :デフォルトの名無しさん:2009/11/25(水) 17:24:13
C#ですごい発見した

switch 〜case使う必要ない。

switch (a){
case 0:「あさです」と表示 壊れる
case 1:「ひるです」と表示 壊れる
case 2:「よるです」と表示 壊れる
}

これやるより
readonly string[] a={"あさです","ひるです","よるです"};
a[x]を表示

このほうが簡潔にできる。

521 :デフォルトの名無しさん:2009/11/25(水) 17:29:26
>>520
どう考えても最初から後者を考えるのだが( ・ω・)y─┛〜〜

522 :デフォルトの名無しさん:2009/11/25(水) 17:29:58
???何いってんだ???
enumいらないって言ってたやつと同一人物か??




523 :デフォルトの名無しさん:2009/11/25(水) 17:31:37
>>520

>>216と同じ空気を感じるwww
壊れるって何かと思ったらbreakのことか。

まあその例ではそれでいいんじゃね?


524 :デフォルトの名無しさん:2009/11/25(水) 17:32:56
>>520
そうだね。そういう場合は switch - case 使わなくていいね。

525 :デフォルトの名無しさん:2009/11/25(水) 17:33:03
そもそも012ってどうなんだ

526 :デフォルトの名無しさん:2009/11/25(水) 17:37:40
たぶん教科書みたいなのの例題がそうなってるんだろ。


527 :デフォルトの名無しさん:2009/11/25(水) 17:38:49
意外とウルフラムの作者かも知れん!

528 :デフォルトの名無しさん:2009/11/25(水) 17:39:20
enumの存在価値を教えれ。

enum 時間{ 朝, 昼, 夜}
Now=時間.朝とかやるより

abstract class 時間{
}

class 朝 : 時間{
}

class 昼 : 時間{
}

class 夜 : 時間{
}

時間 Now=new 朝();

ってやったほうがenum使うより細かい制御できね?

529 :デフォルトの名無しさん:2009/11/25(水) 17:44:31
>>528
細かい制御する必要ないときに enum 使うんだよ。
実際 Java とかで enum なかったころは似たようなことしてた。
それに >>528 のケースだと、一々インスタンス作ることになって無駄だよね。

以下が定石。

public class 時間 {
private 時間() {}
public static readonly 時間 朝 = new 時間();
public static readonly 時間 昼 = new 時間();
public static readonly 時間 夜 = new 時間();
}

時間 Now = 時間.朝;


530 :デフォルトの名無しさん:2009/11/25(水) 17:46:47
>>528
多分>>216と同一人物なんだろうけど・・・
君の場合は四の五の言わずに一度通しでプログラム書いてみた方がいいと思うよ。
煽りでもなんでもなく。その方が教科書に書いてあることも実感をともなって理解出来ると思う。

531 :デフォルトの名無しさん:2009/11/25(水) 17:48:00
存在価値がわからないなら使わなきゃいいじゃない。
他の方法で実現出来るならそれで実現すればいい。

532 :デフォルトの名無しさん:2009/11/25(水) 17:48:38
より細かい制御が出来る方だけでよいというなら
foreachも不要(直接IEnumerator操作)
クラスの継承もデリゲートも不要(インターフェイス)

533 :デフォルトの名無しさん:2009/11/25(水) 17:50:48
そもそも制御構造とかいらなくね?
GOTOさえあればより細かい制御ができてなんでもできるよね。

ってことですね!


534 :デフォルトの名無しさん:2009/11/25(水) 17:52:45
>>532
真面目な話、クラスの継承不要説ってたまに出るよね。
インターフェースのみ存在してて、実装の継承は委譲で賄えってやつ。
どっかの言語がそんな風だった記憶がある。


535 :デフォルトの名無しさん:2009/11/25(水) 17:56:29
>>528
>>222

ちなみに細かい制御が必要な時すら enum と switch 使うのは悪い使い方。


536 :デフォルトの名無しさん:2009/11/25(水) 17:57:40
>>529
おー その方法がいちいちインスタンス作らなくてよさそうだ。なんて素晴らしい方法だ。
もうenumつかわんでその方法使うわ。

537 :デフォルトの名無しさん:2009/11/25(水) 18:04:05
そしてswichで判定出来ないと憤怒して列挙型を使う>>536であった

538 :デフォルトの名無しさん:2009/11/25(水) 18:07:04
>>528
細かい制御が必要ならそうするけど
普段はそんな制御要らん

スーパーに買い物に行くのに自家用ジェット使うかお前は?

539 :デフォルトの名無しさん:2009/11/25(水) 18:09:18
例えが意味不明w

540 :デフォルトの名無しさん:2009/11/25(水) 18:10:02
用途を考えろって事でしょ。

541 :デフォルトの名無しさん:2009/11/25(水) 18:11:24
用途を適切に判断するって実は物凄く高度なんだぞ

542 :デフォルトの名無しさん:2009/11/25(水) 18:11:42
自家用ジェットは制御しづらいだろー
普通に歩くのは遅いけど細かい動作が可能
自家用ジェットは早いけど細かい制御が不可能

そうか!enumは自家用ジェットか。

543 :デフォルトの名無しさん:2009/11/25(水) 18:14:18
せめてローラースルーとセグウェイくらいにしとけw

544 :デフォルトの名無しさん:2009/11/25(水) 18:17:27
>>542
飛行許可とらないと違法だから気をつけろよ

545 :デフォルトの名無しさん:2009/11/25(水) 18:23:58
ジェネリックのときに T を使うことが一般的ですが、この”T”は何の略ですか?

546 :デフォルトの名無しさん:2009/11/25(水) 18:25:04
Type だと思うよ

547 :デフォルトの名無しさん:2009/11/25(水) 18:32:00
>>546
なるほど!すっきりしました。

548 :デフォルトの名無しさん:2009/11/25(水) 18:58:51
>>543
ローラースルーって何ぞやと思ってぐぐったら、もの自体は見覚えあった

549 :デフォルトの名無しさん:2009/11/25(水) 19:21:46
WebClientクラスとWebRequest/WebResponseクラスの使い分けがよくわかりません。
何でもかんでもWebRequestじゃまずいんでしょうか?

550 :デフォルトの名無しさん:2009/11/25(水) 19:25:27
別に構わない
ちょっとWebClientの方が細かいことできない分簡単ってだけ

551 :デフォルトの名無しさん:2009/11/25(水) 19:38:29
>>550
ありがとうございます

552 :デフォルトの名無しさん:2009/11/25(水) 19:49:32
ジェネリックなコレクションクラスを定義しようとしたところ、
インターフェイス未定義エラーがでました。しかし、すでに同じ名前のメソッドを定義しており、
修正の仕方が分かりません。やり方をご存知の方、よろしくお願いします。

public class ToolStripRadioGroup<T> : IEnumerable<T> where T : ToolStripMenuItem
{
List<T> list;
public void Add(T item)
{
list.Add(item);
}
public IEnumerator<T> GetEnumerator()
{
foreach (var l in list)
{
yield return l;
}
}
}
エラー CS0738: 'ToolStripRadioGroup<T>' はインターフェイス メンバ 'System.Collections.IEnumerable.GetEnumerator()' を実装しません。
'ToolStripRadioGroup<T>.GetEnumerator()' は、一致する 'System.Collections.IEnumerator' の戻り値の型を
持たないため、'System.Collections.IEnumerable.GetEnumerator()' を実装できません。

553 :デフォルトの名無しさん:2009/11/25(水) 19:51:56
T l in list

554 :デフォルトの名無しさん:2009/11/25(水) 19:53:10
>>553
そういう問題じゃねーよ馬鹿。
低脳は引っ込んでろ。

555 :デフォルトの名無しさん:2009/11/25(水) 19:55:04
>>552
インターフェイスの明示的実装

556 :デフォルトの名無しさん:2009/11/25(水) 20:03:46
IEnumerable<T>に非ジェネリック版のSystem.Collections.IEnumeratorを含んでいて
それを実装する必要がある。

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
 return GetEnumerator();
}


557 :デフォルトの名無しさん:2009/11/25(水) 20:40:08
あることをしたい場合
クラス設計が複数考えられる場合
どんなクラス設計にすればいいのかな?

558 :デフォルトの名無しさん:2009/11/25(水) 20:48:27
好きにしろよ。

559 :デフォルトの名無しさん:2009/11/25(水) 20:52:52
>>557
エスパーを期待しすぎだwwww
保守性が高くて速度性能が良くてメモリ効率が良いクラス設計にすればいいんじゃね?

560 :デフォルトの名無しさん:2009/11/25(水) 21:02:18
よく
アップデートを確認する
とか、自動アップデートがついてるソフトがありますが
あれはどうやって実装してるんですか?

ちょっと考えてみたのが
Updata.txtというファイルと
アップデートするファイルをサーバー上に置いておいて

Updata.txtにアクセス
Upload.txtにはバージョンとダウンロードするファイルを記載
もし、バージョンが今より新しければアップデートするファイルをダウンロード

今あるものを削除して置き換え


という方法なのですが
起動してる状態で削除できないし
みなさんはどういった方法で自動アップデートを実装していますか?

561 :デフォルトの名無しさん:2009/11/25(水) 21:03:14
>>557
設計の善し悪しを測る客観的で一般的な評価基準はたぶん無い。
色々な本やサイトで人それぞれが色々なこと言ってるから
そういうの拾い集めて自分なりの考えもつしかないんじゃないかねぇ。

>>559で言ってるように
実際に全部の方法試してメンテしやすさだの性能だので評価するのもいいかもね。
冗談でもなんでもなく、でかいプロジェクト作る前にはプロトタイピングだの
パイロット版だのでよく行われる行為ではある。





562 :デフォルトの名無しさん:2009/11/25(水) 21:04:47
>>560
Update用の小さなプログラムを別に用意しておいて、
アップデート可能な状態だったらそっちを起動、自身は終了って流れにする。

563 :デフォルトの名無しさん:2009/11/25(水) 21:29:03
C#だと構造体つかうよりクラス定義するのが普通なんでしょうか?

564 :デフォルトの名無しさん:2009/11/25(水) 21:39:45
そりゃそうだ

565 :デフォルトの名無しさん:2009/11/25(水) 21:52:43
そうですか。じゃあそうします。

566 :デフォルトの名無しさん:2009/11/25(水) 22:00:55
C++でも構造体なんてつかわんよ

567 :デフォルトの名無しさん:2009/11/25(水) 22:12:15
構造体を使わないってのは、関数の途中でリターンしないって言うのと同種のものを感じる

568 :デフォルトの名無しさん:2009/11/25(水) 22:16:04
>既に表示されているフォームをモーダル ダイアログ ボックスとして表示できません。
>Show を呼び出す前に、フォームの Visible プロパティを false にしてください。

と怒られるのですが同じフォームを2つ以上表示できないのでしょうか?

569 :デフォルトの名無しさん:2009/11/25(水) 22:17:54
プロパティで受け渡しするようなデータ主体の型なら構造体の方が
余計なこと考えなくていいし、フールプルールだしねえ

570 :デフォルトの名無しさん:2009/11/25(水) 22:23:28
・・・フールプルール・・・?

571 :デフォルトの名無しさん:2009/11/25(水) 22:23:42
>>560
ClickOnce使っとけ

572 :デフォルトの名無しさん:2009/11/25(水) 22:24:20
>>568
もいっこインスタンス作ればいいじゃん

573 :デフォルトの名無しさん:2009/11/25(水) 22:25:36
>>568
一度に1個しか表示しないからモーダルダイアログっていうんだ。
複数同時に表示したモードレスダイアログじゃねぇか。絶対おかしいだろ。

574 :デフォルトの名無しさん:2009/11/25(水) 22:34:22
>>572−573
new Form().Showとしてありますし同じ系統のほかのフォームは普通に開けるのです。

575 :デフォルトの名無しさん:2009/11/25(水) 22:34:29
>>570
犬が尾を振る ワンダフル・・・
ごめんfool proofね

576 :574:2009/11/25(水) 22:36:21
あ、大歩危かましてました
お騒がせしました

577 :デフォルトの名無しさん:2009/11/25(水) 22:36:26
iniファイルから情報を読み込ませたいんだけど、Win32APIを使わないとできないの?

578 :デフォルトの名無しさん:2009/11/25(水) 22:38:48
>>577
素直にSettingsをつかっとけ
プロバイダも実装すれば好きな場所に初期化ファイルを配置できる

579 :デフォルトの名無しさん:2009/11/25(水) 22:41:10
>>577
普通にテキストファイルとして読めばいいんだけど、API 使った方が楽。

580 :デフォルトの名無しさん:2009/11/25(水) 22:41:49
>>577
自分で実装してもたいした手間じゃないと思うけど

>>578
>>577は保存したいとは言ってないようだが・・・



581 :デフォルトの名無しさん:2009/11/25(水) 22:47:03
>>580
言って無いけど、そういう意味だと解釈するのが当然。

582 :デフォルトの名無しさん:2009/11/25(水) 22:47:39
当然ではないわな。

583 :デフォルトの名無しさん:2009/11/25(水) 22:47:48
stringをintに変換する際って
try〜catchでチェックするのと
tryParseでチェックするのとどっちがいい?

584 :デフォルトの名無しさん:2009/11/25(水) 22:48:14
外部のアプリのiniを読んだりする事も当然ある

585 :デフォルトの名無しさん:2009/11/25(水) 22:51:59
>>583
お好きな方でどうぞ。

586 :デフォルトの名無しさん:2009/11/25(水) 22:52:50
>>583
TryParse
絶対に失敗しない確信があるならParseでもいいけどそれなら例外をキャッチしないようにするべき
もしくは上の方でまとめてキャッチしたい場合

587 :デフォルトの名無しさん:2009/11/25(水) 23:05:47
visualstudio2008使ってます。
ユーザーコントロールのdll作って、
他のプロジェクトでコントロール貼ってデバッグしたら、
ソースコードが丸見えになるんだけど、MS社製のコントロールみたいに
中身完全防護することできないのかな?

588 :デフォルトの名無しさん:2009/11/25(水) 23:12:33
pdbファイルを消す

589 :デフォルトの名無しさん:2009/11/25(水) 23:14:50
無理。

590 :デフォルトの名無しさん:2009/11/25(水) 23:22:18
>>588 ありがとう。助かったわ。
pdbファイルの意味が分かった。

591 :デフォルトの名無しさん:2009/11/25(水) 23:23:24
・デバッグでソースコードが丸見えなのはそもそもソースコードがそこにあるから。
 pdbファイルを消せばデバッグでステップインできなくなる。
・そもそも.NETのアセンブリは中間ファイルなのでいくらでも逆アセンブル・逆コンパイルできる。
 .NETの標準ライブラリでも普通にできる(ただしほんとにやったらライセンス違反のはず)。

592 :デフォルトの名無しさん:2009/11/25(水) 23:24:35
.NET Frameworkのライブラリはソース公開されてるからライセンス違反もクソもない

593 :デフォルトの名無しさん:2009/11/25(水) 23:25:45
>>587
C#だとソース丸見えなのはどうしょうもない
そのために難読化ツールなんて言うものが沢山ある

594 :デフォルトの名無しさん:2009/11/25(水) 23:27:43
というか、dllだけコピーして使ってないのか。
2005以降は適当なdllをディレクトリに置いてプロジェクトに追加して、
プロパティグリッドで「ビルド時にbinディレクトリにコピー」の設定ができるのに。

595 :デフォルトの名無しさん:2009/11/25(水) 23:29:06
>>593
それ>>587の言ってることとズレてるよ。
そういう問題じゃないの。

596 :デフォルトの名無しさん:2009/11/25(水) 23:30:36
C#プログラムから、他のC#プログラム内の特定のメソッドに引数を与えて実行し、戻り値を得る方法を教えてください。
たとえば、C#プログラムaaa.exe内にあるメソッド「public string method(string1,string2);//2つの文字列を結合するメソッド」を、
aaa.exe /method aaa bbb
といった形式で呼び出し、「aaabbb」という戻り値を得たいんです。

597 :デフォルトの名無しさん:2009/11/25(水) 23:31:05
別にズレちゃいないだろ。

598 :デフォルトの名無しさん:2009/11/25(水) 23:31:31
>>596
アセンブリをロードしてリフレクションで。

599 :デフォルトの名無しさん:2009/11/25(水) 23:35:47
cmdを投げ捨てて、PowerShell使うほうがいいと思うのだけど

600 :デフォルトの名無しさん:2009/11/26(木) 00:03:08
>>596
そのaaa.exeとやらを参照設定に追加して、method()とやらを普通に呼び出してやればいい。
コマンドラインいらね。

601 :デフォルトの名無しさん:2009/11/26(木) 02:05:26
テキストファイルを読み込んでコントロールに値を格納する処理を書いていますが、
次の一文だけでも4つの例外が発生する可能性があります。
(controlObject as NumericUpDown).Value = decimal.Parse(valueString);

この場合、4つを個別にcatchしないといけないのでしょうか。
昔Javaを使っていたとき、ExceptionやThrowable等の基本クラスをcatchしてはいけないと習いました。
理由は失念しましたが、想定外の実行時例外までcatchしてしまうからでしょうか。
C#でもExceptionをcatchすべきではないのでしょうか。catchの羅列が鬱陶しくなりますが・・・。

602 :デフォルトの名無しさん:2009/11/26(木) 02:08:30
解決したいなら思想書く前に例外書こうよ

603 :デフォルトの名無しさん:2009/11/26(木) 02:11:26
まずできる限り例外が出ないようにする
as キャストしてんだから null チェックは当然
valueStringのnull/空文字列チェックも事前にしてておかしくない
Parseは代わりにTryParseを使う
Valueに代入する前にMaximum/Minimumで範囲チェック

なんだそもそも例外出る余地ないじゃん

604 :デフォルトの名無しさん:2009/11/26(木) 02:35:23
回答ありがとうございます。

>>602
Valueへの代入時にArgumentOutOfRangeException
ParseでArgumentNull、Format、OverFlowの3つを想定していました。
adキャストのnullついては、上位コントロールのControlsから取得するため想定してませんでした。

>>603
値の事前チェックをちゃんとすれば良かったのですね。
.Netにはそもそも検査例外は存在しないし、今回想定してた例外の内容自体も
Javaでは実行時例外であるものばかりですし・・・。
どうも、C#の例外の取り扱いと、「Javaでは検査例外をcatchしなければならない」という事がごっちゃになっていたようです。

605 :デフォルトの名無しさん:2009/11/26(木) 08:09:39
なんでVisual Stdioでプログラミングするときは
using 〜〜っていう名前空間つかうときに
ソリューションエクスプロラーだかにいちいち参照設定追加しなきゃならないんだ

普通にコマンドプロンプトで

csc 〜〜ってやってコンパイルしたら参照設定だのいらないのに。不便だなぁ

606 :デフォルトの名無しさん:2009/11/26(木) 08:22:09
>>598
リフレクション馬鹿がこんなところにも・・・
>>600で普通に出来るのにね。

607 :デフォルトの名無しさん:2009/11/26(木) 08:29:16
public GClass[] gC;
gC[2] = { new GClass[](0), new GClass[](1) };
クラスの配列を初期化したいのですがコンパイルが通りません

608 :デフォルトの名無しさん:2009/11/26(木) 08:38:04
int[] x = {1[],2[],5[]};
ってやるのか?おまいは

609 :デフォルトの名無しさん:2009/11/26(木) 08:41:36
public GClass[] gC;
gC[2] = { new GClass(0), new GClass(1) };
これが通らないんです。

610 :デフォルトの名無しさん:2009/11/26(木) 08:46:44
配列の初期化方法くらい覚えれ

int[] x={1,2,5}
これはOK
int[3] x={1,2,5}
これはNG
int[] x;
x[3]={1,2,5};
これもNG

おまいのやってることは
int[] x;
x[3]={1,2,5}
って同じことしてる。

611 :デフォルトの名無しさん:2009/11/26(木) 08:47:51
>>609
C#の{ }の表現はAdd()メソッドの省略表現なんだよ。
じゃあ何にAdd()してるんだ? 説明してみろ。

612 :デフォルトの名無しさん:2009/11/26(木) 08:49:56
配列もオブジェクトなんだからnewしなきゃいけないんだよう。

613 :デフォルトの名無しさん:2009/11/26(木) 08:50:21
すいませんこれも通りません。
public GClass[] gC;
gC = { new GClass(0), new GClass(1) };

614 :デフォルトの名無しさん:2009/11/26(木) 08:52:09
>>613
あほか。

615 :デフォルトの名無しさん:2009/11/26(木) 08:59:23
助けてくださいお願いします。
int[] a;
main(){
a={1, 2}
}
も通らないんです。

616 :デフォルトの名無しさん:2009/11/26(木) 09:00:26
本当は
int[]x = new int[] {1,2,5};
この書き方が「正しい」

ただいちいちnew書くのはめんどくせーから
int[] x = {1,2,5};みたいに

「宣言と同時に限り」このような省略した書き方が可能
ここまでいってもまだわからんねーなら残念ながら手遅れ

617 :デフォルトの名無しさん:2009/11/26(木) 09:01:33
ありがとうございます。出来ないことはわかりました。
これを実現するにはどうかけばいいでしょうか

618 :デフォルトの名無しさん:2009/11/26(木) 09:04:20
public GClass[] gC;
main(){
GClass[] gC = { new GClass(0), new GClass(1) };
this.gC = gC;
}


619 :デフォルトの名無しさん:2009/11/26(木) 09:06:44
それです!ありがとうございました。!

620 :デフォルトの名無しさん:2009/11/26(木) 09:08:04
いやいやいや・・・


621 :デフォルトの名無しさん:2009/11/26(木) 09:08:38
C#でゲームつくるとなると
SlimDX
YaneuraGameSDK
DXライブラリ
ManagedDirectx
XNA
などが思い浮かびますが

DXライブラリは実行ファイルが肥大化してしまう(コンパイルするだけで1MBを超す)
XNAは古いXPやノートPCでは重すぎて使い物にならない
ManagedDirectXは既にMicroSoftが放り投げている
YaneuraSDKはマルチプラットフォームを重要視しているためOpenGLを使っている&SDK自体にバグが多い(らしい)
ということでSlimDXが一番いいのかなーと思ったのですが
SlimDXにはなにか欠点などはありますか?
とりあえず日本語の文献が少ないということは感じました

622 :デフォルトの名無しさん:2009/11/26(木) 09:12:46
>>621
板違い

623 :デフォルトの名無しさん:2009/11/26(木) 09:17:20
>>616
わかりました。宣言と同時じゃない場合は省略しなければ通りました。完璧ですありがとうございました。
public GClass[] gC;
gC = new GClass[] { new GClass(0), new GClass(1) };

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

と、書いてあったので書き込んでみましたが
どこに書けばいいのでしょうか

625 :デフォルトの名無しさん:2009/11/26(木) 09:21:22
>>621
PMDエディタがSlimDXを採用したということは
SlimDXが良いということです。

626 :デフォルトの名無しさん:2009/11/26(木) 09:21:49
書き方の省略ってある程度慣れてくると楽でいいんだけど
623みたいな無能にとっては本当は何をやってるかわからないまま進んじゃって
逆に混乱の原因になるな。

public GClass[] gC;
gC[2] = { new GClass[](0), new GClass[](1) };

こんな書き方何をどう考えてもおかしいし。

627 :デフォルトの名無しさん:2009/11/26(木) 09:27:17
>>626
まァ落ちつけよ
納品前でイライラしてるのもわかるが初心者板なんだ
生温かい目で見守ろうじゃないか

628 :デフォルトの名無しさん:2009/11/26(木) 09:28:10
>>624
gamedev

629 :デフォルトの名無しさん:2009/11/26(木) 10:40:59
>>622
板違い

630 :デフォルトの名無しさん:2009/11/26(木) 11:12:08
>>621
基本的にはユーザーの数、DirectXの移植度(C++が基準だから移植になる)、サポートしてるDirectXのバージョンとなる。
その他のサポートははっきり言って邪魔。
自分で実装すればいい話なので。

オレからすれば、DirectX 9,10ならSlimDX。
DirectX 10以降ならWindows API Code Pack for Microsoft .NET Frameworkだな。
XNAはXBox360をサポートする必要性を感じないので却下。

631 :デフォルトの名無しさん:2009/11/26(木) 11:18:57
DirectXするならVC++だよねJK

632 :デフォルトの名無しさん:2009/11/26(木) 11:24:03
>>631
勝手にどうぞ
そして板違いなのでお帰りください

633 :デフォルトの名無しさん:2009/11/26(木) 11:24:23
>>631
このスレだから敢えて言ってやろう。

その考えは古い、と!

634 :デフォルトの名無しさん:2009/11/26(木) 11:34:25
いまどきの女子高生はVC++なのか。。

635 :デフォルトの名無しさん:2009/11/26(木) 11:59:32
XNAやってみたけど
普通にC#でやるより、アクションゲームとか作るのに向いてることはなんとなくわかったけど
RPGとかはどうなのかね。ボタンとかtimerコントロールをはっつけて
プロパティウィンドウでButton1Click(object sender,EnentArgs e)とかなんかやって
そういうやつのほうが簡単にできていいね

636 :デフォルトの名無しさん:2009/11/26(木) 12:03:22
思ったんですがクラッキング技術ってありますよね?
たとえば不特定多数のPCを破壊したいという願望があったとしますよね?

そういうときに、たとえばディスクフォーマットするソフトつくって最もらしく別の内容(たとえばインターネットブラウザです)とかいって相手に使わせてしまえばクラッキング技術など必要なしに相手のPC破壊できるんじゃないですかね?
それともセキュリティそふとっていうのは使う人がEXEなどを使ってもそういう悪質なものも判定して防ぐことができるんですか?

まあこれだと狙った人のPCを破壊できませんが不特定多数の人がPCを使うようにうまく宣伝とかして情報操作すれば誤って使う人もでてくると思うんですがどうですか?

637 :636:2009/11/26(木) 12:06:43
自己解決しました

638 :デフォルトの名無しさん:2009/11/26(木) 12:07:07
>>636
板違い


639 :デフォルトの名無しさん:2009/11/26(木) 12:14:57
>>637
してねーからw

640 :デフォルトの名無しさん:2009/11/26(木) 12:31:57
>>636
板乳街

641 :デフォルトの名無しさん:2009/11/26(木) 12:34:27
WPFでええやん

642 :デフォルトの名無しさん:2009/11/26(木) 12:35:31
>>636
だからVistaとかは署名のないexeは実行するとき許可を求めるし
formatみたいなシステム領域にアクセスするときはUACがブロックしてくれるし
それなのにXP厨ときたらUACうざいとか言ってるしアホとしか言いようが無い

643 :デフォルトの名無しさん:2009/11/26(木) 12:36:00
宗教戦争はよそでやれ

644 :デフォルトの名無しさん:2009/11/26(木) 12:38:04
Windows 7はマルウェアに強い? UACをSophosが検証
ttp://www.itmedia.co.jp/news/articles/0911/05/news028.html

たのむから妄想で語るのはやめてくれ…

645 :デフォルトの名無しさん:2009/11/26(木) 12:41:29
C#ってVisual StudioをDLしなくても作れますか?
コンパイラだけ手に入れたいんだけど・・・

646 :デフォルトの名無しさん:2009/11/26(木) 12:41:38
まだいたのかXp厨

647 :デフォルトの名無しさん:2009/11/26(木) 12:44:34
>>645
同梱されているんだから素直にVisual Studioをダウンロード

648 :デフォルトの名無しさん:2009/11/26(木) 12:44:44
>>645
.NET Framework 再頒布可能パッケージにはコンパイラも入ってるが
VSを使わないデメリットは大きいぜ

649 :デフォルトの名無しさん:2009/11/26(木) 12:44:49
コマンドプロントでコンパイルすればいいじゃないか

650 :デフォルトの名無しさん:2009/11/26(木) 12:48:19
>>642
ローカルのEXEに対してUACでどうにかなると思ってるとかおめでたいな
インターネットブラウザと称してSetup.exeとして管理者インストールされたら
あとは好き放題できるっつうのw

651 :デフォルトの名無しさん:2009/11/26(木) 12:53:32
WPFを使うメリット、デメリットはなんなのさ?(´・ω・`)

652 :デフォルトの名無しさん:2009/11/26(木) 12:56:34
まだ非生産的なテキストエディタでソース書いてるバカがいるのか?


653 :デフォルトの名無しさん:2009/11/26(木) 13:01:37
配列に入れたクラスを入れ替えたい場合、元からあるクラスが大きいのですぐに消滅させたいのですが、
classA[] CA = new classA[] { new classA(a), new classA(a) }
CA[0] = null;
CA[0] = new classA(a);
とすればいいんでしょうか?

654 :デフォルトの名無しさん:2009/11/26(木) 13:01:49
>>650
アホすぎて言葉も無い

655 :デフォルトの名無しさん:2009/11/26(木) 13:03:47
>>654
それならいちいち書き込むなよバーーーカ

656 :デフォルトの名無しさん:2009/11/26(木) 13:06:55
ここはひねくれたやつも多いからな
いちいち反応するな

657 :デフォルトの名無しさん:2009/11/26(木) 13:07:07
>>654
反論出来なきゃ、そんな言い方するしかないわなw

658 :デフォルトの名無しさん:2009/11/26(木) 13:08:38
ワンパターンだな

659 :デフォルトの名無しさん:2009/11/26(木) 13:09:40
>>656
「XP厨」ってひねくれてるねー

660 :デフォルトの名無しさん:2009/11/26(木) 13:14:25
 殺 伐 と し て ま い り ま し た

661 :デフォルトの名無しさん:2009/11/26(木) 13:16:32
他の事に尽力した方が有意義だぞ

662 :デフォルトの名無しさん:2009/11/26(木) 13:28:15
abstract classってインスタンスを生成できないってだけで
そのほかは全部普通のクラス?

663 :デフォルトの名無しさん:2009/11/26(木) 13:55:29
>>662
なんでMSDNで調べてから質問しないの?
http://msdn.microsoft.com/ja-jp/library/sf985hc5%28VS.80%29.aspx

664 :デフォルトの名無しさん:2009/11/26(木) 13:58:49
>>653
そのnull代入は全く意味がない
そんなこと気にする前に基礎をちゃんとやったほうがいいよ

>>662
そうです

665 :デフォルトの名無しさん:2009/11/26(木) 14:14:49
>>653
.netのメモリ解放の仕組みはわかっている?


666 :デフォルトの名無しさん:2009/11/26(木) 14:17:09
ガベージコレクションを利用して解放したい場合は、もう参照されることがない状態にすればいいんですよね?


667 :デフォルトの名無しさん:2009/11/26(木) 14:19:33
インデクサってのはなんとなくわかった。

class Test{
int a[];
int b[];
}

こういう風にクラスの中に二つ以上の配列がある場合
this[int index] //getとset
だと、aかbの一方にしか入れられないよね?
中に二つ以上の配列がある場合インデクサ使うことはできない?

668 :デフォルトの名無しさん:2009/11/26(木) 14:49:24
class hoge{
int a;
int b;
}

構造によるがこのhogeをいんでくさでかえせばいいんじゃまいか?

669 :デフォルトの名無しさん:2009/11/26(木) 15:04:02
>>667
おいおい。a,b自体をプロパティにしたらいいじゃないか。
それで何が問題なんだ?

670 :デフォルトの名無しさん:2009/11/26(木) 15:06:55
なんの制限もなくシステム破壊できるのとは全然違うだろ。


671 :デフォルトの名無しさん:2009/11/26(木) 15:18:40
>>666
そうだがnull代入はほとんどの場合意味がない
もしGC.Collectを明示的に呼ぶならその前にnullを代入して
参照を切っておく必要があるけど、通常はGC.Collectを明示的に呼ぶと
余計にパフォーマンスが落ちる

672 :デフォルトの名無しさん:2009/11/26(木) 15:45:43
>>669
プロパティの配列ってどうやるの?

int a;
public int A{
   get{
      return a;
   }
   set{
      a=value;
   }
}

int a[];
public int A[]{
こうやるの?でも他プログラムから要素決定できないよね。
get(a,int index)
みたいにやるのもちょっとかっこわるい。

673 :デフォルトの名無しさん:2009/11/26(木) 16:39:45
aを処理するためのコレクション実装してそいつを返すようにすれば
各要素のget setを自分で定義できる

getだけ実装したいなら読み取り専用コレクションを実装すればいい

効率のいいやり方は分からん

674 :デフォルトの名無しさん:2009/11/26(木) 16:40:36
>>672
クラスの中に配列を作るんじゃなくて、クラスの配列を作ればいいと思うよ

675 :デフォルトの名無しさん:2009/11/26(木) 16:42:54
動けばいいのだよ動けば

676 :デフォルトの名無しさん:2009/11/26(木) 16:44:54
皆、デザイナのある帳票で(例えばアクティブレポートとかクリレポでもいい)
ラベルやテキストには名前をちゃんとつけてると思うけど、線を配置した時にその線にもちゃんと名前を付けてる?

677 :デフォルトの名無しさん:2009/11/26(木) 16:45:34
動けばいいのだよ動けば

678 :デフォルトの名無しさん:2009/11/26(木) 17:24:53
>>651
メリット
凝った見た目を作るのが簡単。アニメーションも自由自在。
M-V-VM パターンでコードが綺麗に分離できる。

デメリット
簡単って言えるまでに覚えなきゃいけないことが沢山。
XPだと重い。

679 :デフォルトの名無しさん:2009/11/26(木) 17:47:21
>>671
ローカル変数ならnull代入もいらないな。
まあデバッグ実行のことを考えるならやっといた方がいいが。


680 :デフォルトの名無しさん:2009/11/26(木) 18:30:22
TabControlを使う代わりに
ListBox or TreeViewを使ってサブフォームをページ状に切り替えられるようにするには
どういう風に作ればいいんでしょうか?

TabControlをカスタマイズしてみようと思ったんですが、タブ部分だけを非表示にすることができないようです。

また、サブフォームをFormとして定義していると、デザイナーにコントロールとして登録できません。
(TopLevelプロパティの問題。手作業で)

参考にできるような記事を紹介いただけるようだとよりありがたいです。

681 :デフォルトの名無しさん:2009/11/26(木) 18:44:48
JANEまで高機能じゃなくていいので読み込んで表示するぐらいの機能で、2ちゃんブラウザ作ってみたいんですが何すればいいかわかる方いますか?
できれば作り方紹介してるHPなど教えていただけたらありがたいです。

今一通り基本を抑えたような段階です

682 :デフォルトの名無しさん:2009/11/26(木) 18:46:59
>>681
スレ違い

683 :デフォルトの名無しさん:2009/11/26(木) 18:50:11
すれ違いも多少の縁です
教えてください

684 :デフォルトの名無しさん:2009/11/26(木) 18:52:19
袖すり合うも多生の縁のこと言いたいの?
専ブラ 2ch C#でぐぐってみそ
オープンソースでいくつかあったから

685 :デフォルトの名無しさん:2009/11/26(木) 18:54:01
>>681>>683
「一通り基本を抑えた」とか
釣り質問イラネ

686 :デフォルトの名無しさん:2009/11/26(木) 19:02:31
ユーザーコントロール

687 :デフォルトの名無しさん:2009/11/26(木) 19:04:38
WPFのXAMLって動的なことしようとするととたんに面倒になるよね
例えばプロパティ値が実行前に決まってるならいいけど、実行時に決めるような場合じゃ
コード書いたほうが楽っていう。
実際はそういう動的に代入するケースが頻出するからコードに依存する部分がほとんどなんてことに

688 :デフォルトの名無しさん:2009/11/26(木) 19:11:40
>>680
定番の質問だな
これを参考にすればできる
http://dobon.net/vb/dotnet/form/formwithinform.html

689 :デフォルトの名無しさん:2009/11/26(木) 19:16:59
>>688
サブフォームについてはそのとおりですね。
>また、サブフォームをFormとして定義していると、デザイナーにコントロールとして登録できません。
>(TopLevelプロパティの問題。手作業でfalseにすれば登録できることは確認したが、デザイナ−でいじるとダメになる)

という文章の予定だったのが、推敲前に投稿してしまった次第です。
ただこの場合686の場合にUserControlのサブクラスとしたほうがよさそうです。

で、質問の重要なほうはTabControlの代替です。
よろしくお願いします。

690 :デフォルトの名無しさん:2009/11/26(木) 19:17:43
継承に関して質問

プログラムみると
overrideのほうがnewするメソッドよりはるかに使われてるみたいだけど
newってなんで使われないの?

691 :デフォルトの名無しさん:2009/11/26(木) 19:31:26
>>690
そもそもvirtual methodはoverrideさせるために作るから。

692 :デフォルトの名無しさん:2009/11/26(木) 20:04:03
>>681
2chの仕様。
ここに書いてある通りに書けばOK
http://www.monazilla.org/index.php?e=192


693 :デフォルトの名無しさん:2009/11/26(木) 20:05:19
しかしわざわざ new を使わなきゃいけない状況がぱっと思いつかないな・・・


694 :デフォルトの名無しさん:2009/11/26(木) 20:09:53
>>693
Windows Formのコントロールを継承で拡張する時にはわりと必要になるけどね。

695 :デフォルトの名無しさん:2009/11/26(木) 20:15:20
>>694
なるほど・・・
やったことないのでよくわからないんですけど、
継承元の機能を残さなきゃいけない理由があったりするんですか?


696 :デフォルトの名無しさん:2009/11/26(木) 20:16:54
exeにbitmapとかwavを埋め込む方法ないの?
大量の画像ファイル用フォルダとか作らずexeだけで配布したいんだが。

697 :デフォルトの名無しさん:2009/11/26(木) 20:24:17
リソース

698 :デフォルトの名無しさん:2009/11/26(木) 20:26:08
>>695
いや、オーバーライド不可のメソッドの動作を変えたり、BrowsableAttrivite付けて
プロパティグリッドから見えなくしたりとか、そういう使い方だね。

はっきりいって邪道だけどそれ以外方法がないから・・・

699 :デフォルトの名無しさん:2009/11/26(木) 20:26:09
>>695
例えばListViewの継承やる時に、基本Ditailしか想定していなけれな
それ以外に変わっちゃ不味いでしょ

700 :デフォルトの名無しさん:2009/11/26(木) 20:28:55
AttriviteとかDitailとか誤字の多いインターネットですね

701 :デフォルトの名無しさん:2009/11/26(木) 20:32:54
>>698
なるほど・・・

>>699
それと new の関連性がよくわかんないです。
不勉強で申し訳ない・・・

702 :デフォルトの名無しさん:2009/11/26(木) 21:02:35
なんなんだこのVisualStdioってのは?
objとbinとcontentっていうフォルダあって
その中にさらにdebugとrereaseわかれてるとか意味不明。
どのフォルダにちゃんとしたファイル入ってるか探すのも大変だな。
Visual StudioよりもっとマシなC#の開発環境ないかなー。
こんなわかりづらいフォルダにすんな!

703 :デフォルトの名無しさん:2009/11/26(木) 21:09:19
>>702
VSの長い歴史と絶え間ない改良によって編み出されたプロジェクト管理手法を一言で切り捨てるわけだな。
若いねぇ。

704 :デフォルトの名無しさん:2009/11/26(木) 21:19:18
釣られんなよ

705 :デフォルトの名無しさん:2009/11/26(木) 21:34:24
あるテキストファイルを解析する処理を作成したのですが、ファイルが30個程度あります。
これを1つずつ実行した場合、10分近くかかったため、
各ファイルを並列に処理させたいのですが、どのようなやり方がよいでしょうか。

試しにBackgroundWorkerをファイルと同じ数だけNewすることで対応したのですが、
Joinの仕組みがないようなので、BackgroundWorkerをListに詰めて
終了イベントですべてがIsBusyでないことを確認したりという風に行っています。
やはり無茶苦茶な方法でしょうか…

706 :デフォルトの名無しさん:2009/11/26(木) 21:41:54
>>687
代入元のデータは全部クラス側にプロパティとして持たせて
XAML側はバインディングとデータトリガーで表示させるだけってのが流行りだけど、
まあ確かに突っ込んだことやろうとするとコードビハインドに頼ることが多くなるのは実感だなあ

707 :デフォルトの名無しさん:2009/11/26(木) 21:45:57
それで速くなると思ってんのか?
各ファイルのサイズはどの程度で?
解析ってのはどんな処理なんだ?


708 :デフォルトの名無しさん:2009/11/26(木) 21:49:50
一行読んで解析してまた一行読んで…みたいにしてるなら並列にしたら速くなるでしょ

709 :デフォルトの名無しさん:2009/11/26(木) 21:50:04
>>706
MVVM の VM 書くのって結構面倒だよな。

710 :デフォルトの名無しさん:2009/11/26(木) 21:51:21
>>703
何も入ってないフォルダorどうでもいいファイルが3個入っただけのくだらないフォルダを4つも5つも無駄に作り出すことが
「長い歴史による改良」ですかw俺みたいな混乱させるための十分な改良ですねw

711 :デフォルトの名無しさん:2009/11/26(木) 21:51:40
>>707
にわか。
IOとCPU演算がからんでる場合に並列処理を検討するのは定石だよ。

712 :デフォルトの名無しさん:2009/11/26(木) 21:52:30
>>710
そうだね。
eclipseでもC#書けるらしいからそっち使ったら?

713 :デフォルトの名無しさん:2009/11/26(木) 21:56:57
eclipseでももちろん開発できるが、やはり生産性で言えばVS以外あり得ない

714 :デフォルトの名無しさん:2009/11/26(木) 22:00:35
いやいやいや・・・そこでマジレスしてどうするんだ・・・

715 :デフォルトの名無しさん:2009/11/26(木) 22:08:04
なぁ・・・
Visual C#でXNAでためしにほんのちょっとしたプログラム
(キーボードの矢印キーを押すと画像が移動するだけのシンプルなもの)
作ってみたんだが、他のPCじゃ動かないみたいなんだ。
XNAってXPとかでも動かないの?

716 :デフォルトの名無しさん:2009/11/26(木) 22:13:53
>>715
http://blogs.msdn.com/ito/archive/2008/05/07/distribute-xna-games.aspx

ランタイム入れてくれってお願いしづらいよねえ。

717 :デフォルトの名無しさん:2009/11/26(木) 22:17:25
え!XNAってランタイムいるのかよ
かなり作り込んでしまった

718 :デフォルトの名無しさん:2009/11/26(木) 22:19:18
XNAスレでやれ

719 :デフォルトの名無しさん:2009/11/26(木) 22:20:21
>>715
動くけど動作環境嫁
必要な Direct3D のバージョン(でた時の時期で示されるやつ、
月年のやつな)と CRT と XNA Framework Redist が要る。
あとはハード的にも PS 1.1 以上が要るかな確か

ちなみにこういうの入れるインストーラ作らないといけないのは
たいていのアプリでも同じ。

720 :デフォルトの名無しさん:2009/11/26(木) 22:20:54
ダメなのか・・・orz
XNAで作られたゲーム自体マイナーだしそのためだけに
ランタイムいれろってのもうざいしこりゃ使えないな・・・
どうもありがとう

721 :デフォルトの名無しさん:2009/11/26(木) 22:40:33
System.Diagnostics.Process.Startを非同期で行うことは出来ませんか?

722 :デフォルトの名無しさん:2009/11/26(木) 22:45:29
MSが標準で提供してるランタイムなんだし、
ユーザに入れさせても良いと思うけど。
それよりXNAの最大の問題点はXBoxゲームパッド以外に対応していない点だと個人的に思う。

723 :デフォルトの名無しさん:2009/11/26(木) 22:46:11
>>720
C++で直接DirectX使うにしても最近はバージョンがややこしいから配布の際はインストーラ必須だよ
>>721
もともと非同期

724 :デフォルトの名無しさん:2009/11/26(木) 22:50:13
ひにけにも更新されなくなったしXNAはもう終わるんだろう

725 :デフォルトの名無しさん:2009/11/26(木) 22:56:40
<xml>
<A>あ</A>
<B>
<A>い</A>
</B>
<B>
<A>う</A>
</B>
</xml>

上のようなxmlファイルがあったときに、Linq to XMLで
Bの要素の中のAの要素だけを取り出したいです。「い」と「う」
どういったクエリを書けばよいでしょうか

726 :デフォルトの名無しさん:2009/11/26(木) 23:00:55
>>723
あぁ、もともと非同期ですね。言葉が悪かったです。
GUIのスレッドで、process.startを呼び出すと、
ほんの一時的にGUIスレッドが固まってしまいます。
それをどうにか出来ないかと思いまして・・・

727 :デフォルトの名無しさん:2009/11/26(木) 23:08:03
UIスレッド以外でProcess.Startを呼べば良いじゃん
てか、そこまで書いてて何故分からんのか不思議

728 :デフォルトの名無しさん:2009/11/26(木) 23:11:47
>>725
var root = XElement.Load("hoge.xml");
var a = root.Elements("B").Select(b => (string)b.Element("A"));

729 :デフォルトの名無しさん:2009/11/26(木) 23:15:19
>>727
1つのプロセスだとそうするのですが、
2つボタンを設置して、連続的にクリックしたとき、
別プロセスを実行させたいのです。
アプリケーションショートカットのようなものでしょうか。
この場合だと、2つスレッドを作れば解決なのでしょうが、
実行するプロセスの数だけスレッドを作るのは効率的にどうかと思いまして。。

730 :デフォルトの名無しさん:2009/11/26(木) 23:17:02
>>728
ありがとうございます
参考にさせていただきます


731 :デフォルトの名無しさん:2009/11/26(木) 23:17:42
プロセス生成に比べたらスレッド生成なんてゴミみたいなもんだから気にするな
どうしても気になるならThreadPool使えば

732 :デフォルトの名無しさん:2009/11/26(木) 23:37:02
>>731
ThreadPoolで解決しました!ありがとうございます!

733 :デフォルトの名無しさん:2009/11/26(木) 23:49:50
どういたしまして

734 :デフォルトの名無しさん:2009/11/27(金) 00:26:25
フォーム1にラベルを貼り付けました。
フォーム1とは別のクラスのLabelSetterクラスを作ってみたんですが

別のクラスからフォーム1のラベルを変える方法が
できません。どうやれば別のクラスでできますか?

public partial class Form1 : Form
{
//コンストラクタ等
}

public Static class LabelSet{
   public void func(){
      Form1.Label1.Text="がんばれ";
   }
}

735 :デフォルトの名無しさん:2009/11/27(金) 00:34:22
単純に質問に回答すると、Label1をpublicにすればいい
でも、普通はそんな腐った設計にはしない

736 :デフォルトの名無しさん:2009/11/27(金) 00:44:26
サンキュー、と思ったらLabel1 privateになってるじゃねぇか!
コードザイナで編集されてます、勝手に編集しないでくださいだと?
うぜぇしるか。public と。できた。

737 :デフォルトの名無しさん:2009/11/27(金) 00:52:58
VB6だとよくその手のコード書く奴いたけど、どういう発想してるのかね。

依存性云々みたいな理論的な話は知らなくても、普通のセンスしてれば
そういう書き方したら後々自分が困るって直感的に分かるとおもうんだが

738 :デフォルトの名無しさん:2009/11/27(金) 00:56:24

こんなことやりはしないが
まぁせめてやるにしても
void func(Label target)

とかだよなぁ・・・・
クラスの意味がないではないか

739 :デフォルトの名無しさん:2009/11/27(金) 01:04:05
なんで困るんだよw
Label1 = ・・・
と直接書き換えるのと
メソッドなどを利用して間接的に書き換えるのなら
直接書きかえるほうが手間かからないだろ。

プロパティも特別な理由がなきゃ使わなくていい。

class A{
public int x;
public string s;;
//なんかメソッドとか
}

class B{
static void Main(){
A a=new A();
//ここでなんかいろいろやってる
}

たとえばこれでわざわざx等をprivateにしてプロパティを使うメリットが思い浮かばない。
めんどくさいだけ。

740 :デフォルトの名無しさん:2009/11/27(金) 01:08:23
「Label1のテキストを書き換えるためのプロパティ」は確かに意味がない
たとえば>>734の例に合わせるなら「応援メッセージ」プロパティであれば意味がある

741 :デフォルトの名無しさん:2009/11/27(金) 01:11:19
>>739
面倒くささは、自動プロパティ構文で問題ないでしょ。prop[Tab][Tab]で作れるし。
public int x { get; set; }
public string s { get; set; }
結局、nullを弾きたいとかで後に普通のプロパティに変えることもあるけど。

742 :デフォルトの名無しさん:2009/11/27(金) 01:22:57
Form1.Label1.Text="まさにVBだな。がんばれ"; 
 


743 :デフォルトの名無しさん:2009/11/27(金) 01:28:35
>>739
それやるとプログラムの見通しが悪くなるのは確かだな
そもそも文字を書き換えるのにオブジェクト丸ごと晒す必要ないでしょw
ただ、この場合Label1をプロパティにする/しない以前に、Label1の文字だけ
外部から書き換えるということ自体に疑問を感じる
他のメンバーと矛盾した状態になることはないのかとか
そもそもフォーム全体を特定の状態にするための細々とした処理の
1つなら状態を表すenumでもセットしてフォーム側でやったほうがよくね?とか
要するに外部からLabel1のオブジェクトが欲しくなるということ自体が
きちんと設計出来てないだけという可能性が濃厚

744 :デフォルトの名無しさん:2009/11/27(金) 01:29:33
「オブジェクト指向」や「プロパティ」
のありがたみを体で感じられるようなプログラムはないかね。
ボタンを押したらpictureboxにキャラが現れて「がんばれー!」って表示するだけみたいな
簡単なプログラムしか作らんからオブジェクト指向なんてどうでもいいわ!

745 :デフォルトの名無しさん:2009/11/27(金) 01:40:54
まあ実用上Label1をpublicにしても、プログラムが汚くなる以上の実害って滅多にないけどな
でも、せめてLabel1にちゃんとした名前を付けて使って欲しいわ

746 :デフォルトの名無しさん:2009/11/27(金) 01:44:10
class[] C = new class[]{ new class(a), new class(b) }
C[0] = C[1];
class D = new class(e);
C[1] = D;
とした場合、C[0]の中身はDですか?それともclass(b)ですか?
参照ではなくコピーが渡されてるのか、それともすべてに参照が入っているだけだからclass(b)の参照がC[1]に入っていただけであって
Dをいれてもclass(b)は消滅しないのかを聞きたいんです。

747 :デフォルトの名無しさん:2009/11/27(金) 01:49:56
消滅とか言う考え方は止め
「参照できるかどうか」つまりそのオブジェクトを誰かが触ることができるかを考えて

748 :デフォルトの名無しさん:2009/11/27(金) 01:58:45
>>734
むしろ、LabelSetterがフォームの外に出てるのはどうなんだろうな

749 :デフォルトの名無しさん:2009/11/27(金) 02:03:05
オブジェクト施行の「オブジェクト」とは具体的な「もの」です
とかウソ書いてる本をどうにかしろ!

C#でやったらファイルストリームだのグラフィックマネージャだのキーボードイベントだの明らかに「具体的な物」じゃないものも
オブジェクトになってるじゃねぇか!

うそ書いてる本の作者どもくたばれや!

750 :デフォルトの名無しさん:2009/11/27(金) 02:03:11
こうすると自然だ。
module LabelSet
 sub func() 
  Form1.Label1.Text="がんばれ"
 end sub
end module


751 :デフォルトの名無しさん:2009/11/27(金) 02:13:20
>>711
いやいやIOとCPU処理が絡むときに並列処理を考えるのは分かるけどな。
>>705の書きこみ見てそれで速くなると思うのかい?

解析とファイルIOの負荷の割合も分からんからまずどんな程度の処理か聞いてみたんだが、
ともかくこの内容で言える範囲なら、複数ファイルを並列じゃなくて
まずファイルIOと解析を並列にっていうのが普通だ。
解析が非常に重いなら、解析部分はコア数分並列化ってのはもちろん考えるけどな、
>>705の書きこみではその辺分かってやってるとは思えんよ。

分かってるならもう少し具体的な書き方になるはずだ。
そうしないとアドバイスのしようがないのは明らかだからな。


752 :デフォルトの名無しさん:2009/11/27(金) 02:15:44
そうだな
スレッドをきれいに自分で処理して・・・
ってレベルでもなさそうだし
>>751に1票

753 :デフォルトの名無しさん:2009/11/27(金) 02:24:38
一応現時点で言えることを書いとくなら、

・ファイルIOが遅い
→IOと解析を別スレッドでやる(複数ファイルを別スレッドではない)。
 ただし解析が非常に軽いならほとんど効果がない可能性が高い。
 解析がそれなりに重い場合やファイルが小さい場合は効果が期待できる

・解析が重い
→マルチコアの場合に限り、ファイルIOは順に行うままで、解析を複数スレッドで行う。
 ただしファイルが大きい場合は一つのファイルでの解析が複数スレッド化できるほうが望ましい。
 ファイルが小さいなら、読み込み終わったファイルから順に別スレッドで実行するようにする。
 ただし同時に実行させるスレッド数はプロセッサ数かそれプラス1程度に抑える。
 まあ、10スレッド以内程度なら極端に遅くなったりはしないが、30は明らかにやりすぎ。
 スレッドプールのスケジューリングでうまくスレッド数が抑えられるならそれでもいいが。

ファイルIOを非同期でって意見が出てくるかも知れんが、
多分それでパフォーマンスを出すのは難度が高いと思うよ。


754 :デフォルトの名無しさん:2009/11/27(金) 02:29:47
ファンクションキーを押したときにイベントを起こすようにしてるんですが、全く反応してくれないんです。
どうしたら良いんでしょうか…

755 :デフォルトの名無しさん:2009/11/27(金) 02:38:02
KeyPreviewとエスパー

756 :デフォルトの名無しさん:2009/11/27(金) 04:09:19
コントロールがキーを拾ってる
>>755の言うとおり、FormのKeyPreviewをtrueにすればFormで一括管理できる

WebBroeserControl使ってるなら
WebBrowserのKeyPreviewイベントを使うか
ProcessCmdKeyで書く方が楽

757 :デフォルトの名無しさん:2009/11/27(金) 06:06:04
>>753
ただ、テキストの解析程度でI/Oに比べて処理が重いとしたら、処理自体に問題があるんじゃないかな

758 :デフォルトの名無しさん:2009/11/27(金) 06:10:14
実際にボトルネックになってるのはIOじゃねーんだろーな

759 :デフォルトの名無しさん:2009/11/27(金) 08:53:05
>>744
プロパティの一番の利点は後からの修正に強いことだからなぁ。
完成品なプログラムじゃありがたみわかんない。

760 :デフォルトの名無しさん:2009/11/27(金) 10:26:43
多すぎるインターフェースによる継承の爆発・・・!
リストの追加の柔軟性のなさ・・・!

761 :デフォルトの名無しさん:2009/11/27(金) 11:00:13
先カンブリア紀のように爆発的にいろんな手法が開発されてもいづれ淘汰されるんだろう。

762 :デフォルトの名無しさん:2009/11/27(金) 12:02:56
デザインパターンってのにシングルトンとやらがあるらしいが
C#でいうstatic classとは機能面で違うのか?

763 :デフォルトの名無しさん:2009/11/27(金) 12:07:47
>>762
static非インスタンスじゃね?

764 :デフォルトの名無しさん:2009/11/27(金) 12:09:58
シングルトン…常に1インスタンスしか作らない
static class…インスタンス作らない

765 :デフォルトの名無しさん:2009/11/27(金) 12:34:01
インスタンス作るかどうかは構造面の違いであって、機能面の違いじゃないだろ

766 :デフォルトの名無しさん:2009/11/27(金) 12:38:38
>>749
この書籍はなかなかいいぞ

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
tp://www.amazon.co.jp/dp/4822281957

767 :デフォルトの名無しさん:2009/11/27(金) 14:45:51
C#難しい・・VCと同じように使うこともできるんだろうけど、
デレゲートとラムダ式でぶわっと膨らんだ部分でもって、ソースを見ても理解できない状態。
みんな頭いいね〜。

768 :デフォルトの名無しさん:2009/11/27(金) 14:47:39
>>767

C#出来てC++出来ない奴も同じことを言うかもしれんな
結局慣れろ だろ


769 :デフォルトの名無しさん:2009/11/27(金) 14:48:47
高卒や専門卒の土方だって使ってるだろ
頭のよさなんて関係ない

770 :デフォルトの名無しさん:2009/11/27(金) 14:58:33
>>767
初心者らしくもっと基礎的なことやれ

771 :デフォルトの名無しさん:2009/11/27(金) 15:00:17
>>770
俺はやればできる子なんです><

772 :デフォルトの名無しさん:2009/11/27(金) 15:04:43
>>771
そうか、好きにしろ

773 :デフォルトの名無しさん:2009/11/27(金) 15:21:57
だれかIronC#とか作ってください

774 :デフォルトの名無しさん:2009/11/27(金) 15:38:23
>>773
どういう仕様だよ・・・・

775 :デフォルトの名無しさん:2009/11/27(金) 15:44:37
モリブデンC#とかタングステンC#とか?
レアメタル最高とか言っちゃうの?

776 :デフォルトの名無しさん:2009/11/27(金) 15:46:25
数学関数を使う場合、

System.Math.〜

って書かないといけないけど、System.Mathを省略する方法は無いのでしょうか?

777 :デフォルトの名無しさん:2009/11/27(金) 15:50:06
System名前空間は最初から省略できるようになってるだろ

778 :デフォルトの名無しさん:2009/11/27(金) 15:54:13
ちがうだろw

int a = Abs(-3);

って書きたいんだろ。

>>776
できません。
諦めてVB使ってなさい。

779 :デフォルトの名無しさん:2009/11/27(金) 15:56:52
そうですか。
何だかセンス無い仕様ですね(´・ω・`)

780 :デフォルトの名無しさん:2009/11/27(金) 15:57:31
そらそうよ

781 :デフォルトの名無しさん:2009/11/27(金) 16:04:08
一応Systemだけは省略できるけどね
int a = Math.Abs(-3);

782 :デフォルトの名無しさん:2009/11/27(金) 16:04:11
センス

783 :デフォルトの名無しさん:2009/11/27(金) 16:07:07
クラスの概念がない人はセンス無く感じるのかもよん

784 :デフォルトの名無しさん:2009/11/27(金) 16:18:54
できるだろ?
static void Abs(int x){
Math.Abs(x);
}

これでいいじゃん。

785 :デフォルトの名無しさん:2009/11/27(金) 16:22:12
>>784
それ売れると思う( ・ω・)y─┛〜〜

786 :デフォルトの名無しさん:2009/11/27(金) 16:23:27
あえてvoidなのがセンスあるね

787 :デフォルトの名無しさん:2009/11/27(金) 16:24:32
うぉ・・・スレ間違って相談室に投げてしまった・・・

788 :デフォルトの名無しさん:2009/11/27(金) 16:25:39
お前ら仕事しろよ

789 :デフォルトの名無しさん:2009/11/27(金) 16:27:43
誰だって最初
Console.WriteLine書くのめんどくせーから
static void Main(){
W("aaaaaaa");
}

static void W(string s){
Console.WrieLine(s);
}

これで動く。Console.WriteLineとかいう糞長いメソッドを書かなくてもよくなる。便利!

790 :デフォルトの名無しさん:2009/11/27(金) 16:35:55
>>789
残念だが俺はなかったようだ
君の中では特殊な部類にはいるようだ

791 :デフォルトの名無しさん:2009/11/27(金) 16:36:13
>>779
数学関数が長ったらしくて嫌なのはわかる
でも、それやったら標準ライブラリの静的メソッドが
全部予約語になっちゃうようなもんだよね
かえって自分が困るのはすぐに想像付くでしょ
求めるなら名前空間・クラス名の省略じゃなくて
数学関数を演算子として言語に組み込んでくれ〜って
MSにお願いして奇跡が起これば対応してくれるかもね
とりあえず好き放題出来るようにパーサでも作りなよ

792 :デフォルトの名無しさん:2009/11/27(金) 16:40:18
関数の頭にstaticが付いているけど、つけるとどうなるの?

793 :デフォルトの名無しさん:2009/11/27(金) 16:41:32
たぶん君が考えてる期待通りの動作をするのがstatic
ためしに消してみればわかる

794 :デフォルトの名無しさん:2009/11/27(金) 16:42:09
意味がわからない言葉
イベント デリゲート オーバーライド 参照型 継承 静的 演算子 メソッド
ポリモーズム オーバーロード インスタンス ラムダ式 クエリ式 プロパティ

意味がわかる言葉
コンストラクタ 変数 文字列 クラス 戻り値 構造体 配列
for if while switch case

795 :デフォルトの名無しさん:2009/11/27(金) 16:43:13
>>794
ググったらどれもそれなりに解説があるだろうに


796 :デフォルトの名無しさん:2009/11/27(金) 16:45:06
dynamic math = new TypeObject(typeof(System.Math));
math.Abs(x);
C#4.0で自分でDynamicMetaObject作ればこういうのも可能だなw

797 :デフォルトの名無しさん:2009/11/27(金) 16:46:01
うわぁ・・・・いらねぇ・・・・

798 :デフォルトの名無しさん:2009/11/27(金) 16:46:39
>>795
ぐぐったらぐぐったでさらに意味不明用語の羅列で余計わけわからなくなるんだよ

799 :デフォルトの名無しさん:2009/11/27(金) 16:49:10
せめて何がどうわからないかくらい書いてみろよwwww

どうせ皆、意味不明な言葉に一度や二度くらい悩んで解釈見つけ出してるんだし
同じような判らない なら判りやすい解釈出してくれるかもしれないぞ

800 :デフォルトの名無しさん:2009/11/27(金) 16:50:10
>>798
そのタマネギ目にしみるかもしれないけど、最後まで剥けば中にタネ入ってるよ
がんばって!


801 :デフォルトの名無しさん:2009/11/27(金) 16:50:21
意味がわからない言葉
バグのないプログラム 納期厳守 お前のコードにはキレがない

うちの上司のお言葉( ・ω・)y─┛〜〜

802 :デフォルトの名無しさん:2009/11/27(金) 16:51:47
>>801
>お前のコードにはキレがない
ワロタw
たぶん「オレ好みの書き方じゃない」って意味だよ

803 :デフォルトの名無しさん:2009/11/27(金) 16:52:53
>>801
バグのないプログラム→ねぇよ
納期厳守→工程がちゃんと組めるならな
お前のコードにはキレがない→はぁ?お前のションベンと同じだろうが

俺なりの解釈



804 :デフォルトの名無しさん:2009/11/27(金) 16:53:52
継承って二個までならいいけど3個以上になるとつかいづらいな。
ミクロソフトが最初から作ってるクラス(Formとか)を除き
インターフェースや中小クラスだけ継承して通常のクラスはオーバーラオドしないほうがいいな!

class a{
vartul func();
}

class b : a{
overide func();
}

class c : b{
overide func();
}

こんなだったらいちいちどのメソッドが引き継いでるとか考えなきゃいけなくてわかりづらいな!

805 :デフォルトの名無しさん:2009/11/27(金) 16:55:59
>>804
ものによるなあ
コントロール作るのは継承でないとやってられんw

806 :デフォルトの名無しさん:2009/11/27(金) 17:04:19
すいません、特定のビットだけ0にするにはどうすればいいですか?

807 :デフォルトの名無しさん:2009/11/27(金) 17:07:31
特定のビットだけ0の値と論理積を取る
特定のビットだけ0の値は論理否定を使うと楽

808 :デフォルトの名無しさん:2009/11/27(金) 17:07:36
ビット演算か。
昔、8086のファームやっていた時には良くやったけどなー。
そんな関数無かったっけ?
ベタなやり方は、一旦、2進にして特定ビットだけ0マスクしたものとのANDをとる。

809 :デフォルトの名無しさん:2009/11/27(金) 17:10:22
今でもFAでは重宝してる

インデクサ使うのもいいよね


810 :デフォルトの名無しさん:2009/11/27(金) 17:18:55
今日、研究職の奴等が書くコードをみたがスパゲティにも程があるな…
コードは書けても設計出来ない
マクロな事はわかっても全体をみわたせない
技術大国日本は過去の話と実感しますた(´・ω・`)

811 :デフォルトの名無しさん:2009/11/27(金) 17:19:58
>>807
すいません、その特定のビットだけ論理積とれたらいいんですがやり方がわからなかったのです

>>808
なるほど!できましたありがとうございます!

812 :デフォルトの名無しさん:2009/11/27(金) 17:22:56
807と808の間にどれほどの情報量の差があったんだろう……?

813 :デフォルトの名無しさん:2009/11/27(金) 17:22:56
研究職はコード書くのが仕事じゃないから

814 :デフォルトの名無しさん:2009/11/27(金) 17:26:20
お前らスレタイ復唱してから仕事しろ

815 :デフォルトの名無しさん:2009/11/27(金) 17:27:41
>>810
研究職のやつらのほうが実用的なコードすらすら書けちゃったら
そっちのほうが技術大国とは程遠いだろ
土方頑張れよ

816 :デフォルトの名無しさん:2009/11/27(金) 17:29:53
99%の研究職は結果の出せない社会のゴミだからねぇ
低賃金なのを理系は優遇されないとかいっちゃうお花畑な脳内じゃ日本も先はないさ

817 :デフォルトの名無しさん:2009/11/27(金) 17:31:14
>>810
大学とかは大体そんなもん

818 :デフォルトの名無しさん:2009/11/27(金) 17:31:37
まともな研究してる奴ならC#使って無いだろw

819 :デフォルトの名無しさん:2009/11/27(金) 17:33:02
>>818
えっ?

820 :デフォルトの名無しさん:2009/11/27(金) 17:43:37
C#ってXNA使えるらしいけど
Direct Xとやらは使えないの?

821 :デフォルトの名無しさん:2009/11/27(金) 17:45:48
XNAスレ行け

822 :デフォルトの名無しさん:2009/11/27(金) 17:54:19
研究職がものっそ綺麗なコード書いてたら
うちら仕事なくなるっす



823 :デフォルトの名無しさん:2009/11/27(金) 17:58:12
研究職って頭いいの?

824 :デフォルトの名無しさん:2009/11/27(金) 17:59:37
特定分野の雑学を知ってるを頭良いというのであればいいんじゃね?
企業にとっては税金対策の駒

825 :デフォルトの名無しさん:2009/11/27(金) 18:01:56
じゃあ俺のほうが頭いいな

826 :デフォルトの名無しさん:2009/11/27(金) 18:04:11
まぁ研究職についてるやつで頭いいとかいえるのは一握りだろうな
使えないのはそれなりにいて
残りは普通

PGも一緒じゃね

827 :デフォルトの名無しさん:2009/11/27(金) 18:07:35
>>804
.Netのクラスライブラリを全否定するお前は何者だよ

828 :デフォルトの名無しさん:2009/11/27(金) 18:13:03
大学の教授は研究職といえますか?

829 :デフォルトの名無しさん:2009/11/27(金) 18:20:50
いちいち
ファイル→すべてを保存とかやるより
CTRL+Sキーを押したほうが入力が速いな!
プログラミング作業にマウスは必要ねーな。作業遅くなるだけでウンコ

830 :デフォルトの名無しさん:2009/11/27(金) 18:26:03
>>829
そんなの俺がMac SE/30を手に入れた1990年6月の時点で常識だ。

831 :デフォルトの名無しさん:2009/11/27(金) 19:05:14
意味がわからない言葉
コンストラクタ デリゲート オーバーライド 参照型 構造体 クラス
ポリモーズム オーバーロード ラムダ式 クエリ式 

意味がわかる言葉
イベント 変数 文字列 インスタンス 戻り値  配列 継承
for if while switch case 静的 演算子 プロパティ メソッド

832 :デフォルトの名無しさん:2009/11/27(金) 19:05:39
下のソースの3行目、"xxx"のところを"h"、"H"にするとFormatExceptionになってしまうのはなぜでしょうか?
もちろん"hh"、"HH"他、フォーマット文字列は基本的に問題ないんです。"h"と"H"だけがダメ。
12時間制ないし24時間制で、ゼロパディングしない時間表記が得られる事を期待して射るんですが。

System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ja-JP");
DateTime dt = DateTime.ParseExact("2009/03/05 19:11:12", "yyyy/MM/dd HH:mm:ss", cultureInfo);
MessageBox.Show(dt.ToString("xxx", cultureInfo));

833 :デフォルトの名無しさん:2009/11/27(金) 19:10:04
>>832
カスタムの日付と時刻の書式指定文字列
のページの一番下

834 :832:2009/11/27(金) 19:22:28
>>833
ありがとうございます!
"%h"とか"%H"って書く必要があったということですね。標準日時指定子なんてまったく知らなかった。
調べたつもりになってたんですが、リファレンスマニュアルは隅々まで読まないとダメですね。
他の1文字指定子は使ってなかったので気づきませんでした。

835 :デフォルトの名無しさん:2009/11/27(金) 19:40:03
C#がむずかしすぎるからRubyってのやってみたらC#よりもっと難しかった。
やっぱりC#に戻ってきたよ。

836 :デフォルトの名無しさん:2009/11/27(金) 19:41:33
そうですか

837 :デフォルトの名無しさん:2009/11/27(金) 19:45:11
なんでジェネリックってのは

汎用型ならa>bくらいできるようにしろよ!
a>bが判定できないなんてクソだよ!ファック!

838 :デフォルトの名無しさん:2009/11/27(金) 19:48:35
bool型の比較演算子も許容されちゃうよお><

839 :デフォルトの名無しさん:2009/11/27(金) 20:29:59
>>837
ヒント:クラスや構造体

840 :デフォルトの名無しさん:2009/11/27(金) 20:44:49
listBoxの項目を選択しないで取得する方法が分かりません。
下記のように、単純に全部を保存したいだけなんですが、
選択された項目を取得する方法しか見つかりませんでした。

for (int i = listBox1.Length -1; i >= 0; i--)
{
File.AppendAllText(filepath, item[i], enc);
}

841 :デフォルトの名無しさん:2009/11/27(金) 20:58:39
staticな変数とかメソッドて
なんかクラスから半分飛び出してるみたいで気持ち悪いね。

842 :デフォルトの名無しさん:2009/11/27(金) 21:02:25

imre[i]

GetType()
つかうなりデバッグで止めるなりして型見ればいいと思う


843 :デフォルトの名無しさん:2009/11/27(金) 21:05:44
>>841
フレームワークを否定する気かよwwwww
int.MaxValueとかどうすんのよ

最初のMainとかどうすんのよ






そういえば気持ち悪いも何も当たり前すぎてそんな感覚なかったなぁ
でも、何かするのにいちいちインスタンス作らないといけないのも問題だと思うけど・・・

844 :デフォルトの名無しさん:2009/11/27(金) 21:12:19
>>841
その感覚はただしい

845 :デフォルトの名無しさん:2009/11/27(金) 21:17:47
>>842
すみません。型を見るってのがよくわからないです。
書きかたが悪かったでしょうか。
ループしてlistBoxのテキストを逆順に取得して保存したいです。

for (int i = listBox1.Count -1; i >= 0; i--)
{
 File.AppendAllText(ファイルのパス, ?[i], エンコード);
}

この?の部分に何を入れたら良いのかわかりません。
listBox1.textだと選択されている項目しか取得できませんでした。

846 :デフォルトの名無しさん:2009/11/27(金) 21:26:03
変数aと変数bがあって
aとbの符号が違うことを調べる関数はどうやるんですか?

bool 正負判定(int x,int y)

a=5、b=2なら
正負判定(a,b)はtrue

a=-3,b=-4でもtrue

a=3,b=-5ならfalse
みたいな感じです!よろしくお願いします!

847 :デフォルトの名無しさん:2009/11/27(金) 21:28:37
思った通り書くだけだと思うけど
ゼロの場合どうすんの?

848 :デフォルトの名無しさん:2009/11/27(金) 21:29:43
>>845
言い方が悪かった

そのItemの中身の方にキャストしてから文字列にすれば?と思って言っただけなんだ

listBox1Items[i]
じゃないかな?
オブジェクトだから中身は多分文字列なんだろうから .ToString()でもつけりゃいいと思う
listBox1Items[i] .ToString()

違ってたらごめんよ

849 :デフォルトの名無しさん:2009/11/27(金) 21:31:59
>>847

a>0 && b>0
return true;

a>0 && b<0
return true;

ifつけてこんな感じですか?
でもifがいっぱいついてかっこわるいです。もっとスマートな書き方ないですか?
一文でできるような。

850 :デフォルトの名無しさん:2009/11/27(金) 21:32:19
ごめんよ(´・ω・`)

851 :デフォルトの名無しさん:2009/11/27(金) 21:33:29
>>844
正しいわけがないだろw
むしろこういう、馬鹿なくせに自分を疑うことを知らない奴の方が気持ち悪いよ。

クラスはインスタンス(オブジェクト)の元であると同時に、
クラス自身もオブジェクトだって考えることができれば、staticなメンバの存在は
少しも違和感ない。

852 :デフォルトの名無しさん:2009/11/27(金) 21:34:15
>>848
ありがとうございます!
listBox1.Items[i].ToString() で出来ました。

853 :デフォルトの名無しさん:2009/11/27(金) 21:35:00
>>849
基本は
  return a * b >0 若しくは return a * b >=0

0の扱いをどうするかで色々変わるね

854 :デフォルトの名無しさん:2009/11/27(金) 21:44:52
>>853
849じゃないけどなるほどなぁ。
こういう人が向いてるんだろうな……。

855 :デフォルトの名無しさん:2009/11/27(金) 21:49:27
掛けちゃうとオーバーフローの問題が出てくることになる

856 :デフォルトの名無しさん:2009/11/27(金) 21:53:13
C:\Users\KENZO\Documents\Visual Studio 2008\Projects\PasswordTrap\PasswordTrap\obj\Debug\Setup.pdb

初心者プログラマが新種のキンタマ作って大暴れしてるみたいだなw

857 :デフォルトの名無しさん:2009/11/27(金) 21:55:01
return ((a > 0 && b > 0) || (a < 0 && b < 0));

我ながらかっこ悪いw

858 :デフォルトの名無しさん:2009/11/27(金) 21:55:23
>>856
お?どっからその情報みつけたの?俺も教えてくれ

これは香ばしい・・・・

859 :デフォルトの名無しさん:2009/11/27(金) 21:58:12
>>855
気になるならdoubleでキャストしてから掛けたら大概大丈夫だ

860 :デフォルトの名無しさん:2009/11/27(金) 22:00:46
んな事するより比較演算の方がどう考えてもコスト安いだろ。

861 :デフォルトの名無しさん:2009/11/27(金) 22:10:09
コスト(笑)

862 :デフォルトの名無しさん:2009/11/27(金) 22:13:46
つうか掛け算してオーバーフローの心配がある数扱うのなら
元々double使っているよな

だから
return a * b >0 で問題になることは、まず起こらないよ

863 :デフォルトの名無しさん:2009/11/27(金) 22:22:11
変数を、メモリ内の特定の先頭アドレスを指定して宣言 → 別プロセスで不要かどうか判断し、不要になった場合に削除
したい場合には、どうしたらいいでしょうか?

864 :デフォルトの名無しさん:2009/11/27(金) 22:27:40
>>858
やっぱり肉球(´・ω・) カワイソス 山田ヲチスレ 766
http://hideyoshi.2ch.net/test/read.cgi/download/1259073725/

865 :デフォルトの名無しさん:2009/11/27(金) 22:41:35
・・・排他的論理和

866 :デフォルトの名無しさん:2009/11/27(金) 22:47:07
>>864
サンクス
ちょっと言ってくる

867 :デフォルトの名無しさん:2009/11/27(金) 22:50:38
>>862
どんな理屈だよ。

return (a >> 31) & (b >> 31) != 0
未確認

まあ>>857が一番いいだろうな。


868 :デフォルトの名無しさん:2009/11/27(金) 22:51:46
あごめん大ボケしたわw


869 :デフォルトの名無しさん:2009/11/27(金) 22:53:10
return (a >> 31) ^ (b >> 31) == 0
かな?


870 :デフォルトの名無しさん:2009/11/27(金) 23:12:21
>>869
考えすぎ

a ^ b < 0

でいい。

871 :デフォルトの名無しさん:2009/11/27(金) 23:13:35
あ、判別逆かも

872 :デフォルトの名無しさん:2009/11/27(金) 23:43:42
すみません教えてください

for文
{
関数A();
}

関数B();

このように、for文の中で関数Aを実行し、それが終わり次第関数Bを実行してほしいのですが、
関数Aの処理が終わらないうちに関数Bが実行されてしまいます
なにかうまい方法はありませんか

873 :デフォルトの名無しさん:2009/11/27(金) 23:45:01
ムリ

874 :デフォルトの名無しさん:2009/11/27(金) 23:45:01
エスパー頼む

875 :デフォルトの名無しさん:2009/11/27(金) 23:46:02
非同期処理を同期処理にかえればいい

876 :デフォルトの名無しさん:2009/11/27(金) 23:46:59
>>870
1の1乗=1
1の-1乗=1
-1の1乗=-1
-1の-1乗-1

なのになんでa^b で判断できるんだ?

877 :デフォルトの名無しさん:2009/11/27(金) 23:50:15
>>875
ありがとうございます

878 :デフォルトの名無しさん:2009/11/27(金) 23:51:29
>>872
エスパーすると、Formアプリで
関数Aでlabel.TextとかForm.Textを変更してるのに
更新されないとかじゃないのか。
this.Reflesh() (この場合thisはFormね)とかしてみれば?

879 :デフォルトの名無しさん:2009/11/27(金) 23:53:15
>>876
おまえはいっぺんC言語から見直したほうがいい

880 :デフォルトの名無しさん:2009/11/28(土) 00:03:09
>>867
オーバーフローにケチ付ける割に、整数型以外考えていないのなw

881 :デフォルトの名無しさん:2009/11/28(土) 00:08:11
じゃなかったint32のみか
byte、short、long、int64でも破綻とかw

882 :デフォルトの名無しさん:2009/11/28(土) 00:10:03
Math.Signっていうそのまんまなのがあるんだが

883 :デフォルトの名無しさん:2009/11/28(土) 01:04:30
列挙型をそのまんまの形で代入できないかな

enum 難易度 {簡単,普通,難しい}
難易度 難易度2;
難易度2=難易度.簡単

みたいになってでてこなくていい最初の型名がでてくるのがうざい
難易度=簡単
みたいにできないの?

884 :デフォルトの名無しさん:2009/11/28(土) 01:08:28
>>883

enum 定期試験の難易度 {簡単,普通,難しい}
enum 受験の難易度 {難しい,普通,簡単}

があって 簡単 だけを指定した時どっちになるんだ?


885 :デフォルトの名無しさん:2009/11/28(土) 01:26:42
>>883
難易度 簡単{get{return 難易度.簡単}}

は冗談として、出来ない。

確かに、代入する変数の型が確定している時はenumの型を指定するのは冗長ではあるし、
省略できても文法的に破綻はしない気がする。

でも、心配しなくてもそのうちそんなこと「出来てもむしろしたくない」
と思うようになるから。

886 :デフォルトの名無しさん:2009/11/28(土) 01:33:09
つまりenumは同じものをなんらかの方法で二つつくらないとダメってことか

enum 型名 {1,2,3}
型名 型名2 =型名.1
みたいにやるか。わざわざ型名と型名2とほぼ同じ名前を二つ作るところがあれだが、そういう仕様なら仕方ない。

887 :デフォルトの名無しさん:2009/11/28(土) 01:35:46
と思ったらまったく同じ名前つくれるのか。

難易度 難易度 =難易度.簡単
ができた。これならまだいいな

888 :デフォルトの名無しさん:2009/11/28(土) 02:28:47
>>881
byteで破綻しない方法を教えてくれw
まあint32ですら破綻するよりはましなんじゃね?


889 :デフォルトの名無しさん:2009/11/28(土) 03:00:49
>>846
return ((a < 0) == (b < 0));
return ((a > 0) == (b > 0));
return ((a <= 0) == (b <= 0));
return ((a >= 0) == (b >= 0));


890 :デフォルトの名無しさん:2009/11/28(土) 03:11:48
C#ではポインタ型やポインタ型の変数はオブジェクトですらないのかな。

891 :デフォルトの名無しさん:2009/11/28(土) 04:00:01
public interface ISomething {
     ISomething GetSomething();
}

public class A : ISomething {
    public A GetSomething(){ return this; } //実装
}

みたいなのが実装しているとみなされれば楽なのになーと思う時がある。
ファクトリ作ってる時とか。

892 :デフォルトの名無しさん:2009/11/28(土) 04:15:26
よくわからん

893 :デフォルトの名無しさん:2009/11/28(土) 04:16:10
自分自身作ってどうすんだよ…

894 :デフォルトの名無しさん:2009/11/28(土) 04:21:44
b = a;

b = a.GetSomething();
と書きたいのか

895 :デフォルトの名無しさん:2009/11/28(土) 04:28:15
usingで使ってるDLLって
ビルドしてできたexeと同じファイルにおいておけば別のPCでも起動できるの?
自作のDLLやMSが最近だした新しいDLLで作ったのを配布する際は
ZIPにDLLとEXE両方うめこめばいい?

896 :デフォルトの名無しさん:2009/11/28(土) 05:06:30
簡単のために省略したつもりが余計分かりづらかったな。すまん。
あるインタフェースAを返すメソッドmethodが、別のあるインタフェースBに定義されているとする。
ここでインタフェースBを実装するクラスB'のmethodにおいて、インタフェースAではなく
インタフェースAを実装するクラスA'を返すことを許容してほしいということ。

897 :デフォルトの名無しさん:2009/11/28(土) 05:17:04
明示的実装は知ってるよな確認するけど

898 :デフォルトの名無しさん:2009/11/28(土) 05:17:27
>>896
わざわざコード書かなくても、そういうのは「共変な戻り値型」と言えばすぐに伝わるよ

899 :デフォルトの名無しさん:2009/11/28(土) 06:51:56
それじゃ俺に伝わらないからだめだね


900 :デフォルトの名無しさん:2009/11/28(土) 08:47:19
>>896
デリゲートに関しては許容されてるそうだね。
http://ufcpp.net/study/csharp/sp_delegate.html#co-contra

C#4.0だとジェネリックスでも許容されるそうだね。
http://ufcpp.net/study/csharp/ap_ver4.html#variance


901 :デフォルトの名無しさん:2009/11/28(土) 09:12:26
共変って言葉が同じだけで関係ないし

902 :デフォルトの名無しさん:2009/11/28(土) 09:27:41
>>883
それを認めてしまうと、名前が衝突しまくって困るんだよ。
C++ の enum がそうかけてしまって、冗談抜きで困ったから。

あと、C# みたいにインテリセンス前提の言語だと、
型名. って打った時点で候補が出てくる方が都合がいい。

903 :デフォルトの名無しさん:2009/11/28(土) 09:28:53
>>890
ポインターは値。アドレスを格納した単なる数値。
int とか long とかもオブジェクトといえばオブジェクトだし、
その理屈で行くとポインターもオブジェクト。

904 :デフォルトの名無しさん:2009/11/28(土) 09:32:54
>>891
A Method() { return new A(); }
ISomeThing ISomeThing.Method() { return this.Method(); }


905 :デフォルトの名無しさん:2009/11/28(土) 09:48:41
スレタイにある「ふらっと」ってなんですか?
#なのに…

906 :デフォルトの名無しさん:2009/11/28(土) 09:49:36
>>904
そういう意味じゃない。
A : IHoge なら

メソッドシグネチャが
IHoge Method() な場合でも
A Method()での実装を許して欲しいなって話。

907 :デフォルトの名無しさん:2009/11/28(土) 09:51:58
そいつはあまりにも無茶苦茶すぎでしょw
整合性すらとれないぞw

908 :デフォルトの名無しさん:2009/11/28(土) 09:59:22
>>895
基本的にはそう
> MSが最近だした新しいDLL
MS が頒布するのって大抵インストーラつかわね?
あとusingはdllとは関係ない

909 :デフォルトの名無しさん:2009/11/28(土) 10:00:09
>>907
何故?
どういう時に整合性がとれなくなる?

デリゲートとかでは許容されてるんだよ?


910 :デフォルトの名無しさん:2009/11/28(土) 10:02:27
>>907
そうでもない。
実際にJavaやDでは実装されてる。

>>906
CLIが共変な戻り値型によるオーバーライドを認めてないから、
言語レベルで実装する場合>>904のシンタックスシュガーにするしかないだろうな

911 :デフォルトの名無しさん:2009/11/28(土) 10:07:08
ISomeThing.Methodのほうはsealしておく必要があるな

912 :デフォルトの名無しさん:2009/11/28(土) 10:07:42
それが出来たとしてどういうメリットがあるわけ?

913 :デフォルトの名無しさん:2009/11/28(土) 10:08:24
>>912
ぐぐれかす

914 :デフォルトの名無しさん:2009/11/28(土) 10:09:06
ファクトリクラスに便利とあるけどそれは違うと思う

915 :デフォルトの名無しさん:2009/11/28(土) 10:09:25
ググったぞ
http://blogs.wankuma.com/shannon/archive/2007/02/14/62275.aspx

916 :デフォルトの名無しさん:2009/11/28(土) 10:10:57
ジェネリクスでも共変使えたほうがいいよねってことで
4.0からは実際に実装されるわけなんだよな。

通常のメソッドで許可しないのはメリットが少ないからなのかね。

917 :デフォルトの名無しさん:2009/11/28(土) 10:11:27
その内容なら>>900が答えだろ
>>891見て見ろよ
全く違うだろ

918 :デフォルトの名無しさん:2009/11/28(土) 10:15:24
>>916
メリット少ない割に実装が大変だったり混乱招く機能は C# にはまず入らない。

919 :デフォルトの名無しさん:2009/11/28(土) 10:17:41
>>917
え?一緒だよ?
むしろ >>900ちゃんと読め。

A : ISomeThing な時に
ISomething GetSomething() なシグネチャーに
A GetSomething() な実装を許せって話だよ。

デリゲートの場合は
A: ISomeThing の場合、
delegate ISomething GetSomething() に
A GetSomethingImpl() の代入を許可してる。


920 :デフォルトの名無しさん:2009/11/28(土) 10:18:34
なんでジェネリックスでは実装されたんだろ。
俺は>>900読んで混乱してしまった。

921 :デフォルトの名無しさん:2009/11/28(土) 10:19:24
ジェネリックやデリゲートとは違って、
できたからといって特に便利になるわけじゃないからな
デリゲートが共変反変使えるようになってるのは使い回せるから
ジェネリックはほとんどIEnumerable<out T>専用だけどよけいなCast<T>やOfType<T>を減らせる

922 :デフォルトの名無しさん:2009/11/28(土) 10:22:23
あーなるほど理解

たとえば
List<ISomething> を処理する何かに List<A> をそのまんまわたせるようになるってことか。
つかそれ今迄出来なかったんだな

923 :デフォルトの名無しさん:2009/11/28(土) 10:23:57
List<T>はダメ
Tの使い方を読み取りか書き込みに限定しないとタイプセーフが保たれない
だからoutとinなの

924 :デフォルトの名無しさん:2009/11/28(土) 10:26:31
読み取り専用インターフェースとか書き込み専用インターフェースじゃないと
旨みがない=ジェネリックはほとんどIEnumerable<out T>専用ってことかぁ。


925 :デフォルトの名無しさん:2009/11/28(土) 10:33:01
>>918
>混乱招く機能

dynamic は正直どうかと思う

926 :デフォルトの名無しさん:2009/11/28(土) 10:38:43
ほかにもIComparer<T>はIComparer<in T>になってるので
IComparer<MyDerived>を引数に取るメソッドにIComparer<MyBase>を渡せたりする
(MyDerivedはMyBaseを継承しているとする)

927 :デフォルトの名無しさん:2009/11/28(土) 10:42:07
>>925
ドキュメントが頼りになりそうだな。

// !!CAUTION!! x はAddメソッドとResultプロパティを持つ必要があります
void doSomething(dynamic x);



928 :デフォルトの名無しさん:2009/11/28(土) 10:48:48
わけわかめ
まとめると>>900はC#4.0ではどうけるようになるのさ

929 :デフォルトの名無しさん:2009/11/28(土) 10:52:34
>>928
どうける=どう書けるだとして
同じサイトの詳細を読んだら?
http://ufcpp.net/study/csharp/sp4_variance.html


930 :デフォルトの名無しさん:2009/11/28(土) 11:03:29
>>927
さすがにそういう使い方する奴は「そんなには」出ないと思う・・・


931 :デフォルトの名無しさん:2009/11/28(土) 11:03:38
ちょっと分かりにくいかもしれないけどJavaの悪名高いワイルドカードに比べたら遥かにマシ

932 :デフォルトの名無しさん:2009/11/28(土) 11:03:56
間違えた
>>891はC#4.0ではどう実装するの?
だったw
共変性と反変性が実装されるただけで書ける?

933 :931:2009/11/28(土) 11:04:35
分かると思うけど>>931はジェネリックのこと

934 :デフォルトの名無しさん:2009/11/28(土) 11:06:46
ジェネリックって何

935 :デフォルトの名無しさん:2009/11/28(土) 11:10:18
>>932
ジェネリックやデリゲートとはまったく別の話
たぶんインターフェイスメソッドを実装するときや
基底クラスのメソッドをオーバーライドする際の共変反変はたぶん未来永劫サポートされない
メリットがほとんど無いからね

936 :デフォルトの名無しさん:2009/11/28(土) 11:11:34
>>932
ジェネリクスでの共変性と反変性が導入されるだけだから
>>891は今のところ実装されないよ。

現状デレゲート(と4.0ジェネリクス)だけそういう書き方が出来る。



937 :デフォルトの名無しさん:2009/11/28(土) 11:13:53
なんでJavaとかDでは採用しちゃったんだろう
メリットより直交性を取ったのかね



938 :デフォルトの名無しさん:2009/11/28(土) 11:14:44
>>935-936
ですよねーw
>>891からの流れだったからこの話前提に聞いてた
どーりでわけわかめな訳だ

理解した

939 :デフォルトの名無しさん:2009/11/28(土) 11:17:13
そりゃ普通に考えればできるのが自然だからだろ
C#はバージョン管理に異常に気を使ってる言語だからそういう関係もあるんだと思う

940 :デフォルトの名無しさん:2009/11/28(土) 11:24:06
>>939
なるほど。
実装の都合ってのもあるわけだしね。

Javaはどうなってるのか色々見てみたけど
ジェネリックスでの共変実現のためにあっちはワイルドカードを使うのか・・・
in out で制限しつつのC#のやり方は結構スマートなんだな。




941 :デフォルトの名無しさん:2009/11/28(土) 11:24:21
>>895
できるけどMSのdllを勝手にローカルコピーで配布したらライセンス違反だ

942 :デフォルトの名無しさん:2009/11/28(土) 11:29:01
Javaの例見ててメソッドの戻り値に共変を許可した場合のメリット一つだけ見つけた。
ICloneable を実装して使うときに一々キャストしなくて良くなるわ。
あとはわからん・・・

943 :デフォルトの名無しさん:2009/11/28(土) 11:29:45
>>937
ダウンキャストを減らすことができるからバグ混入の可能性が減る

944 :デフォルトの名無しさん:2009/11/28(土) 11:32:25
ICloneableなんかどうせ使い物にならん
広く使われてるからさすがに本家の.NETでObsolete指定されることは無いだろうが
Silverlightでは消えた
理由は「仕様が不明で役に立たないから」らしい

945 :デフォルトの名無しさん:2009/11/28(土) 11:32:48
>>943
>>942とセットで考えるとそういうことか。
メリットが無いわけでもないんだな。


946 :デフォルトの名無しさん:2009/11/28(土) 11:33:16
ICloneable<out T>を…

947 :デフォルトの名無しさん:2009/11/28(土) 11:34:31
なんとなくわかってきたぞ。
普段は不要だけどいざ必要になったときにヤキモキするタイプの仕様だ、これは。

948 :デフォルトの名無しさん:2009/11/28(土) 11:35:37
ジェネリックにしたって同じでしょ
せめてディープコピーかシャローコピーかくらいは仕様で決めてもらわないと
使いようがない

949 :デフォルトの名無しさん:2009/11/28(土) 11:36:27
>>946
それだ!

interface ICloneable<out T> {
T clone();
}

class Hoge : ICloneable<Hoge> {
Hoge clone();
}

こういうこと??


950 :デフォルトの名無しさん:2009/11/28(土) 11:36:33
>>946
考えてみろよ。それ実装するの物凄くうざいぞwww

951 :デフォルトの名無しさん:2009/11/28(土) 11:37:25
ICloneableが使い物にならないのと戻り値の共変の話は別もんだろうと。

952 :デフォルトの名無しさん:2009/11/28(土) 11:39:33
>>937,942
C# の場合は >>904 みたいな書き方推奨だから。
ICloneable も、>>904 の書き方すれば、静的に Clone 呼ぶ分にはキャスト不要。


953 :デフォルトの名無しさん:2009/11/28(土) 11:43:43
C#は「バージョン管理重視」が基本だからな
考え方の問題だからそれを面倒とかどうとか言っても仕方がない

954 :デフォルトの名無しさん:2009/11/28(土) 11:45:32
>>953
バージョン管理重視っていうのは何のことを指しているんでしょうか?
言語仕様の話??

適当にWebで拾い食いしてるだけじゃやっぱ色々わかんないままになるな・・・
共変反変の概念も今日はじめてしったよ・・・


955 :デフォルトの名無しさん:2009/11/28(土) 11:48:08
共変戻り値サポートしないのはリフレクションで弄るときに厄介だからだろう

956 :デフォルトの名無しさん:2009/11/28(土) 11:52:26
>>949
それやりたいだけならout無しでもいけるぞ。
ICloneable<Hoge>とIClonenable<Huga>だのをICloneable<Object>(の配列とか)につっこみたければ
out が必要になるが。

そう考えると Hogehoge<out T> と Hogehoge<Object> を使えばメソッド戻り値の共変性はサポートされたも
同然ってことじゃない?

957 :デフォルトの名無しさん:2009/11/28(土) 11:54:00
>>956
何か色々間違ってそうな気がするんだけど頭がグルグルしてわからん

958 :デフォルトの名無しさん:2009/11/28(土) 11:54:05
インターフェイスの明示的実装や、
new修飾子によるオーバーロードで対応するべきだからだよ
バージョン管理の考え方についてはこのへん
http://msdn.microsoft.com/ja-jp/library/6fawty39(VS.80).aspx

959 :デフォルトの名無しさん:2009/11/28(土) 12:03:53
>>956の書き方で>>891を実装するとこうなるのか

public interface ISomething<out T> where T : ISomething<out T> {
ISomething<out T> GetSomething();
}

public class A : ISomething<A> {
public A GetSomething() { return this; }
}

一応これで実現可能になったってことじゃね?



960 :デフォルトの名無しさん:2009/11/28(土) 12:05:27
>>959
いやだめだろそれじゃ。
結局最初の問題にもどってるw

961 :デフォルトの名無しさん:2009/11/28(土) 12:08:47
public override int meth(string s);

962 :デフォルトの名無しさん:2009/11/28(土) 12:08:49
なんでそんなありえねーファクトリー関数を執拗に作ろうとしてるんだか。
大体それ、C#じゃコンパイルできないんだろ?

ファクトリー関数はそのクラスごとにstatic methodで作っていくのが常道。
別にこれでほとんど困らん。

963 :デフォルトの名無しさん:2009/11/28(土) 12:14:02
>>959
A の方は public ISomething<A> GetSomething() { return this; } が正解。
どっちにしても A bar = (A)foo.GetSomething(); みたいにダウンキャストしないと駄目。



964 :デフォルトの名無しさん:2009/11/28(土) 12:14:38
やろうと思えばISomething<object>とISomething<string>を両方実装することもできるわけで
JavaやDにはできない芸当だ

965 :デフォルトの名無しさん:2009/11/28(土) 12:19:25
こんなのがあったぞ
cloneみたいなオブジェクト生成インターフェースの共変にジェネリック使うってアイデアは
やっぱすでに考えついてる人はいたみたいだ
http://srtsolutions.com/blogs/billwagner/archive/2005/06/17/covaraint-return-types-in-c.aspx


966 :デフォルトの名無しさん:2009/11/28(土) 12:23:59
なんにせよC#の考え方としては>>904が正解だ
それが気に入らないなら不便なのは仕方ない

967 :デフォルトの名無しさん:2009/11/28(土) 12:25:20
他所でも似たような議論してるんだな。

こんなやりとりも。
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=90909

で、そこ辿ったらこんなのも。
http://blogs.msdn.com/ericlippert/archive/2008/05/07/covariance-and-contravariance-part-twelve-to-infinity-but-not-beyond.aspx




968 :デフォルトの名無しさん:2009/11/28(土) 12:32:53
>>964
Dはちょっと前に明示的実装の文法話し合ってたから、そのうちできるようになるんじゃね

969 :デフォルトの名無しさん:2009/11/28(土) 12:36:39
c#ってexeの内部にdllって埋め込める?

//add.cs
namespace add{
//足し算クラス
}

これをadd.dllって名前にして
//MySample.cs

using add
//addを使ったプログラム

これをTest.exeって名前にしてコンパイルしたとき
Testにadd自体を埋め込みたいんだけど。

970 :デフォルトの名無しさん:2009/11/28(土) 12:40:27
ILMergeというのを使えばできるけどなんか勘違いしてない?
名前空間とDLLは全く関係ないよ
add.csとMySample.csを一緒にコンパイルすれば一つになる

971 :デフォルトの名無しさん:2009/11/28(土) 12:46:16
ILMergeってスマートじゃないよなあ
そういうアプローチじゃなくても、MSBuildにかけるときに
単に2つのプロジェクトをマージすればいいだけだと思うんだけど
作ってみようかな

972 :デフォルトの名無しさん:2009/11/28(土) 12:49:33
>>970
そうなんだ。
ありがとう。
ILmergeって便利なソフトがあったんだね。

973 :デフォルトの名無しさん:2009/11/28(土) 12:49:47
>>971
そもそもDLLにしないなら1つのプロジェクトで作るべき

974 :デフォルトの名無しさん:2009/11/28(土) 12:50:27
>>970
それじゃあ質問に対する答えになってないだろ。
>>969
ほぼ同じ質問があってすでにオレが答えてる。
このスレ内にあるから調べろ。

975 :デフォルトの名無しさん:2009/11/28(土) 12:53:16
それじゃあ質問に対する答えになってないだろ。

976 :デフォルトの名無しさん:2009/11/28(土) 13:00:16
どうでもいいがhttp://pc12.2ch.net/test/read.cgi/tech/1255530225/いけ

977 :デフォルトの名無しさん:2009/11/28(土) 13:29:58
dll自体が単体で存在してなきゃいけないのはWindowsの仕様ですか?
exeに埋め込みたくいろいろしらべたのですが方法がでてきません

978 :デフォルトの名無しさん:2009/11/28(土) 13:32:35
ILMerge使えつってんだろうがヴォケ!

979 :デフォルトの名無しさん:2009/11/28(土) 13:35:19
>>977
dllが単体で存在するって何だ?
exeに埋め込みたいって何をだ?

DLLの意味分かってるのか?

980 :デフォルトの名無しさん:2009/11/28(土) 13:35:52
dll埋め込みは1スレに1回ぐらいは見るネタだが
なんでそんなにdllをいやがるのか理解できない <これもお約束

981 :デフォルトの名無しさん:2009/11/28(土) 13:39:15
980か
建てられるかな

982 :デフォルトの名無しさん:2009/11/28(土) 13:43:12
新スレ建った
ふらっとC#,C♯,C#(初心者用) Part49
http://pc12.2ch.net/test/read.cgi/tech/1259383252/

983 :デフォルトの名無しさん:2009/11/28(土) 13:43:36
配布をexe1個で済ませたい気持ちは分からんでもない

984 :デフォルトの名無しさん:2009/11/28(土) 13:48:41
Readme.txtだって必要だし、ヘルプだってあったほうがいいし、
exe.configが必要になるアプリだってあるし、
実行プログラム1個だけでOKなんて幻想に過ぎないよ。

985 :デフォルトの名無しさん:2009/11/28(土) 13:53:51
スレ立て乙

986 :デフォルトの名無しさん:2009/11/28(土) 14:02:43
dllに計算アルゴリズムだけ梱包して、こいつだけ取り替えたらいろんなことが出来ると普通だろ。

987 :デフォルトの名無しさん:2009/11/28(土) 14:05:59
日本語でおk

988 :デフォルトの名無しさん:2009/11/28(土) 14:16:03
MEFみたいなことかと

989 :デフォルトの名無しさん:2009/11/28(土) 15:37:28
exe 内で全部できればいいじゃない

990 :デフォルトの名無しさん:2009/11/28(土) 15:38:28
exeには夢が詰まってる

991 :デフォルトの名無しさん:2009/11/28(土) 15:39:34
そんなに同じがいいなら、よそ(のプロジェクト)の子(コード)になっちゃいなさい!!!

992 :デフォルトの名無しさん:2009/11/28(土) 16:22:48
プログラマに限らず、客観的には無価値としか思えないことにこだわる人っていうのは、
センス(の欠如)の問題ってこともあるけど、何かからの逃避(代償行動ってやつ)
なんじゃないのかなって気がするね。

993 :デフォルトの名無しさん:2009/11/28(土) 16:36:21
強迫性障害ってやつか
頭ではもう大丈夫ってわかってるのに不必要に手を洗ったり
ああいうやつか。

994 :デフォルトの名無しさん:2009/11/28(土) 16:52:53
靴下は白じゃないと嫌なの!!

995 :デフォルトの名無しさん:2009/11/28(土) 17:01:54
客観的に無価値って判断は誰がしているんだろう?
本当に客観か?

996 :デフォルトの名無しさん:2009/11/28(土) 17:04:45
ビルゲイツと蓮舫だろう( ・ω・)y─┛〜〜

997 :デフォルトの名無しさん:2009/11/28(土) 17:08:53
アセンブリっていう単語の意味がよくわからんのだが

なんとか.exeとかなんとか.dllってのが「アセンブリ」?

998 :デフォルトの名無しさん:2009/11/28(土) 17:10:48
端的にはそう
持ち運べる最小単位がアセンブリ

999 :デフォルトの名無しさん:2009/11/28(土) 17:32:57
ソリューションエクスプローラで参照の設定をしたら
自動的にusingに書き加えてくれよ。不親切だなあ。

1000 :デフォルトの名無しさん:2009/11/28(土) 17:35:55
参照とusingはなんの関係もないと何度言えば

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

233 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)