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


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

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



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

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

前スレ
ふらっとC#,C♯,C#(初心者用) Part45 (実質46)
pc12.2ch.net/test/read.cgi/tech/1255658236/

153 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 00:11:53 ]
Accessの優位点ってプログラムレスでお手軽にDBアプリができる点かね。
それを言うならもうとっくにお亡くなりになったロータスのAproachは
もっとお手軽だった気もしたけど。

154 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 00:15:44 ]
Accessはなんとなく適当に作ってもなんとなく動いちゃうんだよな
それはそれで楽っちゃ楽なんだけれど、きっちり作り込もうとすると融通が利かなかったり
VBAであれこれ書かなきゃいけなかったりするのよねぇ


155 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 00:16:20 ]
荒しだろ。しつけぇ

156 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 00:33:06 ]
だがAccessの領域はSalesforceにとってかわりつつある

157 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 00:35:52 ]
throw new ArashiException();

try{
通常書き込み
}

catch(ArashiException){
むし
}

158 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 01:00:54 ]
>>156
salesforce は表で編集するの苦手だからなぁ
1レコードづつフォーム開いて編集するの限定なら代わりになるが・・・

159 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 01:37:52 ]
何を作るのに十分なんだろうな・・・
マルチスレッドも使えないし


160 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:18:18 ]
内部的にどういう動きしてるかしらないけどフォームやボタンのMouseClickイベントとかって

while(true){
if (マウスがクリックされてる){
なんかする
}
0.0001秒待機する
}

みたいな処理をやってるの?
裏では大量のwhile分がマウスやキーボードのチェックを行ってるの?

161 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:37:27 ]
うん



162 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 04:38:56 ]
("{0:hh:mm:ss.ffff}",DateTime.Now)
hはhour、mはminute、sはsecondをあらわすのはいいとして
ミリ秒をあらわすfって何の略よ?

163 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 04:49:20 ]
few

164 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 07:44:18 ]
fractionだろ
ミリ秒ではなく秒の端数

165 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 16:06:23 ]
.net Framework Compactには画像を回転させる関数がないので
homepage2.nifty.com/tsugu/sotuken/rotation/
のサンプルをC#で動かすためにいじってみましたが

最後のサンプルで計算領域がはずれてしまい、画像が大きくゆがむ現象で困ってます
アルゴリズムのどこかがコンパイルは通るもののCとC#の言語仕様で
うまくいかないようです

ちなみに最初に出てくるサンプルはちょっと変更を加えると動きました
高速化ってのを試したいんですが・・・


166 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 21:40:41 ]
わかるわけないだろ
うまくいかないコードを晒せ

167 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:04:33 ]
では・・・
//画像回転
public void MapRotat(double A, int DstCX, int DstCY, int SrcCX, int SrcCY)
{

Bitmap BmpBufRot = new Bitmap(BmpSource.Width, BmpSource.Height);

//homepage2.nifty.com/tsugu/sotuken/rotation/
// SrcCX, SrcCY : 入力画像の中心座標
// DstCX, DstCY : 出力画像の中心座標
// : 入力画像の幅高さ
int SrcWidth = BmpSource.Width;
int SrcHeight = BmpSource.Height;
// : 出力画像の幅高さ
int DstWidth = BmpBufRot.Width;
int DstHeight = BmpBufRot.Height;
// pSrcImg : 入力画像ポインタ
// pDstImg : 出力画像ポインタ
// A : 回転角度(ラジアン)
// PI : 円周率(3.14159265358979323846)


int int_sin; //SIN値に1024を掛けて整数にした値
int int_cos; //COS値に1024を掛けて整数にした値
int x1, y1; //入力画像内の座標
int x2, y2; //出力画像内の座標
int x1_mult, y1_mult; //入力画像内走査用変数(1024を掛けた値)
int StX, StY; //入力画像内の走査開始点座標
int DXX, DXY; //入力画像走査時のXループ内の増分
int DYX, DYY; //入力画像走査時のYループ内の増分



168 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:06:50 ]
//SIN,COS値を整数に変換
int_sin = (int)(Math.Sin(A) * 1024);
int_cos = (int)(Math.Cos(A) * 1024);
//走査開始点の計算
StX = int_cos * (-DstCX) - int_sin * (-DstCY) + (SrcCY << 10);
StY = int_sin * (-DstCX) + int_cos * (-DstCY) + (SrcCY << 10);
//Xループ内の増分を計算
DXX = int_cos;
DXY = int_sin;
//Yループ内の増分を計算
DYX = int_sin;
DYY = int_cos;


