C#, C♯, C#相談室 Pa ..
39:デフォルトの名無しさん
09/02/08 05:25:05
世界を変えるアプリ→存在する全暗号の関数を自動的に解析するアプリ
40:デフォルトの名無しさん
09/02/08 10:05:57
FxCopやStyleCopは自動修正できないよ
やたら厳しく文句付けてくるだけのツール
オープンソースにするならFxCop通すのは最低限のマナーだと思うけど結構面倒
41:デフォルトの名無しさん
09/02/08 11:22:49
のちのSkyNetである
42:デフォルトの名無しさん
09/02/08 17:36:55
>>40
まぁ Framework/Style Police だからな。捕まえるまでが仕事。
43:デフォルトの名無しさん
09/02/08 18:58:34
>>39
計算時間を気にしなければ既にあるんじゃね?
44:デフォルトの名無しさん
09/02/08 19:00:11
そんなんじゃ世界を変えられないよ
45:デフォルトの名無しさん
09/02/08 19:08:41
>>39
残念ながら暗号強度と関数の公開性は関連がないよ。
46:デフォルトの名無しさん
09/02/09 09:21:13
「世界」を「world」に置き換える、テキスト変換ツールに1票。
47:デフォルトの名無しさん
09/02/09 10:08:07
既存システムのファイルマッピングメモリにC#でアクセスする方法が分かりません
C# ファイルマッピングで検索してもWin32系の情報しか出てこないのですが、
C#にファイルマッピング系のクラスなどは存在しないのでしょうか?
48:デフォルトの名無しさん
09/02/09 10:16:17
ない
49:デフォルトの名無しさん
09/02/09 10:31:38
うぎゃ!
APIでゴリゴリ書きます^^;
ありがとうございました
50:デフォルトの名無しさん
09/02/09 14:33:03
>>47
.NET Framework 4.0で追加予定
51:デフォルトの名無しさん
09/02/09 15:18:05
質問です。
enum XX : int { ...... }
と列挙した内容を、(int)などのキャストなしで値として得たいと思っています。
何か良い案などございますでしょうか?
52:デフォルトの名無しさん
09/02/09 16:32:02
ございません。
abstract class XX
{
public const int Hoge = 0;
public const int Hage = 1;
……
}
とか
53:デフォルトの名無しさん
09/02/09 16:36:25
やっぱりそうなっちゃいますか・・・
enumを列挙するときに数え上げてDictionaryにenumをKeyにして、
数値を格納使用とも思ったのですが、列挙の途中で値が代入され
連続性がないenumの場合は使えないナなど悩んでおりました。
54:デフォルトの名無しさん
09/02/09 19:28:47
vs2008なんですがデバッグの時に、ウォッチウィンドウとかで"現在のコードが最適化されているため、式を評価できません"となることがあるんだがなぜ?
最適化してる訳じゃないし他のところだと普通に値が見れるし。
55:デフォルトの名無しさん
09/02/09 19:52:09
>>53
VBならキャストなしでいけるw
しかし、そんなキャストを忌避しなきゃならん理由があると思えんけど。
56:デフォルトの名無しさん
09/02/09 20:44:31
>>51
Enum.GetValues(typeof(XX)) でなくて?
57:デフォルトの名無しさん
09/02/10 03:21:24
C#でCRC32を計算するために外部dllを探しているんですが、ある程度高速な物で何かお勧めはありませんか?
ググればいくつも見つかりますが、どれが高速かいちいち試すときりがないので。
58:デフォルトの名無しさん
09/02/10 03:51:05
10万件くらいのDecimalがあって、参照ばかりで挿入とかはありません。
この場合どういうデータ構造をつかえばいいでしょうか?
59:デフォルトの名無しさん
09/02/10 03:53:42
>>57
条件によるとしか
ライセンスの問題もあるし、unsafeが許可されるのかも知らんし
そもそもIOがボトルネックになるんじゃね?という気もする。
60:デフォルトの名無しさん
09/02/10 05:14:25
C#からモニタの情報をScreen.AllScreensより詳しく取得できないですかね?
USBアダプタでのマルチモニタ環境なんですけど再起動したりするとたまに取得順が変わるようで、出来ればモニタの型番かなにかで一意に対応取りたいんですが・・・。
61:デフォルトの名無しさん
09/02/10 07:55:56
>>57
どれもたいして変わらん。
本当に速いのが必要なときはハードにやらせるし
62:デフォルトの名無しさん
09/02/10 07:57:51
>>58
配列
63:デフォルトの名無しさん
09/02/10 10:01:09
>>60
DeviceName とかじゃダメか?
64:デフォルトの名無しさん
09/02/10 10:09:08
>>57
SSE4.2使え
65:デフォルトの名無しさん
09/02/10 10:11:08
System.Security.Cryptography.HashAlgorithm系のやつじゃあかんの?
66:デフォルトの名無しさん
09/02/11 08:37:13
RadioButtonのCheckedが全てfalseになります。
ApplicationSettingsを使ってRadioButtonのCheckedを覚えさせようとしたんですが、
例えば二つのRadioButtonがあった場合、二つともPropertyBindingとして設定すると
アプリを動かして、UIでチェックをつけたりはずしたりする時に、その二つの
RadioButtonのCheckedが一度外れた状態になります。何故でしょう。
そもそもRadioButtonはApplicationSettingsでCheckedの値を覚えさせる
ものではない?
67:デフォルトの名無しさん
09/02/11 09:14:39
>>63
DeviceNameだと
"\\\\.\\DISPLAY1" string
っていう値が入ってるだけで、これってPC再起動時に名前が変化する可能性があるので使えないかなぁと
68:デフォルトの名無しさん
09/02/11 12:45:51
C#には、Effective C++や C++ Primerの様な本が無くてイマイチ。
趣味でプログラミングする身としては余り楽しくない。
MVPのブログはキモイので肌に合わない。
今、C#で継承や多態性を有効活用させる為に、Effective Javaを衝動買い
しようかと思ったのだけど、通販しか手が無い。
注文する前に、みんな何読んでるか聞かせて。
69:デフォルトの名無しさん
09/02/11 13:10:30
>>66
イニシャライズはどこでやってる?
Formのコンストラクタじゃなく、Form_Loadでしてみては?
70:デフォルトの名無しさん
09/02/11 13:26:06
>>66
これじゃだめなん?
private void Form1_Load(object sender, EventArgs e)
{
this.radioButton1.Checked = Properties.Settings.Default.radio;
this.radioButton2.Checked = !Properties.Settings.Default.radio;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Properties.Settings.Default.radio = this.radioButton1.Checked;
Properties.Settings.Default.Save();
}
71:デフォルトの名無しさん
09/02/11 13:58:35
>>68
あるよ。
Effective C# URLリンク(my.safaribooksonline.com)
More Effective C# URLリンク(my.safaribooksonline.com)
C# Primer Plus URLリンク(my.safaribooksonline.com)
More...は今読んでる。
Safari大量にC#本あるから、読む本は尽きないよ。
(ただし日本語訳はない)
72:デフォルトの名無しさん
09/02/11 15:20:30
IOleControlとかのインターフェイスを定義したファイルってないの?
Win32APIを定義したのは見つかったのに、、、
不便でしょうがない
73:デフォルトの名無しさん
09/02/11 15:31:51
C++はEffective C++とか読まないとまともに書けないけど
C#は別になくてもどうとでもなるからなあ
74:デフォルトの名無しさん
09/02/11 18:26:46
>>71
thx
和書を見限る線引きが出来た。
やっぱ本はあった方が良いよ。他人と話すときに妥協点としてお互い満足できる。
好きでやってて動けば良いじゃ、可哀想。
問題は俺が、洋書は厨二病時代にFIRST BLOOD1冊読んだだけということなのだがなw
75:デフォルトの名無しさん
09/02/11 19:47:04
「CLR via C#」 (邦題:プログラミング .NET Framework) は、C#使いならEffective C++並に必読といっていいぞ。
邦題のタイトルのせいでスルーされがちだけど。
76:デフォルトの名無しさん
09/02/11 19:58:46
>>75
URLリンク(www.amazon.co.jp)
ref=sr_1_1?ie=UTF8&s=books&qid=1234349867&sr=1-1
これ?
77:デフォルトの名無しさん
09/02/11 20:02:54
>>76
URLリンク(www.amazon.com)
これに対応する物だろうけど、MS日本法人はもうちょっと考えたほうが
いいよな。Amazon自体のデザインは日米共通だが、笑っちゃうくらい
印象が違う。
78:デフォルトの名無しさん
09/02/11 20:05:51
>>77
どれ?w
79:デフォルトの名無しさん
09/02/11 20:07:44
>>76
それ
Amazonのリンク張る時は、この短いやつで十分
URLリンク(www.amazon.co.jp)
>>75
C#使いなら手元に置いて、しっかり読んでおきたい本だね。
80:デフォルトの名無しさん
09/02/11 20:13:21
>>75
第2版なら持ってる。
そんなにバリバリプログラミングするぞって本とは思えないな。
要らない事書いて恥じ書く前の、転ばぬ先の杖ってヤツ?
…改めて見てみると、かなり付箋や自分のメモ書きが入ってたんだがw
81:デフォルトの名無しさん
09/02/11 20:17:39
>>79
GJ
ん〜買おうかな
迷うぜ
82:デフォルトの名無しさん
09/02/11 20:20:11
Amazonのカスタマーレビューの投稿数からして、日本と米国じゃ圧倒的な差だな
日本は所詮プログラミング後進国ということか・・・
83:デフォルトの名無しさん
09/02/11 20:30:55
まー 古い本だから安く手に入ったり、譲って貰えたりするんでないかな?
古いからジェネリックとか無いけど、
多分ジェネリックを含む新しい本が今後出ても、
その本にはこれと同じ内容の章を割くことになる。
(逆にその本がILコードの都合にまで言及してくれるかは解らん)
84:デフォルトの名無しさん
09/02/11 20:32:47
ジェネリックは載ってるよ。
85:デフォルトの名無しさん
09/02/11 20:36:48
ごめん。
古いから載ってなかった物がなんかあったような気がするが、覚えとらん。
言い訳にならんが、一昨年の2月に読んでたんで。
86:デフォルトの名無しさん
09/02/11 20:45:27
>>85
うん。原書の第2版は2006年に出たらしいから、.
NET Framework 2.0 までの記述になっているので、それ以降のことは載ってない。
でもジェネリックは2.0では既に導入されているから載ってるよ。
はやく3版出ないかな
87:デフォルトの名無しさん
09/02/11 20:57:19
Essential.NETのことも忘れないで下さい(´・ω・`)
88:デフォルトの名無しさん
09/02/11 22:52:36
>>87
それ日本語版ある?
CLR via C#は買いたいな
89:デフォルトの名無しさん
09/02/11 22:58:14
というか、C#や.netは今後も残るのかな
.netそのものがどうなるか不安だし、言語としてもVBやC++/CLIと比較したらC#はマイナーだし、
なんか漠然とした不安を感じてしまう
だから、いつまでもC#の高い本が買えない 悪い循環になってるorz
90:デフォルトの名無しさん
09/02/11 23:02:22
C++/CLIと比較ww
91:デフォルトの名無しさん
09/02/11 23:05:48
C#>>>VB>>>>>>>越えられない壁>>>>>>C++/CLI
って感じだな。俺の周りでいうと。
92:デフォルトの名無しさん
09/02/11 23:06:30
米のamazon.comだと日本で高い洋書も結構安かったりするんだけど(特に中古)、
自分の住所の英語表記に自信がない(w)のと、送料が不明確なんでずっと買うの
躊躇してるんだよなあ。
実際米のamazon.comで買ってる人いたら送料どのぐらいか教えてくれない?
93:デフォルトの名無しさん
09/02/11 23:11:48
言語としてC++は残ってるからなCLIはその拡張版なだけだし
ユーザ数はVB>C++>C#だし、消えるとしたらC#が真っ先に消えるんじゃないか?
94:デフォルトの名無しさん
09/02/11 23:12:58
>>89
というか何年前から来た人ですか
95:デフォルトの名無しさん
09/02/11 23:15:16
確かにどの現場にいってもC#で開発してるところは少ない
無くならないかもしれないが死に体であることには変わりがないな
少なくとも俺の周りでは
96:デフォルトの名無しさん
09/02/11 23:15:34
>>93
そう思うなら、VBでもC++/CLIでも使えばいいじゃん。
97:デフォルトの名無しさん
09/02/11 23:17:50
すくなくともC++/CLIだけはありえない
それだけは断言できる
98:デフォルトの名無しさん
09/02/11 23:20:58
>>97
なんで?
99:デフォルトの名無しさん
09/02/11 23:23:00
俺もないと思う。.NET のメリットである、「お気楽コーディング」ができないし。
情報も少ないしね。
100:デフォルトの名無しさん
09/02/11 23:25:10
C++/CLIはなくなっても、C++は残るからなぁ
101:デフォルトの名無しさん
09/02/11 23:27:30
C++ じゃないとダメな分野は依然としてあるからね。
102:デフォルトの名無しさん
09/02/11 23:32:04
C++にはC++にしかできないことをやらせるというのがMSの方針
だから間違ってもC++/CLIは主役にならない
103:デフォルトの名無しさん
09/02/11 23:34:51
となると、かつてVB6でクライアントを開発してたようなシステムは、
まさかVB6ってわけでもないだろうから、.netでVBで開発してるのかな?
104:デフォルトの名無しさん
09/02/11 23:35:12
VC++のカバーして他分野はあんまり侵食してない。
VC++と旧VBの間をカバーしてたDelphiやC++Builderといったあたりが弾き出された感じだな。
105:デフォルトの名無しさん
09/02/11 23:37:16
2chでそんな公然の秘密みたいな話されてもな。
一人で仕事して、言語の移り変わりを心配してる人がそんなに沢山いるのかな?
極個人的に、数年前に関数型言語への乗り換えに失敗したので、
Boostのlambda系をやろうと思ったら、
C#ってやつで似たような事をやってた。 現在に至る。
一万円で1日遊べればいいので、本代はペイできたと思う。
106:デフォルトの名無しさん
09/02/11 23:37:50
主役はBasicだから主役には成らないが脇役から外れることもないんじゃない?
ならC++を学んでC++でFrameworkを使うという選択肢は重要な選択肢
107:デフォルトの名無しさん
09/02/11 23:39:49
主役は Basic って何の話?
VB6 まで、MS のファーストランゲージは VB だったけど、今は C# に変わったよ。
108:デフォルトの名無しさん
09/02/11 23:42:12
>>106
だから奴らは、継承を見ると避難して、switchを沢山使うんだな!
109:デフォルトの名無しさん
09/02/11 23:43:50
>>107
今もVBがメインストリームで、C#はマイナーだろ
110:デフォルトの名無しさん
09/02/11 23:46:13
こういっちゃなんだが C#er は C++ からの人も多い
まぁそういう人らすら大抵既存資産流用とか以外で C++/CLI を
使いたがらないわけで押して知るべしっていうか
111:デフォルトの名無しさん
09/02/11 23:47:52
まともなプログラマなら両方使える。たいした差はないだろうに。
使いこなすのに10の労力が必要だとして、
クラスライブラリの理解5、IDEの操作3、言語2くらいだからね。
どうでもいいよ。
112:デフォルトの名無しさん
09/02/11 23:51:02
C++/CLIはともかく,C#できるのにVBできないのはもったいない
1時間触れば使えるぞ
113:デフォルトの名無しさん
09/02/11 23:52:44
F#やbooもよろしく
114:デフォルトの名無しさん
09/02/12 00:03:57
今のVBって今のC#のサブセットにしか見えないんだが、何か違うところある?
構文とキーワード以外で。Variant型ってまだあるんだっけ?
115:デフォルトの名無しさん
09/02/12 00:05:17
わりとC++/CLIに戻る価値があるって言ってる人もおおいじゃん
アレはガゼってこと?
C++: .NET Framework プログラミング最良の言語
URLリンク(msdn.microsoft.com)
いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
URLリンク(www.atmarkit.co.jp)
C++/CLIはC#を凌駕するかも知れない…… usingステートメント不要のDisposeメソッド呼び出しの衝撃
URLリンク(mag.autumn.org)
本当は凄いC++!? プログラム比較論 C++ vs C#, Java, Visual Basic
URLリンク(mag.autumn.org)
116:デフォルトの名無しさん
09/02/12 00:08:42
>>115
無知なので申し訳ないが、簡単な質問なので教えてくれ。
テンプレート有りのライブラリを使った後に、idasm使った事ある?
それとも、あの汚いコードはJITが消化してくれるのか?
117:デフォルトの名無しさん
09/02/12 00:08:47
>>115
多くの記事がVS2005つまり.NET2.0リリース直後じゃないかな。
新製品のことは悪くは書かない。つまりそういうこと。
118:デフォルトの名無しさん
09/02/12 00:12:19
それ川ま(ry。
いやあの人の記事嫌いじゃないというかむしろ好きだけどw
119:デフォルトの名無しさん
09/02/12 00:12:22
>>116
それManaged拡張C++じゃね?
120:デフォルトの名無しさん
09/02/12 00:12:47
>>114
VariantはObject型として実装されてる
メンバ呼び出しは全部リフレクションを使った遅延バインディング
>>115
出たばかりのころは騒がれてたね
C++/CLIとC#を両方ともちゃんと使った上でC++/CLIマンセーしてる奴なんて今時いないよ
121:デフォルトの名無しさん
09/02/12 00:13:45
>>114
書き方以上の違いがあるのはインターフェイスの扱いと、
あとOption Strict Offができるぐらいかね。
たしかにC#でしかできないことの方が逆よりずっと多いから、その意味では
サブセット的存在かもしれん。
122:デフォルトの名無しさん
09/02/12 00:14:15
>>114
クエリ式がC#より充実しているとか、VB6時代の暗黙のインスタンス化復活とかかな。
名前付き引数・デフォルト引数はC# 4.0で入るんだよね。
123:デフォルトの名無しさん
09/02/12 00:15:27
んで、結局、今の開発案件はVBとC#のどっちが多いのかな
124:デフォルトの名無しさん
09/02/12 00:15:58
>>115
Managed C++ → C++/CLI は大進化と言える。
Managed C++ はカオスだったなぁ・・。
125:デフォルトの名無しさん
09/02/12 00:17:54
CreateObject とかは楽だね。
126:デフォルトの名無しさん
09/02/12 00:19:04
サブセットというより機能制限により簡易化と捉えるべきだろ
それこそ、昨日のintとuintの会話と同じ
127:デフォルトの名無しさん
09/02/12 00:26:03
どっちが複雑かということならレガシー機能やダメな子のための機能が満載のVBが圧勝だろ
次のバージョンでC#でもVariantみたいなことができるようになるけど,
必要だから使うのと,わかってないのをごまかすために使うのは違う
128:デフォルトの名無しさん
09/02/12 00:29:26
結局、VBユーザが流れ込んでC#の良いところがなくなっていくわけね
言語仕様そのものもVBユーザごのみに変わっていきそうだな
129:デフォルトの名無しさん
09/02/12 00:33:06
ぜんぜんわかってないやつがいます。
130:デフォルトの名無しさん
09/02/12 00:35:30
あれは要するに DLR 対応なんだけど。
C# 4.0 に関して、どうして必要か、どういう風に導入するかとい
われたら、ヘジのプレゼン見れば納得すると思うんだけど、
なんか伝聞でへんな風に伝わっていっている気がする・・・
131:デフォルトの名無しさん
09/02/12 00:38:34
また、そうやって荒れる原因になることをいう
C#がVB化するという意味じゃなくて、造詣に深くなくても使えてしまうから、
結果的にVB化するということだよ
VBみたいな言語の仕様での曖昧化を許すということでなく、
結果的に機能について曖昧なままユーザが使用し続けるということさ。
でも本質的には言語のVB化には変わりがないと思うよ
132:デフォルトの名無しさん
09/02/12 00:39:31
Variantとして使えるのも事実だけどな
COM Interopの強化も合わせて,C#4.0になれば
今までVBのほうがやりやすいと言われていたようなことが無くなって
完全にVBと縁を切れるよ
133:デフォルトの名無しさん
09/02/12 00:45:10
>>132
そうなんだ。
ついでにVBのWithEventsとメソッド内のフィールド(Staticで宣言された
ローカル変数)も欲しい。
134:デフォルトの名無しさん
09/02/12 00:54:24
Variantとして使う奴が同じグループにいたら全部書き直させるわ
135:デフォルトの名無しさん
09/02/12 13:59:21
JavaからC#に移行してきました。
Javaの場合はget/setメソッドでメンバー変数の公開をしていましたが、
C#ではプロパティー機能が存在していますのでこちらを使用しております。
プロパティーを使用していますが使い方としてはget/setメソッドと同様の
使い方しかしてないので、なぜこの仕様が実装されたのか理解できていません。
もしよろしければ理由などについて解説していただけませんでしょうか。
面倒でしたら参考URLをいただければそちらで勉強したいと思います。
136:デフォルトの名無しさん
09/02/12 14:06:20
>>135
参考URL
URLリンク(blog.inomata.lolipop.jp)
137:デフォルトの名無しさん
09/02/12 14:46:56
>>135
URLリンク(www.atmarkit.co.jp)
「あたかも公開しているかのように振舞う使い方」ができるからでは?
138:デフォルトの名無しさん
09/02/12 15:39:05
単にタイプ数が減るからだろ
139:デフォルトの名無しさん
09/02/12 16:01:24
>>136
>>137
・呼び出しコーディング非効率の改善
・リフレクションを使うにあたっての非効率の改善
この2点を解消しているってことなのでしょうか?
「あたかも公開しているかのように振舞う使い方」は、
呼び出しコーディング非効率の改善と捕らえてよいのかな・・・。
140:デフォルトの名無しさん
09/02/12 16:09:17
リフレクションを使って見るとわかるけれど、プロパティーはフィールド(変数)とも
メソッドとも区別されている。概念として言語レベルでサポートされている。それが
利点の全て。高級言語なのだから。
get_foo, set_fooだと、あるパラメタを取得、設定するメソッドである事をプログラマが
名前で示す単なる慣習に過ぎないけれど、C#ではプロパティという概念によって取得、
設定という行為を特別扱いしている。つまり、get, setメソッドという慣習の事をJAVA言語
は``知らない''けれど、JAVAプログラマは``知って''いた。つまりJAVAプログラマも無意識
にプロパティという概念を持っていたわけ。しかしその概念をJAVAは``知らなかった''。
一方でプロパティという概念をC#は``知っている''。たとえば、あるクラスが持っている
プロパティの一覧を取得するなんて事もリフレクションによって可能。プログラマが扱って
いる概念を言語がサポートしているのは、できる事が増えるわけじゃないけど、高級言語では
素直に喜ぶべき事。それだけ構造性が増すのだから。
まとめると、JAVAでも同じ事を``プログラマが''やっていたんだから、``言語が''同じ事を
やってくれるのを素直に喜べば良い。新しい事ができるわけではないから、使い方はJAVA
と同様で全然良い。ぶっちゃけ、get_foo, set_booとタイプミスしなくて済む機能くらいの
認識でも良い。
141:デフォルトの名無しさん
09/02/12 16:12:24
追記:get, setの中で取得/設定とは言い難い処理まで書けてしまうという問題点はJAVAと同じ。
ただし、C#というか.NETではむしろ逆にプロパティの設定に伴う副作用を積極的に活用する傾向
がある。時々UI関係で面白い事例に出くわす。たとえば、フォームのClientSizeを設定すると
フォームのサイズがClientSizeに合わせて調節されるので、一度、フォームのサイズがおかしく
なるバグを修正するためにthis.ClientSize=this.ClientSizeという字面上は超怪しいコードを書いた
事がある。(とあるツールのアドイン開発で、ロード側の問題なので対症療法するしかなかった)
でも、get, setの副作用は標準ライブラリ以外では濫用すべきではないと思う。そいういう意味
では、JAVAのget_foo, set_fooと本当に同じで良い。自動プロパティなんてのも実装されたし
活用してみたらどうだろう?
142:135
09/02/12 17:34:12
>>140-141
判りやすい説明感謝します。
これからは積極的にプロパティーを使って生きたいと思います!
143:デフォルトの名無しさん
09/02/12 19:56:47
プロパティに関しては否定的な意見もあるけどね。
以下は プログラミング.NET Framework (Jeffrey Richter著, Microsoft Press出版) から
あくまで参考程度に、こういう見解もあるということで。
9.1.1 プロパティを賢く設計する
個人的には、筆者はプロパティが好きではありません。Microsoft.NET Framework
やプログラミング言語でのサポートがなければよかったと思っています。理由は、
プロパティはメソッドであるのにフィールドのように見えるからです。この問題は
大きな混乱を招いてきています。プログラマがフィールドにアクセスしているコードを
見て仮定してしまうことが、プロパティにおいては誤っていることがあります。例えば、
次のようなことです。
・プロパティは読み取り専用または書き込み専用にできますが、
フィールドは常に読み書きできます。プロパティを定義するときはgetとset
のアクセサメソッドを両方提供するのが最善策です。
・プロパティのメソッドは例外をスローすることがあります。
フィールドは例外をスローしません。
・プロパティはメソッドのoutやrefの引数には渡せません。フィールドは渡せます。
・プロパティのメソッドは実行に長い時間がかかることがありますが、フィールドへの
アクセスはいつもすぐに実行が完了します。プロパティを利用する一般的な理由は、
スレッドの同期を取ることです。これはスレッドを永遠に止めてしまうかもしれない
ことを意味します。したがって、スレッドの同期が必要な時にプロパティを使うべきでは
ありません。このような状況ではメソッドを利用するほうが好ましいでしょう。また、
クラスがリモートからアクセスできる(たとえばクラスがSystem.MarshalByRefObjectから
派生している)場合、プロパティメソッドの呼び出しはとても遅くなることがあります。
したがって、プロパティよりメソッドの方が好ましいでしょう。筆者の私見ですが、
MarshalByRefObjectから派生しているクラスではプロパティは使うべきではありません。
(続く)
144:デフォルトの名無しさん
09/02/12 19:57:31
(続き)
・続けて繰り返し呼び出された場合、プロパティは毎回異なる値を返す可能性がありますが、
フィールドは常に同じ値を返します。System.DateTimeクラスにはNowという読み取り専用の
クラスがあります。このプロパティは現在の日付と時間を返すため、呼び出されるたびに
異なる値を返します。この実装は誤りで、MicrosoftでもNowをプロパティではなくメソッドに
直せるものなら直したいと考えています。
・プロパティメソッドは副作用を持つ場合がありますが、フィールドへのアクセスには
そのようなことはありません。言い換えると、型のユーザーがさまざまなプロパティに
値を任意の順序で設定できて、型の動作に違いがでないようにすべきだということです。
・プロパティメソッドは追加のメモリを必要とするか、オブジェクトの状態の一部では
ない何かへの参照を返して、そのオブジェクトを操作しても元のオブジェクトには
何の影響もない場合があります。フィールドは常にオブジェクトの状態の一部であることが
保証されているオブジェクトへの参照を返します。コピーを返すようなプロパティを利用すると
開発者は混乱します。また、このような仕様がドキュメント化されていないこともあります。
プロパティは使われすぎているというのが筆者の懸念です。プロパティとフィールドの違いを
一覧すれば、プロパティを定義する方が使いやすく、かつ開発者の混乱を招かないパターンは
非常に少ないことに気づくでしょう。プロパティによって得られるのは、少々単純化された構文
だけです。パフォーマンスの向上もない上に、コードは読みづらくなります。もし筆者が、.NET
Frameworkとコンパイラの設計に関わっていたら、プロパティを提供することはなかったでしょう。
代わりに、開発者にGetXxxやSetXxxというメソッドを必要に応じて定義させるようにしていたこと
でしょう。コンパイラが何か特殊な、単純化された構文でこれらのメソッドを呼び出せるように
したいなら、そうすればよかったのです。ですが、フィールドアクセスとは異なる構文を使って
欲しいと思います。開発者が何をしているのか(つまりメソッドを呼び出しているということを)
しっかり認識できる構文ということです。
145:デフォルトの名無しさん
09/02/12 19:58:19
public class MyGenericClass<T> where T:(Intとかfloat){
T example(T a,T b){
return a * b;
}
}
operator*が使える型を取るときwhereにはなんと書けばいいのでしょう?
146:デフォルトの名無しさん
09/02/12 20:00:13
>>145
今のところできません
147:145
09/02/12 20:08:29
できませんか。コピペでbyte,short,ushot,,,,ulongつくります
148:デフォルトの名無しさん
09/02/12 20:41:14
演算子の実装を表すインタフェースが欲しいってのは常々議論されているけれど、
C#4.0でも解決されないみたいだね。
149:デフォルトの名無しさん
09/02/12 20:49:24
ExpressionTree使う
150:デフォルトの名無しさん
09/02/12 21:14:47
>>144
つまりWPFのSetValue(オブジェクト、型.依存プロパティ)はグッドという事か。
これはこれで超冗長だけど、まあロジカルではある。しかも添付プロパティなんて
芸当も可。
151:デフォルトの名無しさん
09/02/12 21:39:27
>>148
よく知らずに突っ込むけど、そんな議論あるの?
演算子って普通staticじゃないか
152:デフォルトの名無しさん
09/02/12 22:05:41
インタフェースというより、ジェネリック制約が欲しいという話のことが多い気がする。
いずれにせよ、目的は>>145をどうにかしたいということなんだけど。
153:デフォルトの名無しさん
09/02/12 22:12:27
>>151
いやだから>>145みたいなケースで型制約を
where T: Imultiplicative
とか書ければ万事オッケー、みたいな。別に演算子の実装をインタフェースの実装でやりたい
わけじゃなくて、演算子の実装を表す型制約があって欲しいという事。だから
where T: multiplicative
って書けて欲しい、という話とも言える。
「C# 四則演算 ジェネリック」でググると、MSDNフォーラムとかわんくま同盟の人たち
とかの議論がわんさか出てきます。
>>149はどういう風にやるの?ExprssionTree詳しくないのでちょっとイメージできないんだけど。
154:デフォルトの名無しさん
09/02/12 22:34:10
>>151
ここの過去スレでも出てきてるね
URLリンク(www.23ch.info)
他にもあったような
155:デフォルトの名無しさん
09/02/12 22:38:44
>>151
ここの過去スレでもやってた
URLリンク(www.23ch.info)
156:デフォルトの名無しさん
09/02/12 22:40:03
ごめんね
>>154-155は書き込み失敗したかと思った
157:デフォルトの名無しさん
09/02/12 22:53:25
>>153
T example(T a, T b)
{
158:デフォルトの名無しさん
09/02/12 22:53:58
ミスったので帰ります
159:デフォルトの名無しさん
09/02/12 23:16:17
>>154
普通に2chのURLはってくれお
スレリンク(tech板:295-312番)
160:デフォルトの名無しさん
09/02/12 23:40:37
ごめんね
次からそうする
161:デフォルトの名無しさん
09/02/13 00:17:39
>>143
プロパティ否定するのなんて、初期のJava信者だけだろ。
そのJavaにもプロパティ実装されて、否定してた連中涙目。
162:デフォルトの名無しさん
09/02/13 00:22:42
java7のプロパティもクロージャもキャンセルのふいんき(なぜかr)らしい。
163:デフォルトの名無しさん
09/02/13 00:34:30
プロパティは属性だから、それを求めるのに特定の機能が使いまわされやすいからな
string mText;
public bool IsEmpty
{ get { return this.GetIsEmpty(this.mText); } }
protected bool GetIsEmpty(string text)
{ return text == ""; }
みたいにGetIsEmptyを基底クラスにまとめて置けば、
継承先ではメンバ変数を渡すプロパティを書けばいいだけで楽。
164:デフォルトの名無しさん
09/02/13 01:08:42
>>153
Expression Tree使うとこういうのが簡単に作れる
static class GenericCalculator<T> {
private static readonly Func<T, T, T> add;
static GenericCalculator() {
var left = Expression.Parameter(typeof(T), "left");
var right = Expression.Parameter(typeof(T), "left");
add = Expression.Lambda<Func<T, T, T>>(Expression.Add(left, right)).Compile();
}
public static T Add(T left, T right) { return add(left, right); }
//他の演算子も同様
}
165:デフォルトの名無しさん
09/02/13 03:22:34
153です。
>>164
add=(Func<T,T,T>)((l,r)=>(l+r));って書くのと同じじゃん、と一瞬思ったけど、
Compile()は当然実行時評価なのかー!。
型制約が欲しい、というのとは話が違くて、足し算ができないと実行時に例外が投げられるのね。
勉強になった。
それなら、CodeDOMでも良いかな?
この手の議論って型制約の話とは別にダックタイピングができればなあ、って話にもなりやすい
けれど、それを無理やりやる方法があるって事だね。
166:デフォルトの名無しさん
09/02/13 04:34:58
書いてみた。ごめん、164を使ってくれ。今は反省している。
class Multiplier<T>
{
public T Mult(T l, T r)
{
string nameOfT = typeof(T).FullName;
string assemblyOfT = typeof(T).Assembly.ManifestModule.FullyQualifiedName;
CompilerResults cr = null;
167:デフォルトの名無しさん
09/02/13 04:35:44
続き
using (CodeDomProvider provider
= new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } })) {
CompilerParameters cp = new CompilerParameters() {
GenerateInMemory = true
};
cp.ReferencedAssemblies.AddRange(new string[] { "System.Core.dll", "mscorlib.dll", assemblyOfT });
string className = "Multiplier_" + nameOfT.Replace('.', '_');
string namespaceName="GenericTest";
string qualifiedClassName = namespaceName + "." + className;
string source = "namespace " +namespaceName+"{ public class " + className + "{public " + nameOfT + " Mult(" + nameOfT + " l, " + nameOfT + @" r){return l*r;}}}";
168:デフォルトの名無しさん
09/02/13 04:36:29
さらに続き
cr = provider.CompileAssemblyFromSource(cp, source);
if (cr.Errors.HasErrors) {
throw new Exception(String.Join(Environment.NewLine, cr.Errors.OfType<CompilerError>().Select(e => e.ToString()).ToArray()));
}
Type typeOfMultiplier = cr.CompiledAssembly.GetType(qualifiedClassName);
Object multiplier = Activator.CreateInstance(typeOfMultiplier);
MethodInfo multiplierMethodMult = typeOfMultiplier.GetMethod("Mult");
return (T)multiplierMethodMult.Invoke(multiplier, new object[] { l, r });
}
}
}
169:デフォルトの名無しさん
09/02/13 06:08:29
同じ話題を
URLリンク(d.hatena.ne.jp)
で見つけたんだけど、ここに
------------------------------
.NET で動的に実行コードを生成する方法はいくつかあり,またその方法は増えつつあります.
* (.NET 1.0 以降)CodeDOM やコンパイラによる動的コンパイル
* (.NET 2.0 以降)Lightweight Code Generation (LCG)
* (.NET 3.5 以降?)Expression Tree による動的コンパイル
--------------------------------
とあるので、俺のCodeDOMの方法は一応.NET1.0でも使えるという利点はあるみたい。
あと、このサイトではExpression Treeはコードのセマンティクスをデータ構造として保持
するために用いる、という哲学が示されていて、著者的には直ちにExpression Treeをコンパイル
するような使い方はしっくりしないらしい。まあでも>>166-168を書くくらいなら>>164を
書くわな。
このサイトには>>164と同じ方針で作った演算子オーバロード付きの四則演算のジェネリック型
とそれを用いた複素数のジェネリック型のサンプルもある。この手の話って頻繁に繰り返されて
いるように見えるのでまとまった解決法はないと思っていたけれど、これはそのまま直ちに
利用可能だね。
夜中に目が覚めてしまったので色々書いてしまった。連投&長文すまない。
170:デフォルトの名無しさん
09/02/13 06:16:59
足し算のためにデリゲート呼び出すのもインターフェース越しにアクセスするのも
現実的ではないでしょう
171:デフォルトの名無しさん
09/02/13 07:58:44
そういう事書いてる奴誰かと思ったらやはりNyaruruか・・・
172:デフォルトの名無しさん
09/02/13 08:26:23
>>170
パフォーマンス的に?
C++のテンプレートみたいな「超高機能なマクロ」にしないと決めてる以上、
それはしょうがない。
>>171
しかも、他のMVPが「いまさら」盛り上がってる中、
NyaRuRu さんだけは「そういえば昔書いたけど」だし。
173:デフォルトの名無しさん
09/02/13 08:42:40
>>170
基本的な値型だけを対象にしたければ、素直に大量にオーバーロード書けば良いのでは?
まあその場合も型制約でOR論理を使いたい、ってな議論はできるけれど、興味深くはない。
174:デフォルトの名無しさん
09/02/13 08:50:03
>>173 みたいな方法も、
ソース冒頭に
using ValueType = System.Double;
とか書いておいて実装して、
このソースをコピって冒頭の1行書き換えるだけで可能だしね。
美しくはないけども、何とかならないレベルじゃない。
175:デフォルトの名無しさん
09/02/13 08:50:09
別にintと、あとdoubleがあれば十分じゃないかと思うけど
176:デフォルトの名無しさん
09/02/13 08:51:09
>>175
あとは BigInteger とか、実装してる人がいるなら Rational とかかな。
177:デフォルトの名無しさん
09/02/13 09:09:42
それこそ遅くて使いものにならないだろうけど
C#4.0ならdynamic使えばそのままleft + rightと書けるな
178:デフォルトの名無しさん
09/02/13 10:47:41
Nyaruruって大学生だっけ?
ガキに「さん」付けか・・・
179:デフォルトの名無しさん
09/02/13 11:12:29
能力も無いのに自分の方が年上ってだけで
見下した態度をとるのはみっともないぞ
180:デフォルトの名無しさん
09/02/13 12:58:20
Nyaruruって大学生だったのか
181:デフォルトの名無しさん
09/02/13 13:24:55
Nyaruruが大学生だったら俺プログラマやめるわ
182:デフォルトの名無しさん
09/02/13 14:26:16
なさけねー。
183:デフォルトの名無しさん
09/02/13 14:34:24
昔はC++を使っていて色々研究とかしてたけど・・・
いろんな言語使っている間に言語の濃い部分を積極的に学ばなくなってしまったな。
これは退化してるのかね・・・
184:デフォルトの名無しさん
09/02/13 14:38:49
羽根が短くなったのを退化ということもあれば進化ということもある。
185:デフォルトの名無しさん
09/02/13 15:26:43
低水準な所を濃いと言ってるならアセンブラかマシン語でもやれば?
186:デフォルトの名無しさん
09/02/13 15:47:23
誰もそんなこと言ってないと思うが
できるだけ楽に扱えるものを使って生産的なことをする人と楽に扱えるようにするために深い部分まで追及する人とどっちが優れてるとかないだろう
前者のが需要あるし
187:デフォルトの名無しさん
09/02/13 16:42:20
>>185
すでにアセンブラは68系と86系をあわせて6年くらいはやってましたよ。
188:デフォルトの名無しさん
09/02/13 16:46:24
ひよっこだな
189:デフォルトの名無しさん
09/02/13 16:49:26
甘い、甘すぎるよ。
俺なんて、C# を15年以上やってるけど、まだまだ力不足を感じてる・・・
190:デフォルトの名無しさん
09/02/13 16:52:11
俺なんてもう100年になるかな
191:デフォルトの名無しさん
09/02/13 17:38:48
紀元前からD言語を触ってるが、まだ完成しない
192:デフォルトの名無しさん
09/02/13 17:41:40
みんなたくましいなw
193:デフォルトの名無しさん
09/02/13 20:59:47
生まれて間もない猛者が、ここに質問してきた事もあったしw
194:デフォルトの名無しさん
09/02/13 21:35:55
>>177
ジェネリクスと同時に使うなら、dynamic よりも式木使い方がお勧め。
>>178
院生だろ。
あと、歳の上下で態度変えてたら見ず知らずの人と付き合いづらいよ。
195:デフォルトの名無しさん
09/02/13 22:23:41
ネット上で「君」とかつけて呼ぶの?
196:デフォルトの名無しさん
09/02/13 22:34:35
厳密にはC#の問題ではないかもしれないけど、ちょっとお助け願います。
Genericコレクション型のインスタンスをリモート処理時に参照渡しにするにはどうすれば良いでしょうか。
例えば、
class OtherSample : MarshalByRefObject {
List<int> intList;
}
というコードでは、OtherSampleは参照渡しですがintListは自動的にシリアル化され値渡しマーシャリングされてしまいます。
なので、アクセッサを付けてintListを取得しても、リモート化されたインスタンスの値を変更できません。
適宜 intList に対するメソッドをOtherSampleに追加するしかないのでしょうか。
197:デフォルトの名無しさん
09/02/13 23:55:43
メソッド作ってなんか変わる?
198:デフォルトの名無しさん
09/02/14 00:38:48
メソッド作ってから彼女もできるし、ギャンブルでも大当たりだしいいことづくしだよ
199:デフォルトの名無しさん
09/02/14 00:46:04
class OtherSample : MarshalByRefObject {
List<int> intList;
public void AddInt( int n ) {
intList.Add( n );
}
}
で AddInt を使えばプロキシを介して参照渡しの OtherSample のメソッドが実行される。
そうすっと、OtherSampleの参照 の intList に値が追加される。
200:デフォルトの名無しさん
09/02/14 10:13:33
株価ボード的なアプリを作ろうと思っているのですが質問させてください
FormLoad時に動的にLabelを3000個ぐらい生成してるのですが
起動に1〜2分ぐらいかかってしまいます。
何か良い方法はないでしょうか?
201:デフォルトの名無しさん
09/02/14 10:17:09
自分で描画しろよ(´・ω・`)
202:デフォルトの名無しさん
09/02/14 10:52:05
XNA使ってスプライトテキストで描画でもいいかも。
その場合はフォームとか使えないけどね。
203:デフォルトの名無しさん
09/02/14 11:01:13
GDIで十分じゃね
204:デフォルトの名無しさん
09/02/14 12:37:57
確かにGDIだけでも十分かな、ダブルバッファを有効にすればアニメーションもある程度滑らかだしね。
205:デフォルトの名無しさん
09/02/14 12:50:24
>200
Windows.Formsでコントロールを大量に作るとどうやってもそうなるよ。
そういう使い方ならWPFで同じことやれば結構スムーズに動きそうな気がする。
206:200
09/02/14 12:59:12
>>201-205
皆さん、どうもです。
VC++(MFC)で過去に作ったときは
CStatic の派生クラスを何個も作ってやってたので
Labelの派生クラスで何とかなるかと思ったら起動が遅くて・・・
ありがとうございました
207:デフォルトの名無しさん
09/02/14 13:03:09
そもそも3000個も表示するスペースがあるのか
一文字一個なのか
208:デフォルトの名無しさん
09/02/14 13:14:08
そりゃスクロールするんだろ…
209:デフォルトの名無しさん
09/02/14 13:23:13
ばらけた文字が集まったりとか盛大にアニメーションしたりして。
画面に表示される分だけプールから取得して再利用するようにすれば、
new()のコストかからないし、3000個も作らなくてすむんじゃない?
WPFでも詳しくはしらないけれど、スクロール可能な場合に画面に表示される部分だけ
子コントロールを生成するような仕組みがあったはず。ListViewとかだっけ?
210:デフォルトの名無しさん
09/02/14 13:28:06
それもバーチャンリストの場合だな
211:デフォルトの名無しさん
09/02/14 13:41:02
ウィンドウハンドルの上限って10000くらいじゃなかったっけ
そんな使い方してたらすぐ足りなく
212:デフォルトの名無しさん
09/02/14 13:43:02
.NET のラベルって、ウィンドウもってんだよな。
デスクトップヒープの関係もあるし、3000は多すぎだろ。
213:デフォルトの名無しさん
09/02/14 13:53:05
WPF なら確かにそういう問題ないけども読み込みに時間は
かかるわなぁ
214:デフォルトの名無しさん
09/02/14 13:53:50
いうほどかかんねえよ
215:200
09/02/14 14:29:58
>207
一画面だけで300銘柄(1銘柄辺り10要素)あるので
3000個必要なんですよね
画面サイズ的にはUXGAで余裕ありです。
データ更新時にデータを適当な形に処理して
Redrawする感じでVC++ではやってました。
216:デフォルトの名無しさん
09/02/14 14:51:40
URLリンク(www.woodensoldier.info)
これをReflector使ってソース出して動かせるようにしたいんですが
できる人いませんか?
217:デフォルトの名無しさん
09/02/14 14:53:43
何が知りたいの?
218:デフォルトの名無しさん
09/02/14 14:55:22
>>216
別に難読化されてるわけでもなく、逆アセできたけど?
何が問題なの?
219:デフォルトの名無しさん
09/02/14 14:58:07
フォームの形つくって、ソースをコピペして貼り付けてっても
エラーで出てしまうんです
220:デフォルトの名無しさん
09/02/14 15:00:00
エラーが出るとこ直していけばいいじゃん・・・
221:デフォルトの名無しさん
09/02/14 15:00:13
そうですか。あなたには無理ですね
222:デフォルトの名無しさん
09/02/14 15:00:23
まんま使えるとは限らんよ
ゴミ君
223:デフォルトの名無しさん
09/02/14 15:00:56
Reflector のプラグインで、.cs を吐いてくれるやつがあったな・・・
それ使えばいいんじゃね?
224:デフォルトの名無しさん
09/02/14 15:01:18
その上でソース作ってくれる人いませんか
225:デフォルトの名無しさん
09/02/14 15:02:55
いません。
226:デフォルトの名無しさん
09/02/14 15:03:24
>>223
kwsk!
227:デフォルトの名無しさん
09/02/14 15:06:15
ぐぐれ
228:デフォルトの名無しさん
09/02/14 15:07:37
なにが「kwsk!」だよw
それ質問する態度じゃねえじゃん
エロマンガの作者名じゃねえんだから、もうちょっと考えろよ
229:赤西仁
09/02/14 15:32:19
1年間悩んでます。お力をお貸しください。
アークザラッドUというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、
かれこれ1年ほど経ちますが、なかなかうまくいきません。
*もちろん抽出した画像は個人範囲内で利用するつもりです。
◆試してダメだったこと
ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。
(ちなみに他のゲームはほとんど抽出可能)
◆教わったこと
・アークザラッドUは独自の画像形式を使っているから抽出できない。
・PS上で表示されてるということは絶対に摘出はできるはず。
◆抽出は不可能ではないということを知ったとき
2ちゃんねるで質問したところ、
ある方が実際にキャラクターの歩行画像を抽出して
私が立てたスレにアップしてくださいました。
スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。
230:デフォルトの名無しさん
09/02/14 15:35:43
アークザラッドII って、C# で作られてるの?
そうでなきゃ、スレ違い、ってことで。
231:デフォルトの名無しさん
09/02/14 17:18:47
>>223
ずっと探してるけど見つかりません
お願いします・・・
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5361日前に更新/228 KB
担当:undef