169 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:07:39 ]
//回転処理メインルーチン
//出力画像の座標でループを行う
for (y2 = 0; y2 < DstHeight; y2++)
{
//走査用変数の初期化
x1_mult = StX + y2 * DYX;
y1_mult = StY + y2 * DYY;
//走査用変数にXループ内の増分値を加算
for (x2 = 0; x2 < DstWidth; x2++, x1_mult += DXX, y1_mult += DXY)
{
//走査用変数から入力画像内の座標を取得
x1 = x1_mult >> 10;
y1 = y1_mult >> 10;
//入力画像内の座標が有効な値ならコピーを行う
if (x1 >= 0 && x1 < SrcWidth && y1 >= 0 && y1 < SrcHeight)
{
BmpBufRot.SetPixel(y2, x2, BmpSource.GetPixel(y1, x1));
}
}
}
Graphics g = Graphics.FromImage(BmpBuf);
g.Clear(Color.Blue);
int x = (BmpBuf.Width - BmpBufRot.Width) / 2;
int y = (BmpBuf.Height - BmpBufRot.Height) / 2;
g.DrawImage(BmpBufRot, x, y);
g.Dispose();
this.Image = BmpBuf;
}

170 名前:rrr mailto:sage [2009/11/06(金) 23:25:53 ]
rrr

171 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 00:29:27 ]
あまり関係ないと思われるが
× StX = int_cos * (-DstCX) - int_sin * (-DstCY) + (SrcCY << 10);
○ StX = int_cos * (-DstCX) - int_sin * (-DstCY) + (SrcCX << 10);




172 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 00:38:58 ]
いや、「画像が大きくゆがむ現象」はともかく、「計算領域がはずれてしまい」は
こいつが原因くさいか。

173 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:43:17 ]
ありがとうございます
変更してテストしてみました
やはり現象はほぼ同じです

180度回転はうまくいきます
90度回転は (x1 >= 0 && x1 < SrcWidth && y1 >= 0 && y1 < SrcHeight)の領域に入ってこないので
描画されません
中間の角度で描画されない部分とゆがむ部分がでてきます
ピクセルの位置の増分を決定している変数

x1_mult
y1_mult

が適切でないっぽいですね
しかし理屈が理解できてないのでどこが間違いかわかりません

174 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 11:54:32 ]
訂正しても現象がほぼ同じなことの原因

最初から回転を考えててコピー元、コピー先ともに正方形にしてたからです
たまたまですね

175 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 12:15:03 ]
C#とかの仕様の問題じゃなく、単にアルゴリズムの間違いだと思う。
ネタ元ページの走査開始点の式に出力画像の幅高さが出てこないのが変。
アイデアとしては、図の通り斜めにコピーするのは納得できる。
でも、コピー先の領域(出力画像の幅高さ)を適用しないと、コピー元での走査
開始点座標が求まるはずが無い。
幾何学的意味は、回転中心を元先で合わせて、先領域を回転させて先領域の
(0,0)が該当する位置を、元領域での走査開始点とするから。
よって、式が疑わしい。

回転の中心と画像の中心をごっちゃにして間違ってるんじゃないかなコレ?
書かれているように画像の中心なら幅高さとは別に用意されてる意味がない。

176 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 12:31:00 ]
>>175
そうなんですか

じゃー動くやつであとはLockBitsして高速化してみます

177 名前:softbank221086123053.bbtec.net mailto:sage [2009/11/07(土) 13:47:07 ]
たとえば、string変数の
abc[def]ghi があるとして、
[と]の間にある文字列を取得する場合はどのように書けばいいのでしょう


178 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 13:49:58 ]
いや、回転中心も原点からの座標値だから正しい。175は勘違い。

179 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 13:52:18 ]
>>177
String#Substring メソッド

180 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 13:56:21 ]
>>177
Regex

181 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 14:18:07 ]
>>142
セダンの運転手を雇ってる人が一番エライ
Access使いだろうがC#使いだろうがただのしもべ



182 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 14:26:56 ]
はいw

183 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 14:36:22 ]
>>173
× int_sin = (int)(Math.Sin(A) * 1024);
× int_cos = (int)(Math.Cos(A) * 1024);
○ int_sin = -(int)(Math.Sin(-A) * 1024);
○ int_cos = (int)(Math.Cos(-A) * 1024);

× DYX = int_sin;
○ DYX = -int_sin;

× BmpBufRot.SetPixel(y2, x2, BmpSource.GetPixel(y1, x1));
○ BmpBufRot.SetPixel(x2, y2, BmpSource.GetPixel(x1, y1));

で動いた。

184 名前:中学生 mailto:sage [2009/11/07(土) 14:36:42 ]
じゃあセダンの運転手を雇っててACCESSとC#の使える俺が一番偉いんかったんや!!

185 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 15:02:55 ]
もっと面白い事言えんのかね

186 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 15:05:06 ]
名前欄に中学生とか書いちゃうような人に期待するだけ無駄

187 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 15:30:03 ]
>>183
うおおお 神! ばっちりでした!

188 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 15:49:36 ]
ちなみに>>171の変更は必要ですか?


189 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 16:21:54 ]
>>183
1つ目必要ないし

190 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 16:45:42 ]
>>188
必要。

>>189
ああっっ、いらんわ確かに。

191 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 17:15:24 ]
AxWindowsMediaPlayerを使い音楽ツールを作っているのですが、
プレイリストを作り順再生/ランダム再生を行おうと思い、
AxWMP.currentPlaylist.appendItem(newsong);
こうすれば追加は可能ですが、
何番目の曲をプレイリストから削除することや、
現在プレイリストに入ってる曲をリストボックスに表示する方法が分かりません。
プレイリストを配列で取得・・・できるようなメソッドはありませんよねぇ・・・



192 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 17:27:17 ]
SDK見ただけだけど
IWMPPlaylist.Item (VB and C#)
The Item property (the get_Item method in C#) gets an interface to the media item at the specified index.
とか
IWMPPlaylist.count (VB and C#)
The count property gets the number of media items in a playlist.
とか
IWMPPlaylist.removeItem (VB and C#)
The removeItem method removes the specified media item from the playlist.
とかあるけど、駄目なのか?

193 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:48:35 ]
>>189
ありがとうございます
>>190
了解です ありがとうございました

194 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:48:51 ]
Graphics

195 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:50:44 ]
お、やっと解除された。
>>173
モバイル環境で開発してるみたいだけど、PixtureBoxもGraphicsも使えるんだろ?
そしたら拡大だろうが回転だろうがその範囲で自由にできると思うんだけど。
なぜそれくらいでゴリゴリベタなバイナリを触ろうとするのかがよく分からないな。

196 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:22:53 ]
CompactFrameworkには回転もアフィン変換も無いんだよ

197 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:18:40 ]
RectangleFとかPointFとかfloat座標使えないし、コンストラクタのオーバーロードも
軒並みアウトで作ってからシコシコとプロパティ設定とかだしな。
まあしかし、手作り感がたまらないという。なんというかマゾヒズム?

198 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:43:07 ]
VisualStudioのc#で実行したら
binのDebutにexeができて
ビルドを選んだらReleaseにexeができるけど

ビルドで作られたexeとDebugのexeはなんか違いあるの?

199 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:49:54 ]
それは自分で設定する。最適化の有無とかDEBUG定数の定義とか。

200 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 23:03:37 ]
まあC#の場合は大した違いはない

201 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 06:31:04 ]
191です
AxWMPのプレイリスト機能を使うのではなく、
配列でプレイリストのかわりにURIを持ち、
PlayStateChangeイベントハンドラで
再生終了後、配列から次のURIを読むようにしているのですが、
axwmp.Ctlcontrols.stop();
axwmp.URL = SongsPlaylist[i].ToString();
axwmp.Ctlcontrols.play();
この最後のplayメソッドが働らいていないようです。
これはどうすれば良いでしょうか?



202 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 09:07:22 ]
BeginInvokeでplayの呼び出しを遅延させる

203 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 13:02:12 ]
>>202
ありがとうございます。
URIが送られてPlayStateChangeイベントが発生したからのようですね。
初歩的なことでした;ありがとうございました。

204 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:49:35 ]
VB、C#とやってるんですが、
次手を出すなら何が良いと思いますか?

205 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:54:52 ]
他の言語に手を出す前に、VB と C# を究めたら?

206 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:55:24 ]
何がやりたいかによるんじゃ?
.NETつながりでIronPython、、つまりPythonとかどうよ

207 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:55:35 ]
>>204
プログラミング言語はプログラムを作る道具であって、
それに手を出すこと自体に意味があるわけではないよ。

とはいえ異なるプログラミング言語に触れることで思考の引き出しは増えていくので、
暇があるときに他の言語を試してみるというのも悪い話ではない。

208 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 15:02:31 ]
繋がり重視ならIronPython。
引き出しを増やすならHaskellを勧める。

209 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 15:11:46 ]
色々触るのもいいけど、ひとつを極めるのも面白いと思う

210 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 15:49:13 ]
.NET Compact Frameworkネタでもうひとつお願いします
キーロックと画面を横にしたりするのを実装したいんですが
どうしたらいいんでしょうか?
さっきから探してるんですがヒントさえ見つかりません

211 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 15:55:48 ]
言語なんてどうせ手段なんだし極めるもなにもないような・・・
オブジェクト指向を極めたぞ!とかならまだしも。



212 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:08:07 ]
だよな
いかに優れたアプリケーションを作るかの方が大事だよ

213 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:14:38 ]
C#極めたってのがどのレベルを指すのかはわからんけど(言語仕様の把握??)
.NETを極めたぞ、とかならそれなりに意味があると思う。
それだけでも仕事取れるんじゃない?


214 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:15:18 ]
いやいや、例えば車にだって低回転時のトルクがどうとかステアリングがどうとか
車種によって特性があるじゃないか。

車なんてどうせ手段だし極めるもなにもないような・・・
運転を極めたぞ!とかならまだしも。

と、特定車のスレで言い放っているのと同じだぜ、それ。

215 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:15:26 ]
自分で言ってておかしいと思わないのかな
手段を極めることとは、すなわち生産性を高めることだろ

216 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:16:05 ]
>>211
>オブジェクト指向を極めたぞ!
すごく胡散臭さを感じるw

217 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:19:44 ]
極めるなんて言う程奥深いか?
生産性高めるのって言語に対する習熟より他の部分に依る部分の方が大きくない?


218 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:21:01 ]
極めるとか高校生が言いそうですね

219 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:21:34 ]
>>217
よくわかってないなら黙ってろカス
お前がC#の深さを全然知らんだけだろ

220 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:24:40 ]
C#の深さwwww

マジレスすると、VB、C# ってきたらあとはPython、Perl、Rubyあたりのスクリプト言語に慣れとくと
色々便利じゃないかね。

221 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:25:46 ]
言語を究めたって言われてもいまいちイメージできない
その言語つかって思い通りのソフト作れるってこと?



222 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:31:54 ]
だとしたらだいぶ浅いな。

223 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:35:51 ]
エスパーレスが出来ることだろ

224 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:43:11 ]
自分で処理系作れたらおk

225 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:55:32 ]
極めたっつったら、その言語のコンパイラーを自作しちゃうくらいの勢いだな

226 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:00:08 ]
言語極めててもその言語のコンパイラは作れないだろ。
もっと別種の知識が必要で、それさえあればあとはその言語の仕様書さえあれば
極めてなくても作れると思うぞ。



227 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:19:49 ]
ネタだろw

228 名前:デフォルトの名無しさん [2009/11/08(日) 17:20:48 ]
C# を極めてもねぇ…。
極めるってほどじゃないと思う。

言語を極めてもクラスライブラリを使いこなせなけりゃ意味ないんだから
.NET の CLR と クラスライブラリを極めないと…。

229 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:23:43 ]
コアとあなたは、クラスメイト♪

230 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:26:56 ]
CLRの理解を深めるといい。


231 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:47:24 ]
Form_Load後、300ミリ秒程度間を開けて処理をしたいのですが、
それだけのためにtimerを利用するのもどうかと思いますし、
同じスレッドで他の処理はしたいので、Threading.Thread.Sleepは使えません。
こんな時に使えるモノはないでしょうか?



232 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:48:10 ]
C#極めましたっていったらまあ.NET極めましたって意味に取っちゃうかな


233 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:50:43 ]
>>231
Timerでいいよ

234 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:51:58 ]
よっぽどヒマならアセンブラ辺りやっとけば。
その上でネイティブの C をちゃんと覚えれば無敵状態になれるかもよ。

235 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:57:07 ]
ネイティブのCって開発環境無いよね

236 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 18:00:56 ]
いくらでもあるだろ。

237 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 18:06:31 ]
>>231
用途に合うかどうかは知らないが、
フォームの表示が済んだらすぐ程度でよかったらShownイベントでいいんでない?

238 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 18:24:00 ]
プロパティの get 内でウェブアクセスして情報取得をしたいのですが、問題ありますでしょうか?
それともメソッドにすべき?

239 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 18:44:04 ]
>>237
それは試してましたが、
Loadから呼ばれる関数内から300ミリ待たせたかったので、
Shownだと早すぎてアウトみたいです。
とりあえず暫定的にタイマー使っておこうかと思います。

240 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 19:45:54 ]
>>238
さすがにそれは絶対ダメ
メソッドどころか専用のクラス作ってもいいくらいだ

241 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 20:31:19 ]
>>240
だめですか・・・
大人しく SetXX と IsXX を作ります。

ガイドライン見てみるとたしかに書いてありますね。
msdn.microsoft.com/ja-jp/library/ms229054.aspx より
>以下の場合は、プロパティではなくメソッドを使用してください。
> 操作がフィールド セットの場合よりも格段に低速の場合。
> スレッドのブロックを避けるために非同期バージョンの操作を提供することも検討している場合は、
> プロパティでは操作の負荷が大きくなりすぎる可能性があります。
> 特に、初期化時以外にもネットワークやファイル システムにアクセスする操作は、
> 多くの場合、プロパティではなく、メソッドにする必要があります。

多くの場合って書いてあるけど、例外的にOKな場合もあるんだろか・・・



242 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 20:38:40 ]
バインディングやリフレクションの都合でどうしてもプロパティにしたい場合はあるだろうな

243 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 20:49:39 ]
じゃあ、form上の複数のコントロールのenable値を変えたい時にプロパティで設定するのはおk?

244 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:27:07 ]
>>243
論理値でだとすると微妙。
一度にfalse/trueにする機能ならメソッド推奨。
複数コントロールのenable値の組み合わせは論理値じゃ返せないだろうし、
そしてget無しのset専用プロパティはガイドライン違反だから。
※ 無理矢理にでも返すとか言い出すなら「ご勝手に」かな。

245 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 22:22:27 ]
副作用起こすプロパティ作って、うまいことやった気になるのは初心者によくあること
HogeControl.Enadled = true; これで他のコントロールが無効になったり
ネットワーク通信始めるようになったら、次にソース見たときに
それが本当に何をやっているのか中まで全部見ないと理解できないものになる
小さいプログラムのうちはなんとかなるが、大きくなるにつれて
たまねぎの皮を剥くような精神力の戦いに引きずり込まれることになる

246 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 22:28:51 ]
>>245
どういう意味で「副作用」と言っているのか不明瞭な気がするが、
それは抽象化と命名が適切かどうかという問題であって、
「それ」がプロパティかメソッドか、という問題ではないと思うが。

247 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 22:50:25 ]
メソッドは操作、プロパティはデータを表すのが一般的だとガイドラインに明記
されているし、俺もそう思う。
抽象化と命名の問題かもしれないが、区別して使うに越したことはない。

248 名前:243 mailto:sage [2009/11/08(日) 22:51:48 ]
>>244
一括ではない。
組み合わせをcase式で処理してる。
さらにいえば、それは親フォームにある共通のコントロール。
getsetで渡す値はenumな値で表示モードです。
子フォームからgetsetして共通コントロールの制御を親のプロパティで行い、子は自formのコントロールの制御をおこなう。
状態としてコントロールの管理をしたかったんた゛。

249 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 23:09:08 ]
>>248
それは別にいいんじゃないの?


250 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 23:10:25 ]
それはイベント使った方がいい気がする
せっかく親フォームを抽象化しようとしているみたいなのにもったいない

251 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 23:38:54 ]
XmlSerializerでメンバをシリアライズ/デシリアライズする際、
独自の日付方式で書かれた文字列をDateTimeに変換したい場合に
属性のみの記述で変換することは不可能でしょうか?
それとも大人しくラッパークラスを作るしかないんでしょうか?

・日付文字列(W3Cで定義された形式とは違う)
Sat Jan 24 22:14:29 +0000 2009

・メンバ
[System.Xml.Serializer.XmlElement("date")]
public DateTime Date {get; set;}







252 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 00:01:57 ]
>>251
言ってることが支離滅裂に聞こえる。
独自の日付方式で書かれた文字列って何?

>public DateTime Date {get; set;}
このプロパティの型はDateTimeであって文字列ではないと思うけど。


253 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 00:05:29 ]
>>252
カスは黙ってろ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<233KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef