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


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

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



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

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

前スレ

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

210 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 23:49:16 ]
>>209
おー、これです
ありがとうございます

211 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 00:05:49 ]
選択した文字列を引数としてプログラムを起動するにはどうしたらいいですか?

212 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 00:08:21 ]
>>211
msdn.microsoft.com/ja-jp/library/h6ak8zt5(VS.80).aspx


213 名前:137 mailto:sage [2009/03/19(木) 00:55:19 ]
>>210
しかと吟味の上、よきに計らえ

214 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 00:57:01 ]
ごばorz

215 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:30:02 ]
どこの誤爆だよwww

216 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 03:00:49 ]
現在アクティブになっている他アプリのウィンドウ名を取得することはできますか?
出来るのであればご教授お願いします。

217 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 03:18:50 ]
>>211
Main関数の中に配列いれろ

218 名前:217 mailto:sage [2009/03/19(木) 03:20:26 ]
言い方が悪かった

static void Main(string[] args)

こういう感じね


後選択した文字列ってのが意味解らない



219 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 03:22:41 ]
user32.dllのGetForegroundWindowとGetWindowTextをDllImportして使う。
HWNDにIntPtr、LPTSTRにStringBuilderを使っとけばおk

詳しいやりかたはぐぐれ

220 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 03:26:09 ]
>>211
System.Diagnostics.Process.Start("app.exe", "args");
こういう事をしたいのか?

221 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 03:32:12 ]
>>219
ありがとうございます。
そのヒントを元に検索し、緑のバイクさんのところのコードを参考にして解決しました。

222 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 03:44:03 ]
>>211
Processじゃないの?


文字列で思い出したのでついでに質問

ブラウザなどで範囲選択している文字列をコピーすることはできないでしょうか?
SendKeyで Ctrl+Cを送ると、なぜかブラウザ名と開いてるページが帰ってきてしまいます。
何かいい方法無いですか?

223 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 10:37:38 ]
一番汎用的なのがSendKeysなのは間違いない
Ctrl+Insertの方が安定してるかも

対象限定ならともかく完全にどんなのでも使えるやりかたってのは存在しない

224 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 10:41:19 ]
変数名を変えると一括で変換してくれるマークが出てくるじゃないですか
あれを出ないようにしたくはないんですが、他は変更しない時マークを消したいんですが
マークを押した時に出てくる2つの選択肢どっちを選んでも思い通りになりません教えてくだしあ

225 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:59:26 ]
2次配列の宣言で
int[][] da = new int[8][];  として後で

da[0] = new int[8];
da[1] = new int[8]; …としていくとできますが

for (i = 0; i < 8; i++)
da[i] = new int[8];
こうするとビルドは出来ますが実行で赤Xがでてエラーになります

for などを使って一括して定義する方法ないでしょうか?
da[0,0] このタイプは使いたくないのです


226 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:06:08 ]
エラーはちゃんと読みなさい。

227 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:08:59 ]
>こうするとビルドは出来ますが実行で赤Xがでてエラーになります 

日本語でOK

228 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:09:54 ]
エラーでないぞ?
iを定義してないだけじゃないか?



229 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:20:25 ]
なんか、めちゃくちゃえげつない初期化が出来るね。

int[][] da = new int[][] { new int []{1,2,3}, new int []{5,6}, new int []{7}, new int []{8,9,10}};


230 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:22:22 ]
もう一息
var da = new int[][] { new []{1,2,3}, new []{5,6}, new []{7}, new []{8,9,10}};


231 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:49:43 ]
>>228
でないですか?iの定義はしてるはずなんですが
>>226
エラーというか画面全体に×が出るあれです


232 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 18:13:52 ]
宣言する場所と実際にデータを使う場所が悪かったようです
直りました、どうもすいません

233 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 22:49:45 ]
 
日本を狙う 朝鮮人の原爆ミサイル建造費用は

  日本国内の 在日パチンコ屋からの送金

パチンコの市場規模は 年間30兆円

  日本の国家予算の 3分の1以上

  北朝鮮の国家予算の なんと100年分!

これを在日朝鮮人が 自由に動かし

  パチンコマネーを 北朝鮮に送金している

パチンコ屋を 全面営業禁止にしない限り

  北朝鮮は制裁など 痛くもカユくもない
 
在日朝鮮人なら 生活保護もらい放題

  毎月二十数万円もらって 毎日遊んで暮らしてる

  住宅費・医療費・教育費なんでも無料

  税金は1円も払わない 超特権階級(貴族)

  民主党は 選挙権まで与える予定

  日本は 在日天国  <丶`∀´> ウハウハ〜♪

2cchan.ham-radio-op.net/kimuchi.html

234 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 00:36:39 ]
>>223
おお、Ctrl+Insertで望んでいた動きができました
なぜCtrl+Cで上手くいかなかったんだろうなぁ

ありがとうございました

235 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 03:02:46 ]
すみません。質問いいですか?

実にくだらないのですが、解りません・・・

データグリッドビュー内の全てのRow毎にForeachループを廻したいのですが
やり方が解りません。

どなたか教えては頂けませんか?
宜しくお願い致します。

236 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 03:06:15 ]
foreach(DataGridViewRow row in dataGridView1.Rows)
{
うんたらうんたら;
}

237 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 20:30:07 ]
C#3.0勉強中
匿名メソッドのラムダ式の便利さはわかったけど、
ExpressionTreeというのが、どういう場合に使われて便利なのかよくわからない
これは便利だっていうサンプルが乗ってるサイトとかありますか?

238 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:56:48 ]
www.opentk.com/project/opentk
のExampleの中のWinForms 1 : Simple GL Controlのサンプルを、
ボタンを押したら箱が回るアニメーションが再生/一時停止するようにするには
どうすればいいですか?
箱を描画する処理は作れるんですが、アニメーションを実装する方法が良く分かりません・・
シングルスレッドで処理したいんですが、ApplicationContextクラスを作ったりしなければならない?



239 名前:238 mailto:sage [2009/03/20(金) 23:13:52 ]
BackGroundWorkerとかデリゲートの非同期呼び出しとか
使わず
while(ウィンドウが閉じられていない間)
{
メッセージ処理

ゲームの描画処理とかSleepとか
}
見たいな事はC#では出来ないんでしょうか

240 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:21:28 ]
マルチスレッドが嫌ならDoEventsでも使えば

241 名前:238 mailto:sage [2009/03/20(金) 23:31:18 ]
>>240
メッセージ処理をDoEventsでするんですか?
しかしApplication.Run(new Form1());
した後どこから>>239みたいなループに入れば・・?
OnClick()の中にwhile文入れたりとかは駄目ですよね・・?

242 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:11:27 ]
>>237
マニアックな例になるけど、
ufcpp.net/study/csharp/sp3_expressionsample.html
とか。

あと、C# 4.0のdynamicは内部的に式木使って動的コード生成してる。

いずれにせよ、あんまりエンドユーザー向けの機能ではない。

243 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 11:12:18 ]
株式の情報とかを取得するのに
皆、Yahooファイナンスから情報を得ているのが多いみたいですが
あれは?ファイナンスのHTMLを取得して
中を読み取り表示しているだけなのかな?

244 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 11:14:56 ]
YahooのWebAPIではファイナンスの情報提供してないみたいだからそうなんじゃない?

245 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 11:29:19 ]
Yahooの株式データはurlにクエリ付けて操作できる

246 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 11:47:11 ]
URLにクエリですか?

247 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 11:48:41 ]
だけど取得はHTMLだから仕様変更されたら一発でアボーン。
つか金融系でAPIを公開しているところないよなぁ・・・
純金の相場を取得するモジュール作ったけど、仕様がいつ変わるかわからないのが怖い。

248 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 11:50:23 ]
>>246
クエリ文字列。

stocks.finance.yahoo.co.jp/stocks/detail/?code=4686.q
なら
code=4686.q

つまりURLの後ろの?以降の文字列。



249 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 11:55:39 ]
>>248
銘柄のコードでですね。

それでHTMLを取得してから
中を自分で作るしかないのか・・・・・

>>247さんの言う通り
HTMLが変わったら終わりですね。

どうするかなぁ〜( ̄ヘ ̄;)ウーン

250 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 12:20:33 ]
スクレイピングなんてそんなもん。

正規表現を設定ファイルに出すとかしておいて、
変更時の修正が最低限に済むようにしとけ。

251 名前:デフォルトの名無しさん [2009/03/21(土) 12:25:08 ]
携帯から失礼。ふと疑問に思ったのでよろしくお願いします。

オブジェクトを作るとき、+=と=の場合があるんですがどう違うんですか?

252 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 12:47:17 ]
たぶん、イベントハンドラの関連づけを勘違いしてるんじゃないかな。

253 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 12:48:45 ]
YAHOOファイナンスは銘柄コード以外に日付もクエリに指定する事が出来て
過去10年分の株価時系列データが意外と簡単に取得出来るな
詳しいやり方は忘れた

254 名前:243 mailto:sage [2009/03/21(土) 13:04:14 ]
色々な意見ありがとうございます。
ちょっと考えてから作るか作らないか検討します。

255 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 13:07:14 ]
>>252
たぶんそうです。
+=と=の違いってどうなんですか?

256 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 13:10:34 ]
調べろよ。

x = x + y;

x = y;

の違い。

257 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 14:14:23 ]
>>242
おお ありがとう
あと見ておくべきところとしてはこんなところかな?
なんかいろいろあるなぁ

・ASP.NET MVC 1.0
・ASP.NET AJAX
・ASP.NET Dynamic Data
・ADO.NET Entity Framework
・ADO.NET Data Services
・Silverlight 2.0
・Silverlight Controls for ASP.NET
・C#3.0 匿名メソッド
・C#3.0 ラムダ
・C#3.0 初期化子
・C#3.0 匿名型
・C#3.0 暗黙型付け
・C#3.0 拡張メソッド


258 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 14:28:45 ]
>>256
ハンドラーに+=ってイメージがつかないんです(ノ_・。)



259 名前:デフォルトの名無しさん [2009/03/21(土) 14:34:45 ]
継ぎ足していくイメージだな

260 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:05:28 ]
>>258
 delegate void FooHandler(string s);
 void Bar(string s) { Console.WriteLine(s); }
 void Test() {
   FooHandler f = null;
   f += Bar; // ..1
   f = f + Bar; // ..2
   f = (FooHandler) Delegate.Combine(f, new FooHandler(Bar)); // ..3
   f("hello");
 }
1.2.3 は全部同じ意味。


261 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:13:23 ]
でも実際、delegateの場合は+=演算子がオーバーロードされて、
Delegate.Combineメソッドが実行されるってこと?

262 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:29:32 ]
演算子オーバーロードではなく、糖衣構文。
コンパイラが自動的に Delegate.Combine() に変換してくれるのであって、
Delegateクラスで + 演算子が定義されているわけではない。

263 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 19:32:07 ]
pc11.2ch.net/test/read.cgi/gamedev/1237360986/95-


264 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 20:11:21 ]
WEBサイトを画像化するには
どういった方法をとるのが適切ですか?
よければサンプルコードの掲載されてるようなURLもいただけるとありがたいです。

265 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:11:11 ]
throw new System.Exception();

│               _∧∧∧∧∧∧∧∧∧∧_
│               > そ、その動きはトキ! <
│                ̄∨∨∨∨∨∨∨∨∨∨ ̄
│ ≡  ('('('('A` )
│≡ 〜( ( ( ( 〜)
↓ ≡  ノノノノ ノ  サッ

266 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:51:33 ]
>>257
LINQを学べば自動的にC#3.0の追加要素は全部学べるよ。

267 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:22:15 ]
>>266
LINQ TO SQLはキャンセルの方向だからお勧めできないよ

268 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:33:19 ]
>>267
>>257 のリストのどこにもLINQ TO SQLとかいてないな。
ひょっとしてLINQ = LINQ TO SQLとか思ってる人なの?



269 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:39:27 ]
>LINQ TO SQLはキャンセルの方向
そうなのか
知らんかった
理由は何?


270 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:43:32 ]
ひとことでいうと DB 屋さんが作ったものじゃないから。
ある意味 Linq の参考実装だったものがそのまま出てきたような
もの。でもライトでいいんだけどねあれ。実質 SQL Server 限定で
なければ。
DBLinq はどうなってるんだっけか。

271 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:57:35 ]
>>268
EntityにはLINQ TO SQLが内包されてるし、
一言でLINQと説明しているC#関連のサイトのほとんどはLINQ TO SQLだからね

272 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:06:44 ]
EntityにはLINQ TO SQLと同等のExpression<T>を使ったクエリ文は使用しているが内包はしていない。
>一言でLINQと説明しているC#関連のサイトのほとんどはLINQ TO SQLだからね 
これは君の脳内ソース。


273 名前:デフォルトの名無しさん [2009/03/22(日) 00:22:14 ]
LINQでLINQ TO SQLを説明してるサイトのほうが少ないと思うんだが、
いったい普段どういうサイトを見てるんだろうか

274 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:29:31 ]
>>272
紛らわしいが、普通に理解して貰えれば、Entity Frameworkのことを差しているのは明白だと思うんだけど。
EntityFrameworkはSP1になって実装されたものだからC#3.0(VS2008)の特徴として紹介されてる
LINQ関連は、ほとんどLINQ TO SQLっていってるわけ。

実際にC#でLINQ TO SQLでないものを紹介していれ例は少ないよ。
脳内ソースというか、普通にググればわかるレベル。

275 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:38:37 ]
つまり、ググると混同してるのやら誤解しているのやらがたくさん出てくると


276 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:42:17 ]
>>274
はいはい(笑)

277 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:44:56 ]
あの論点が見えないのですが
>>266-276 の繋がりがよく分からないあたりから
食い違いがあるのではないでしょうか

278 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:45:53 ]
…Linq to SQL が sqlmetal とかの特定技術であることすら知らない?
Entity Framework の Linq 技術周りに関して言えばそれは
Linq to Entities だ。EDM に対してのクエリである ObjectQuery の
構築で使用している。
Linq to Entities と Linq to SQL は生まれも実装もラインも別。マジで。
つながりでいえば Linq のプロバイダとして実装されているぐらいしか
共通点はない。



279 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:45:59 ]
訂正 >>266-267 でした

280 名前:デフォルトの名無しさん [2009/03/22(日) 00:46:05 ]
>>275
>>276
はいどうぞ

>また、VS 2008 SP1&.NET Framework 3.5 SP1では
>「ADO.NET Entity Framework(ADO.NETエンティティ・フレームワーク)」
>(以降、Entity Framework)という新しいデータベース・アクセス・テクノロジが追加されている。

www.atmarkit.co.jp/fdotnet/special/vs2008sp1/vs2008sp1_03.html

281 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:50:35 ]
>>280
だから何?って感じなんだがwww
何の証明にもなってない

282 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:51:16 ]
>>281
>>278は華麗にスルー?

283 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:52:39 ]
>>282
うん
だから何?って感じだし
なんでそんなに必死なのかさえ理解できないし

284 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:54:20 ]
脳内ソース出しちゃう人の話なんか誰も取り合っちゃくれんよ
それが2chです

285 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:55:09 ]
なんか論点がずれてる気がするな。
その記事ではEFとLINQ TO SQLをちゃんと区別してるんだから、
そうなると誰もそれには異論は唱えてないことになると思うのだけど
IDがないとわかんね。

286 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:56:27 ]
だから

>LINQ To EntitiesはEDMのモデル向けの“LINQ To SQL”といってもよいものだが、
>LINQ To SQLにはない機能(例えば、複数のテーブルから1つのエンティティを作成する機能など)が搭載されている。

>EDMに基づくLINQ To Entitiesは、データベースやオブジェクトの変更にも強いなどのメリットがあるため、
>今後はLINQ To Entitiesの方が(LINQ To SQLよりも)より多くの場面で活用されていくのではないだろうかと筆者は予測している

287 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:12:59 ]
linqとして紹介されてたものが実はlinq to sqlのことだとも知らなかったのか。。

288 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:15:53 ]
>>287
君か、引っ掻き回してたのは



289 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:19:00 ]
何を?
勘違いしてた人はいるみたいだけどね

290 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:19:46 ]
Linq だけならふつーは Linq to Objects を指すんじゃない。


291 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:25:58 ]
じゃあ事実関係から

1 Linq To SQLはLinq To Entityとは別物 ここまではok?
www.atmarkit.co.jp/fdotnet/special/vs2008sp1/vs2008sp1_03.html

2 VS2008と.NET3.5は同じ時期にリリースされた ここまではok?
itpro.nikkeibp.co.jp/article/COLUMN/20080113/290936/

3 Linq To SQLは.3.5に搭載されている ここまではok?
d.hatena.ne.jp/atsushieno/20081103/p1

4 Linq To Entity(Entity Framework)は3.5 SP1で搭載された ここまではok?
d.hatena.ne.jp/atsushieno/20081103/p1

従って3の時点でリリースされていないLinq To Entity(Entity Framework)を
C#の特徴として紹介できない(将来の機能の紹介は別)。 ここまではok?


292 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:31:57 ]
>>290
同感

だが、メソッドのネーミングがSQL由来なので
使った事が無い人はSQLの利用がメインだと思うかもね

293 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:34:27 ]
>>291
SP1は既にリリースされてるわけで将来の機能というわけではないよ。
ただ、議論をする上で扱いは決めておく必要はある。
というわけで含まない前提でどうぞ。

294 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:40:49 ]
>>293
普通に解釈すれば、3時点から見た「将来」と読めるから、
その突っ込みはズレてると思うぞ?

295 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:43:48 ]
3の時点でリリースされていないLinq To Entity
3の時点で紹介できない
どちらが普通かは難しいけが後者で了解

296 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:48:39 ]
それ前提ならC#とLINQの解説は、SP1公開以前のものがほとんどだから
少なくともLinqToEntitiesを解説したものは圧倒的に少ないな
どっちにしろSQLのほうはなくなるらしいから学ぶならEntitiesのほうだろ

297 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:37:11 ]
学ぶならまずはLINQ to Objectsですよ。
第一、Linqの説明で一番多いのはLINQ to Objectsだし。
SQL系に隠れてスルーされ気味ですが、非常に有益な技術です。

298 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 03:49:08 ]
LINQ to XML使ってる俺はどうなんの



299 名前:デフォルトの名無しさん [2009/03/22(日) 10:18:18 ]
LINQといえばまず第一にLINQ to Objectsだろ
ないと絶対に困るレベルのプログラムの基本部品だ

LINQ to SQLとかEntityなんてのはそれを応用して作った
ただのORマッパーだろ
LINQという技術の射程の長さは表れてるけど
それがLINQの代表というわけじゃない

300 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:27:11 ]
>>298
まあ、XML操作が必要な作業してるんなら、
LINQ to XMLはかなり使いやすいXMLライブラリだと思う。

>>299
応用というか、同じ書式で書けるってのがポイントか。


301 名前:sage [2009/03/22(日) 10:59:30 ]
OS  :WindowsXP
開発環境:VisualStudio2008 Pro
開発言語:C# 3.0

AccessデータベースをOLEで接続し、
データバインドしたDataGridViewでデータを表形式で表示しつつ、
DataGridViewの右横にデータバインドしたテキストボックスを配置し、
DataGridViewでデータを選択し、それをテキストボックスで
データ更新が出来る名簿ソフトを作成しています。

それに、DataViewのRowFilterでDataGridViewでのデータの絞込みが出来る
用に機能追加し、またデータバインドのソースをDataViewにして、絞込みした
状態でデータ更新ができるようにしようとしました。

しかし、
RowFilterでフィルタをかけている状態で、下記のコマンドをボタンで更新処理を
実行しようとすると、DataGridのフォーカスを手動で変更をしないとデータベースが
更新されないのです。

フォーカスを移動しなくても更新されるようにEndCurrentEdit
メソッドを事前にかけているのですが、何かコマンドが足りないのでしょうか?
恐れ入りますが、ご教示いただけないでしょうか?

以下コマンド-----------------
int iRow; //更新したレコード数
this.BindingContext[dbCustomer1, "M_Customer"].EndCurrentEdit();
iRow = oleDbDataAdapter1.Update(dbCustomer1, "M_Customer");
MessageBox.Show("更新 " + iRow + "件");
-----------------------------

302 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 11:06:11 ]
C#にはデフォルト引数がなく、同様の機能はオーバーロードを使って表現するみたいですが、
これって冗長じゃないですか?いくつも同じ名前のメソッドが増えてなんだか回りくどいような気がします。
Pythonだとデフォルト引数、名前付き引数がサポートされてるので、
それに慣れていたせいもあってかいまいち理解できません。
オーバーロードの方が優れている点ってあるのでしょうか?
それとも、そもそもデフォルト引数を使うような事自体が珍しいんでしょうか。

303 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 11:17:12 ]
デフォルト引数をまとめたクラスを一個作ればいいだけだからねえ

304 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 11:58:12 ]
>>302
4.0からデフォルト引数と名前付き引数に対応するよ

305 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:59:30 ]
相談室スレから誘導されてきました。いまさらだけどあっちのソースだいぶまちがってる・・・。

今ラジアンで角度を処理するクラスを作っているのですが、次のような動作をさせたいんです
1.値を代入したときは値を正規化してからいれる(負値だったら正値に、2π以上だったら2πで剰余算)
2.値を参照するときはそのまま参照
3.floatと同じように扱える
プロパティを使って実装すると次のようになりますが
  class RegularizedAngle
  {
    private float InAngle;
    public float Angle
    {
      get { return Angle; }
      set
       {
         //Angleが負値だったら正値に
         if (value < 0) Angle = (float)(Math.PI * 2f) + Angle;
         //valueが2π以上だったら2πで剰余算
         Angle = value % (float)(Math.PI * 2f);
       }
    }
  }
これを普通のfloatと同じように扱いたいんです。たとえば・・・

RegularizedAngle Ang = (float)(Math.PI * 2f);   //すなわち6.28・・・の代入
Ang += 1;                         //代入したとき内部で正規化がおこなわれて1になる。
Ang += Ang;                       //これで2になる?

こんなかんじで見た目を組み込み型みたいにしたいんです。
しかし上記のプロパティをつかった方法だとアクセスするときに
Ang.Angle としなければなりませんし、宣言するときにはnewが必要です
組み込み型を継承したクラスを作ればよいのでしょうか・・・?

306 名前:デフォルトの名無しさん [2009/03/22(日) 14:04:08 ]
msdn.microsoft.com/ja-jp/academic/cc998611.aspx

現在↑のページの
1.3 Visual C# による実践コンポーネント指向プログラミング
簡易ドローツールを作成しているところなのですが
手順通りに作成しても、ソースをコピーしても

 Windows Form Designer generated code

の部分でエラーを吐いてうまく作成ができません
これを解決する為のお知恵をお貸しいただけないでしょうか
お願いいたします。

307 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:08:45 ]
>>306
//Windows Form Designer generated code
とコメントアウトすればいいのかな?


308 名前:デフォルトの名無しさん [2009/03/22(日) 14:18:32 ]
>>307
いえ、そうしてもエラーが増えるばかりで、そうしていいやら・・



309 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:25:03 ]
>>308
VS2002/2003の頃の記事だから、percial class じゃないんだな。

そこはおそらく、これだ。画面は自分で準備しろということじゃないかな。
#region Windows Form Designer generated code
・・・・
#end region

をIDE上で閉じてるイメージ。

310 名前:デフォルトの名無しさん [2009/03/22(日) 14:29:20 ]
>>305
演算子オーバーロードしまくれば大体望みの動作になると思うよ
でも普通にプロパティアクセスする方が分かりやすいよ

311 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:29:43 ]
>>306
それは手順通りではないでしょ。
追加するのは、イベントハンドラの部分。

312 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:30:13 ]
>>302
デフォルト引数の値を変更したとき、
利用者側の再コンパイルが必要って言うデメリットもあるから今まで対応してこなかった。
さすがに開発者からの要望に折れて、4.0で実装。


313 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:32:21 ]
>>309
レスありがとうございます
「pertial識別子が型hにありません。この型に別のpartial宣言が(ry」
までたどり着けました

314 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:33:15 ]
.>>310
あんまり賢い方法ではないってことですね・・・。
プロパティで実装してみます。ありがとうございました。

315 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:35:48 ]
>>313
駄目だこりゃ。
どうしてもこの教材である必要がなければ、他のあたって。

316 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:38:41 ]
>>315
私が根本的に勘違いしているみたいですね・・・
すみませんとりあえず他のをあたります

317 名前:315 mailto:sage [2009/03/22(日) 14:42:35 ]
うん
Form1.Designer.csの内容をこのサンプルから省いて、
Form1.csに追加が必要なメンバ変数とイベントハンドラの記述をすれば
動くので、原理的に難しい話では全くないんだけど、
それができる人は、そもそもこのチュートリアルをやる必要がありません。

318 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:45:51 ]
>>305
普通に演算子オーバーロードすれば良いと思う。
newでインスタンス作りたくなければ、構造体にすればいい。
けど、フィールドの初期化しなきゃいけないので、宣言だけはnewで我慢かなぁ



319 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 14:50:26 ]
>>314
floatと完全互換ならこの程度で済みそうだけど、複雑になるとoverloadの山になるな。
struct RegularizedAngle {
 float inAngle;
 public RegularizedAngle(float f) { inAngle = f; }
 public float Angle { 
   get { return inAngle; } 
   set { inAngle = value; } // いろいろ省略
 }
 public static implicit operator RegularizedAngle(float f) {
     return new RegularizedAngle(f); 
 }
 public static implicit operator RegularizedAngle(double f) {
     return (RegularizedAngle) (float) f;
 }
 public static implicit operator float(RegularizedAngle ra) {
     return ra.Angle;
 }
 public override string ToString() { return Angle.ToString(); }
}
--
static void Main() {
    RegularizedAngle x1 = 12.3;
    RegularizedAngle x2 = 10;
    float f = x1 * 3;
    RegularizedAngle x3 = x1 * x2;


320 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 15:01:40 ]
>>319
ちびっと訂正
>public RegularizedAngle(float f) { inAngle = f; } 
public RegularizedAngle(float f) { inAngle = 0; Angle = f; }


321 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 15:46:43 ]
なんかlinqを使うより、IEnumerable<>のSelect<>メソッドやWhere<>メソッドを使ったほうが
わかりやすい気がするのはなぜですか?
linqtがfromから始まるのが気持ち悪いからですか?

322 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 15:46:54 ]
>>319-320
ありがとうございます。参考になります。
しかし完全に理解するのは難しそうですね・・・。
それの上にさらに正規化処理を入れなければならないのですよね・・・。

323 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:01:10 ]
>>321
クエリ式が分かりにくいと感じるなら拡張メソッドでLINQやればいい
fromからなのはインテリセンス効かせるため

324 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:02:59 ]
>>321
それもLINQ

325 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:08:46 ]
クエリ式なんかただのSQLっぽく見せるためのプリプロセッサなんだから
SQL大好き人間以外は使う必要の無いものだよ
SQL大好き人間でも最終的には拡張メソッドに適応すべきだろう

326 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:30:24 ]
LINQってなんて読むの?ラインクエリ?

327 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:37:16 ]
なるほど、そんなもんなんだ
機能としては、ADO.NETのDataTable.Select();が、より簡単に使えるようになりました的な感じなのね
メモリ上にデータをもって検索するとか、xmlから検索するとかに便利そうね

つか配列を検索しやすくしましたって感じ?
データベースから引っ張ってくるのは結果セットだけ取得して、
それを単に表示させるだけのほうが再計算入るよりパフォーマンスがよさそうなんだがそのあたりはどうなんだろう

328 名前:デフォルトの名無しさん [2009/03/22(日) 16:44:47 ]
LINQをSQLに使えばSQL文が生成され
データベースに問い合わせされ結果セットだけが取得されるんだよ



329 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:59:20 ]
>>325
letとか多重from使おうとするとメソッド形式ではちと厳しい。

>>326
リンク。
linkと同じ音で読めってさ。



330 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:05:29 ]
へー、その場で動的にクエリを生成してくれるのね
難しい処理はストアドに記述してしまうし、
ある程度の決まった処理ならxsdファイルのDataSetに記述したほうが楽そうだけど、
DataSetでは、where文を動的に生成することができなかったから、
それが簡単に記述できるようになるのなら確かに便利かもしれん

331 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:28:33 ]
ボタンを押したらtextBoxのフォントサイズを
変えようとしてるのですが

iの中にはint で18 が入ってる

textBox1.Font.Size = i.ToString();

でどうもうまくいきません、どう記述したらよいでしょうか?

332 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:32:38 ]
ReadOnleyプロパティだからそれ。

333 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:34:19 ]
やどりぎ+どくどく

334 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:35:31 ]
>>333
すいません、ありがとうございます、リッチテクストでも同じでしょうか?

335 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 19:39:34 ]
EnterpriseLibrary4.1の使い方が全く分かりません・・・
ダウンロードしてインストールして・・・
そこからどうすればいいのか・・・

336 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:42:35 ]
文字列から数字取り出すのってどうやったら良いですか?1 2でなく12 3 434とかで 

337 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:51:11 ]
>>336
new Regex(@"\d+").Match(str);


338 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:53:46 ]
ありがとうございますた



339 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:01:47 ]
linq試してみました
簡単にsqlが取得できるのはすごいね
ただアドホッククエリは今までと同じようにEntitySQLとか使って取得するのね
結局は型無しになってしまうし・・・

簡単にクエリ書けるのはいいけど、ソースコードの中でばんばん書けてしまうと、
mvcモデルの原則に反するんじゃないのかな?
普通に使用するなら型付きDataSetのほうが楽でわかりやすい気がするんだけど、
そうなるとLinqToEntitiesを導入する最大の利点ってなんなんだろう・・・
DBデータの取得、更新を行う再利用可能なクラス(Model)が作りやすいってことなのかな?

340 名前:デフォルトの名無しさん [2009/03/22(日) 22:23:24 ]
モデルの中にかけばいいんじゃねーの?

341 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 23:26:37 ]
>>339
ビジネスロジック層とデータ層の間を繋ぐもの的な位置づけ。

342 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 01:08:46 ]
C++/CLI から来ました。方向性が間違ってたらすみません。
>>305
class RegularizedAngle {
  private float InAngle;

  public float Angle {
    get {
      return this.InAngle;
    }
    set {
      if (value <= 0.0) // valueが負値だったら正値にする正規化
        this.InAngle = value + (int)(value / (Math.PI*2.0f) + 1.0) * Math.PI*2.0f;
      else // valueが正値だったら2πで剰余算する正規化
        this.InAngle = value - (int)(value / (Math.PI*2.0f)) * Math.PI*2.0f;
    }
  }
}

343 名前:305 mailto:sage [2009/03/23(月) 02:13:02 ]
>>342 ありがとうございます。処理を見直した結果-3.14〜+3.14までを格納するように改めました。
  //角度を格納するが強制的に正規化される型
  //doubleとしてアクセスできる
  public class RegularizedAngle
  {
    private double InAngle;
    public RegularizedAngle()
    {
      InAngle = 0;
    }
    public RegularizedAngle(double i)
    {
      InAngle = 0;
      Angle = i;
    }
    public double Degree
    {
      get { return StgUtil.RadToDeg(InAngle); }
      set { Angle = StgUtil.DegToRad(value); }
    }
    private double Angle
    {
      get { return InAngle; }
      set
      {
        //6.28以上だったら6.28で剰余算
        if (value > StgUtil.PIx2) value %= StgUtil.PIx2;
        InAngle = value;
      }
    }

344 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 02:16:15 ]
    //lはrより左方向
    public static bool operator >(double l, RegularizedAngle r)
    { return AngCheck(l, r.Angle); }
    public static bool operator >(RegularizedAngle l, double r)
    { return AngCheck(l.Angle, r); }
    public static bool operator >(RegularizedAngle l, RegularizedAngle r)
    { return AngCheck(l.Angle, r.Angle); }
    //lはrより右方向
    public static bool operator <(double l, RegularizedAngle r)
    { return !AngCheck(l, r.Angle); }
    public static bool operator <(RegularizedAngle l, double r)
    { return !AngCheck(l.Angle, r); }
    public static bool operator <(RegularizedAngle l, RegularizedAngle r)
    { return !AngCheck(l.Angle, r.Angle); }
    //lから右回りと左回り、どっちがrへの移動量がすくない?
    private static bool AngCheck(double l, double r)
    { return (l + r >= 0); }    //ここの処理をなんて書いていいのかわかりません。。。

    //doubleを代入された場合
    public static implicit operator RegularizedAngle(double f)
    { return new RegularizedAngle(f); }
    //doubleを代入された場合
    //doubleとして参照された場合
    //演算子の動作もdoubleに準拠
    public static implicit operator double(RegularizedAngle l)
    { return l.InAngle; }

    public override string ToString()
    { return Angle.ToString(); }
  }
ぐぐってみるとY座標から右回り左回りを算出するという手段がありました。おそらく0度が真右になるからできるんだと思いますが、
このクラスは角度だけを扱いたいので角度(ラジアン)だけから算出したいのです。何か良い方法があったらどうかお教えください。

345 名前:デフォルトの名無しさん [2009/03/23(月) 11:08:45 ]
C#はじめて2Weekの新参者ですが教えてください
サーバーエクスプローラからTBを選択してForm上にDRAG&DROPすると
oleDbDataAdapter1が作成されるのですが、同じmdbの別TBを
DRAG&DROPすると別のoleDbDataAdapter2が作られるのですが、
二つのoleDbDataAdapterを作成しなければいけないのでしょうか?
oleDbDataAdapter1だけにはできないんでしょうか?
C#2003です、よろしくお願いします

346 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 11:33:11 ]
嫌です

347 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:42:50 ]
同意

348 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 17:56:52 ]
御意



349 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 18:22:15 ]
ザムディン

350 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:36:18 ]
質問です。
System.Windows.Forms.Formクラスの
FormBorderStyleプロパティをNoneにし、
WindowStateをMaximizedにすると
タスクバーがフォームに隠れてしまうのは仕様ですか?
またFormBorderStyleをNoneにしたまま
これを回避する方法はどなたかご存知ですか?

351 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 20:39:37 ]
仕様じゃないですかね
とりあえずスクリーンのWorkingAreaを
MaximizedBoundsに設定したらいいんじゃない?


352 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 20:56:08 ]
System.Windows.Forms.Screen
から作業領域取得して設定

353 名前:350 mailto:sage [2009/03/23(月) 21:37:29 ]
this.MaximizedBounds = Screen.GetWorkingArea(this);
で修正できました。
ありがとうございます。

354 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 16:25:49 ]
a += b * c;
はb*cの結果とaを足してくれるんですか?

355 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 16:31:41 ]
それくらい試せよ

356 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 16:32:23 ]
>>354
試してみればいい。

357 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 17:46:10 ]
なるほど
ありがとうございました

358 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 17:57:07 ]
a += b * c;

a = a + (b * c);
だけど
a += b + c;

a = (a + b) + c;
足し算だから結果は変わらない
これは試してわかるようなレベルじゃない




359 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:02:19 ]
結合法則考えればすぐ分かるだろ

360 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:05:05 ]
a * = b + c
は?

361 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:07:48 ]
a = a * (b + c)

362 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:10:05 ]
演算子の優先順位なんて基礎だろ基礎
MSDNで「C# の演算子」調べろよ

363 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:16:51 ]
うそばっかりだなこの擦れ

364 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:25:10 ]
if(!>>1-362)
{
Console.WriteLine(>>363);
}


365 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:30:23 ]
>>358
こいつ馬鹿
a = a + ( b + c )
だろ

366 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:20:46 ]
演算子の優先順位が"人から見て"不明瞭な式っていうのは、
括弧で明示するのが基本だと思う。

&&が||より優先されるために条件式を
条件1 || 条件2 || 条件3
みたいに書く(条件1,2,3は各々&&で条件を連結している)とか、
優先順位が関係する定型的な書き方は知っておくべきだけど。

367 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:24:14 ]
int a = 10;
a += 10 >> 1; // a == 15
a = a + 10 >> 1; // a == 10

つまり a += x op y; は a = a + (x op y);

勝手に問題をすりかえて話をこじらせた挙句、
数行のコードを試せばわかることを「試してもわからない」という
文面とともに間違いを教える>>358が謎過ぎる。

368 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:24:56 ]
見やすくなるけどスピード負担はやや増えるのかな?



369 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:37:31 ]
なんのすぴーどだよ

370 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:43:53 ]
島袋の負担は増える
上原の負担は減るんじゃなかろうか

371 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:59:18 ]
解散しちまえ

372 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:00:25 ]
プログラマなら上原多香子好きだろ?
はしのえみのほうがいい?

373 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:48:53 ]
http://azumaya.s101.xrea.com/wiki/index.php?%B3%D0%BD%F1%2FC%A2%F4%2FC%A2%F4%A4%C7%A5%DB%A5%C3%A5%C8%A5%AD%A1%BC%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EB%A4%F2%BA%EE%A4%EB

↑にある↓の意味はどういうことですか?

if((k & WinApi.HOTKEYF_ALT) != 0)
    ret |= Keys.Alt;
if((k & WinApi.HOTKEYF_CONTROL) != 0)
    ret |= Keys.Control;
if((k & WinApi.HOTKEYF_SHIFT) != 0)
    ret |= Keys.Shift;
return ret;


374 名前:デフォルトの名無しさん [2009/03/24(火) 20:54:44 ]
ビット演算だな
AltとControlとShiftのビットを立てている

375 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 21:13:02 ]
>>373
ビット演算でググれ。

376 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 21:30:33 ]
>>373
フラグの使い方の悪い見本だな


377 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 21:57:06 ]
そうか?

378 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:01:38 ]
!= 0 ←これが気に食わないんでしょたぶん



379 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:07:45 ]
>>376
そういう風におっしゃるのなら、
>>376さんは>>373のような処理が必要なときはどんなコードにしているのでしょうか?
興味があるのでご教授ください

380 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:19:50 ]
理由書かない奴は気にするな

381 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:20:58 ]
理由分からない奴は気にするな

382 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:27:52 ]
>>379
どうせくだらない理由だから気にスンナ

383 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:43:03 ]
なるほど
ありがとうございました

384 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:45:05 ]
入れ替える必要はなさそうだけどな。

385 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:02:26 ]
!= 0 以外の良い書き方ってあるんですか?

386 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:03:38 ]
[flags]enumの比較は
if((f & Flag.Hoge) == Flag.Hoge)
と行うという例がMSの[flags]関連のどっかに書いてあった。

387 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:09:23 ]
>>385
!(1 = 0)

388 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:10:51 ]
なるほど
ありがとうございました



389 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:10:52 ]
アホは無理にレスしなくていいよ

390 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:34:19 ]
質問です
フォームを最大化してノーマルに戻して、
フォームのLocationをドラッグで移動したときに
フォームのあった矩形領域がデスクトップの左上からの画像になって
再描画されないんだけど
(ゴミ箱のアイコンが左上にあったとしたら、
フォームのあった位置の左上がゴミ箱の画像。背景もしかり)
考えられる原因って誰か知ってます?
また強制的にFormの裏側をリフレッシュする方法ってありますか?



391 名前:デフォルトの名無しさん [2009/03/24(火) 23:36:56 ]
OnPaintみたいなのをoverrideしてるくせに描画してないんじゃないの

392 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:38:45 ]
他のメーカーのグラボが乗ってるPCでチェクしてからだな

393 名前:デフォルトの名無しさん [2009/03/24(火) 23:49:28 ]
>>373は×、>>386は○になる具体例を提示しろ
できないなら>>376=糞

394 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:49:56 ]
とても基本的なことで恐縮ですが質問させてください。
このように呼び出し元のクラスを参照し、値を書き換えるクラスを作りました。
class Target
{
  private int member;
  Process pro = new Process(10,2)
  public void Do()
  {
    pro.OverwriteTargetMember(this)
  }
}
//目標値tgtまでvolずつ加算する
class Process
{
  int tgt,vol;
  public Process(int tgt,int vol)
  {
    this.tgt = tgt;
    this.vol = vol;
  }
  public void OverwriteTargetMember(Target tgt)
  {
    if(tgt.member != tgt) tgt.member+= vol;
  }
}
target.do()するたびにtargetのmember2 4 6 8 10 10 10・・・となる処理です。
本当はProcessをキューに入れて数値の変動を予約できるようにしています。
ですが、このような実装はあまりオブジェクト志向の設計思想に則していない様に感じられます。
このスレッドのみなさんでしたらどのような実装を行いますか?
どうかお聞かせください。

395 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:53:36 ]
なんでそんな変な名前つけてるの?

396 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:56:18 ]
アホは無理にレスしなくていいよ

397 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:56:54 ]
名前に意味はありません。
Target=メンバーを書き換えたいクラス
Process=引数に渡されたTargetのメンバーを書き換えるクラスです。

要約するとTargetがDo()するたびに数値を変動させたいのですが、
その動作をキューに入れて管理したいのです。

たとえば
0から1ずつ加算して10になるというパラメータをもったProcessクラスと
10から2ずつ加算して20になるというパラメータをもったProcessクラスを順にキューに入れると、
Target.Do()の結果が実行するごとに
1 2 3 4 5 6 7 8 9 10 12 14 16 18 20 20 20 20・・・
となるようにしたいのです。

398 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:23:07 ]
     ⌒ ⌒               ____
   (     )          ゝ/     __ヽ
      | | |              /        | h
   , ── 、 __          i >>376  |-||
 /         ヽ     /   ヽ      (|| | /^ヽ
/       /)ノ)ノ   //   \∧/   ノ /ヽノ
| >>393 ///⌒ヽ   /   , ─/ ̄ ̄`─ ´ / ______/
ヽ     /)─|  ミ|      /  /     ,-─ ′ ─────/
∠   (| |.  ヽ__ノ>     ( ̄ノ/     /    −、        /
∠_ / ` /^\__ >      ̄ |─── |─┬┘ |───/
  ノ    (__          ヽ___ノ─┴ 、__ノ ̄ ̄/
 / ̄ ̄\┌─ ′ /^−、    -、_/  /_____ /
/ ̄ ̄ ̄⌒ヽ   (   丿  /   |  /─────/
        \  / ̄/   (__ノ ̄ ̄  //  /
          \/  /         //  /



399 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:25:19 ]
Queue<int>にint詰めて順に足せばいいじゃん

Processにtgt(目標値)を渡す意味も、そもそもProcessをクラス化する意味も
読み取れない
パラメタをvolだけでなく複数にするなら構造体で十分

400 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:31:40 ]
>>399
申し訳ありません。情報が足りませんでした。
私の作った処理でjはキューした時点では値は確定していません。
キューが実行された瞬間にさらに処理をして値を設定するようにしたいのです・・・。

401 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:37:42 ]
このように呼び出し元のクラスを参照し、値を書き換えるクラス
なら引数にrefを付ける

でも、俺なら3つクラス作って別のクラスでpublic void Do()を実装する

402 名前:デフォルトの名無しさん [2009/03/25(水) 00:38:17 ]
IEnumerable<int> Process()
{
for(int i = 0; i < 10; i++)
{
 yield return i;
}
for(int i = 10; i < 20; i += 2)
{
 yield return i;
}
while(true)
{
 yield return 20;
}
}

これが一番シンプルだと思うけど
可変の部分があるならその部分を引数にすればいい

403 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:51:08 ]
>>401
C#でクラスを引数に設定した場合は参照渡しだったと記憶していますが、
あえて明示的にrefをつけるというのはどのような意図を以て行うのでしょうか?

また、3つクラスを作ると仰られましたが、どのように分割するのでしょうか?
Processにあたるクラスは、いろいろな種類を作ろうと考えています。
今回挙げた単純な加算だけではなく、四則、べき乗、などなど・・・。角度を扱う可能性もあります。
もしよろしければご教示お願いいたします。

>>402
かなり私の求めている正解に近いものかもしれません。
頭の中にあった蟠りが一つ解けて、理解が深まりました。
IEnumberableを使うということは考えてもいませんでした。
お答えくださり本当にありがとうございます。

404 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:54:45 ]
(?_?)

405 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:09:07 ]
>>403
オブジェクトを渡すときは参照の値渡し
違いはググれ

> 今回挙げた単純な加算だけではなく、四則、べき乗、などなど・・・。角度を扱う可能性もあります。
どこまで裾野を広げたいのか分らないが,四則"計算",べき乗"計算"と計算という概念で分類すればいいんでないか?
あと,角度を"扱う"っていうのが,どういう意味をさしているのか具体的に言わないと扱えないぞい

406 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:18:45 ]
>>405
角度でラジアンを持ちますが、ラジアンでπ2以上または-π2以下になった場合に丸められます。オーバーフロー防止です。
ですが、よくよく考えてみれば>>402さんの処理でreturnするときにreturn i % (Math.PI * 2);などと記述すればよいのかもしれませんね。

このような稚拙な質問に丁寧にお答えくださり本当にありがとうございました。

407 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 03:44:54 ]
「オブジェクト志向の設計思想」云々言ってて解が>>402・・・いみふ

408 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 04:57:21 ]
もう終わった話題のようだが、
stateパターンのようなことをやりたかったんだろうか?



409 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 07:08:14 ]
>>393(>>373>>386>>376)
勘違いするやつが現れないように代わりに答えておこうか。

まず先に一言、[Flags] enum に限れば「(e & MyEnum.Foo) != 0」は基本 NG だが
元の例はそもそも [Flags] enum じゃないから関係ない。
で、enum の話しに戻すと、

[Flags]
enum MyEnum { A = 0x1, B = 0x2, AB = A | B }

var e = MyEnum.A;
if((e & MyEnum.AB) != 0) {
  Console.WriteLine("I'm AB.");
  if((e & MyEnum.AB) != MyEnum.AB) Console.WriteLine("Really?")
}

例え Flags が付いていたとしても、全ての定数が排他とは限らない。
結合定数を定義することは十分有り得るし、Keys のような特殊な例もある。
「... != 0」と書けるのは、事前に列挙定数の具体値に関する知識を持っていて、
大丈夫であることが分かっている場合のみ。


410 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 07:36:31 ]
>>407
私の書いたソースではあれがネストしていたんです。
呼び出し元の呼び出し元の呼び出し元の・・・という形で参照しているので、
可読性が大変悪く、動作の高速性よりソースの可読性や整備性を重視したオブジェクト指向の設計思想に反していると感じたのです。

411 名前:デフォルトの名無しさん [2009/03/25(水) 09:27:24 ]
オブジェクト指向なんてのは
それに従ってさえいればいいコードが書けるというような
万能の方法論では全く無いからな

412 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:53:22 ]
Formの状態についてお願いします。
状態     通常     最大化
サイズ    (800,600)  (1280,1024)

Formが通常→最大化され、閉じられた場合に
最大化される前のサイズをapp.configにひとつの設定要素として保存させたいのですが、
最大化された後のサイズが保存され、うまくいかないです・・・
Form1_Resizeのイベントでは無理でしょうか?

413 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:57:32 ]
RestoreBoundsで通常時のサイズを取得できるが。

414 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:59:37 ]
>>413
瞬殺されました
どうもありがとです

415 名前:デフォルトの名無しさん [2009/03/25(水) 23:05:24 ]
異なるスレッドで作成されたControlをAddすることは可能でしょうか。
別スレッドのContextに設定されたフォームが閉じられた時、そこに使用されていたControlを再利用したいのですが。

416 名前:デフォルトの名無しさん [2009/03/26(木) 10:23:18 ]
意味の分からない質問かもしれませんが、
System.Console.ReadLine()
を使うと、実行が止まりますよね。
これは何の効果で止まってるんですか?
ReadLineの中で何らかのループが回ってるんでしょうか
それともsleepみたいなコトになってるんでしょうか

独学でずっとやってきて体系的に学んでいないので思い出したように気になりました
良く意味が分からないかもしれませんがよろしければエスパーしてください。

417 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 10:43:58 ]
ループ

418 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 11:42:53 ]




419 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 11:43:58 ]
switch文について

VBの場合
case 1,2,5-8
のように一文で複数の判断をさせることができますが
C,C#では一つの判断しかできませんよね?

これはif文の羅列で処理するしかないのでしょうか?
C#で代わりに同じことをやらせる効率のよい方法ないでしょうか?


420 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 12:03:22 ]
VBのSelect Caseはelse ifのようなもんだからねぇ
工夫次第かな
int a[8] = {1,1,0,0,1,1,1,1};
if (a[i]) hoge();
とすれば1,2,5-8にヒットする

421 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 12:05:30 ]
やっぱりそうですか
ありがとうございます

422 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 12:09:07 ]
>>416
OSは標準入力からデータの読み出しが完了するまで
ReadLineを呼んだプロセスの実行を停止してる。
完了したら実行を再開させる。

納得いかなければ マルチタスク ブロッキングI/O プロセス+状態遷移
なんかでぐぐっておくれ。

423 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 15:39:07 ]
>>419
case 1: case 2: case 5: case -8:

424 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 15:48:27 ]
>>423
その書き方でいいんですか
5-8のところが不思議な感じですね

これはjavaとかでは無理でC#特有の書き方なんですかね?

とりあえずやってみます ありがとうございました

425 名前:デフォルトの名無しさん [2009/03/26(木) 15:49:04 ]
>>422
ありがとうございます。
ググってみます。

426 名前:424 mailto:sage [2009/03/26(木) 15:53:31 ]
javaでもコンパイルできました
C系統ではOKみたいですね
どうもです

427 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 15:55:23 ]
おいおい

428 名前:423 mailto:sage [2009/03/26(木) 15:56:22 ]
ごめん。アホなこと書いてた



429 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 15:58:22 ]
ん?-8がやっぱおかしいの?
全部だめなの?

430 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 16:00:08 ]
コンパイルが通ればすべてよし、みたいに考えるのがまずいんだよw
試してみること、ドキュメント探してみること、いろいろやろうぜ。

431 名前:デフォルトの名無しさん [2009/03/26(木) 16:02:32 ]
ちょっとワラタw

432 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 16:15:10 ]
case 1: case 2:
と複数並べるのは確認できました
5-8の範囲はさすがに無理みたいですね

433 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:06:31 ]
throw new NotImplementedException();
これの仕組みがわからないんですが
メソッドの中にドーンと書いてあるんですが
何に対してのエラーを識別するんですか?
指定範囲内のコードで例外があったらとかならわかるんですが
これより前後に書いたコードに対して適用されるとかなんですか?

434 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:21:32 ]
throw new NotImplementedException
これはなんて書いてあるかわかる?
わかればOK!

435 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:24:17 ]
投げる 新しい ちがう 実装される 例外

436 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:25:49 ]
0で除算するメソッドで引数にゼロが代入されていたときなんかに自分で書くんだよ

if (引数 == 0)
 throw new ゼロだぞ( ゚Д゚)ゴルァ!!

437 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:33:17 ]
わざわざ用意するほどのものなんですか?
好きなところに飛ばした方が話が速いと思うんですが、これって公開ライブラリとかじゃない限り
使う意味ないですよね?

438 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:37:37 ]
いや、使う意味が無いと思ってる人は使わないよ。問題ない。
同じプロジェクトにいないならな



439 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:39:34 ]
つーかそんなん、リファクタリング機能でメソッド作ったときに
自動的にできるくらいだろ?

440 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:44:26 ]
>>433はな
throw自体が無意味って話に変わったんじゃないの

441 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:52:17 ]
意味がわかりませんこれプロジェクトのひな形なんですが、何がしたいんですか?
例外時にNotImplementedException()に飛ばしたいのはわかるんですが、
何に対しての例外かが読み取れなく無いですか?
コードを追加するときはこの行を消すとかはあり得ないですよね

public class ContentProcessor1 : ContentProcessor<TInput, TOutput>
{
 public override TOutput Process( TInput input, ContentProcessorContext context )
 {
  // TODO: process the input object, and return the modified data.
  throw new NotImplementedException();
 }
}

442 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:52:58 ]
throwってなにかね?

443 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:54:34 ]
NotImplementedException(); つまり、
要求されたメソッドまたは操作が実装されていないエラーであることがわかるじゃん

msdn.microsoft.com/ja-jp/library/system.notimplementedexception(VS.80).aspx


444 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:55:40 ]
でも再利用できる機能をまとめて一つのメソッドに並べる場合は便利じゃね?
public boolLogin(string id, string password)
{
try
 return _login.(id, password);
catch (BadPasswordException e)
 //ログインできません例外
catch (BadIDException e)
 //そんなID存在しません例外
catch (ExpireException e)
 //パスワードの期限切れです例外
}
とか

445 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:56:36 ]
>>441
消すんだよ。

446 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:58:42 ]
この場合はthrowの前に独自コードを記述してthrowの前に分岐でreturnに飛ばして
returnに辿りつかなかったら最後のthrowを実行するように書けばいいんですかね

447 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:00:26 ]
>>445
やっぱり消すのが自然ですよね
MSのひな形なんですが、このパターン初めてなので消してはいけない理由があるのかと思ったんですが
普通消しますよねTHX!

448 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:01:54 ]
>>447
実装されてないことを示す例外だから、実装が終わったら消せばいい。
ということ。



449 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:02:45 ]
setjmp,longjmpと同様に、大域脱出に使われるので、乱用はよくない。
プロジェクトによっては、自前で例外throwするのは禁止してることもあるよ。
だから、必須の機能とは言えない。

450 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:03:45 ]
あ、禁止ってわかりにくいな。
そのプロジェクトのコーディング規約(≒ローカルルール)で禁止ね。

451 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:04:23 ]
>>449
誰も必須だとか言ってないだろハゲ

452 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:04:50 ]
>>433
要求されたメソッドまたは操作が実装されない場合にスローされる例外。

453 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:06:51 ]
NotImplementedException を初めて見た時は感心した。
スタブを示す、標準的な例外が用意されているのは便利。
// TODO: とかより、ずっといい。

454 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:19:35 ]
中身が空なだけで実際にメソッド自体はあるのに、NotImplementedってのも変な話だな。
ぜひ「空関数例外」みたいな名前に変えて欲しい。
俺の中ではNotImplementedはSystem.Reflectionでひっかかったときに投げるイメージ。

455 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:23:02 ]
勝手に作れよハゲ

456 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:48:15 ]
NotImplementedException 使うかどうかとかは開発スタイルによるかも
しれないなぁと思った。俺は結構使うほう。

457 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 23:07:21 ]
抽象クラスのvirtualメソッドに使ったりするかな
これを継承したクラスで要るメソッドだけオーバライドして実装
NotImplementedExceptionじゃなくてNotSupportedExceptionでやる場合もあるけど

458 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:41:56 ]
>>455
失礼な
まだほんのりと残っていますぞ



459 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:51:28 ]
>>454
中身が空っぽのメソッド作るのは、
「宣言だけして実装してないよ」って感じだと思うんだけど。
C++ みたいに宣言と実装が分かれてないから空っぽの動体付けてるだけで。

>>457
NotSupported は、
「interface 的には実装しないといけないんだけど、
このクラスでは実装しません」みたいな時に使いたい。


460 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 01:50:52 ]
NotImplementedExceptionはよく使うなー
午前7時に盲状態でコード書かなきゃいけないときとか頼りになる

461 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 09:02:10 ]
レビューで指摘されたんですが
usingディレクティブの記述順序がパフォーマンスに影響する事ってあるんですか?

単に視覚的な問題くらいの認識しかなかったので
ググってみましたが、そういったソースはみあたりませんでした。

教えて!エロい人!

462 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 09:17:08 ]
using の順序が問題になるのって、
拡張メソッドのインポート時くらいしか知らない。

463 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:21:29 ]
コントロールにイベントを実装しようとおもって、delegateを記述してるんだけど、
メソッドの戻り値がvoidのとき、Func<void, string> _EventHandlerみたいに記述できないの?
delegateを記述するの面倒だよ(´・ω・`)ショボーン



464 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:22:53 ]
>>463
Action<>

465 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:41:31 ]
おおありがとう(`・ω・´)シャキーン

466 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 18:46:07 ]
EventHandler<T>にしようよ。

467 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 19:58:59 ]
クラスのメンバで
public string Name;
とすることと
private string _name;
public string Name
{
 get { return _name; }
 set { _name = valiue; }
}
はどう違いますか?


468 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:18:48 ]
なんの釣りだよ。



469 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:19:50 ]
いや本当に違いがよくわからないので教えて下さい

470 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:21:43 ]
ぐぐったんですか?

471 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:23:51 ]
プロパティ public privateで試してみましたが書かれているサイトはよくわかりませんでした
何か専門用語があるのかもしれませんがそれがわからないのでぐぐれません


472 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:34:58 ]
>>467のコードの通りなら、特に使う上での違いはないのでは?
フィールドをPublicにするのは習慣としておすすめできない、というくらいで。

473 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:39:03 ]
フィールドをpublicにするくらいなら、自動プロパティにしろ
public string Name
{
 get;
 set;
}


474 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:42:11 ]
>>473
なんでpublicじゃだめなのかを聞いてるのに自動プロパティにしろなんてのは筋違いだろ

475 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:43:15 ]
private string _name;

public string Name{

476 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:48:12 ]
>>474
誰がそんなこと聞いてる?

477 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:48:26 ]
誰も訊いてない。

478 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:54:34 ]
class cls
{
float[,] test;
}

これって動的配列なんでしょうか?
float a = 0;
for(i=0;i<100;i++){
for(j=0;j<100;j++){
test[i, j] = a;
a++;
}
}
こうやって他のクラスから自由に配列の大きさを決めて格納するのに使えるんですか?



479 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 21:00:12 ]
配列は確保するまで使えません
未割り当てエラー出すだけ

つーかそのくらい実行してみりゃ分かるだろうが

480 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 21:27:17 ]
フィールドをプロパティに変えたときに互換性が取れなくなるから
最初からプロパティにしとけって話だろうけど
再コンパイルすればいいだけだからほとんど意味は無いよね

481 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 21:30:52 ]
>>476
>>467の趣旨はそういうことだろ?

482 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:24:58 ]
>>481
そんなの本人じゃないと分からない。単に違いを聞いてるだけに読める。
>>467の字面通りなら、ほとんど違いはないけど、作法としてパブリックフィールドは
推奨されていない、としか答えようがない。

483 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:36:10 ]
>>482
少なくとも自動プロパティを使えはおかしいだろ
何をいってんだ?

484 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:46:58 ]
>>467
プロパティってのは実はメソッド。
private string _name;
public string Name
{
 get { return _name; }
 set { _name = value; }
}
てのは
private string _name;
public string get_Name()
{
return _name;
}
public void set_Name(string value)
{
_name = value;
}
と書いてるのと同じ。


485 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:48:07 ]
で、どう違うんだ?


486 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:02:01 ]
プロパティならそのまま格納取り出しするだけじゃなくて
条件チェックやらなんやら色々できるだろ

487 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:03:37 ]
そういう理屈なら格納取り出しするだけの自動プロパティって何のためにあるんだよ

488 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:11:28 ]
今は格納取り出しするだけかもしれないけど後でなんか書きたくなるかもしれんだろ



489 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:17:26 ]
まずpublicなフィールドとして記述し、アクセサが必要とされた時点でプロパティに書き換えればいいじゃない

490 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:25:44 ]
フィールドとプロパティではメタデータ上でも区別される

491 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:30:58 ]
ソースレベルで互換性があればいいだろ
そこだけアップデートされるようなライブラリを作ってるなら別だけど

492 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:36:24 ]
使いたくなきゃ使わなきゃいいじゃない

493 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:42:17 ]
じゃメンバ関数をpublicにするということと等価ってこと?

494 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:44:13 ]
もうそれでいいよ

495 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:55:53 ]
屁理屈すぎてもう面倒臭い

496 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:01:32 ]
自分の理屈に合わない理屈は屁理屈ということにしたいんですね わかります

497 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:07:10 ]
>>496
それを屁理屈って言うんだよ。

498 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:09:11 ]
>>497
まるですじの通らない理屈とは思えないが?

>へ‐りくつ【×屁理屈】
>まるですじの通らない理屈。道理に合わない理屈。「―を並べる」「―をこねる」



499 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:09:11 ]
フィールド直接触るとかやめてくれ・・。
未来の自分でさえ信用できないのに、他人の利用者を信じれるわけがないだろJK

500 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:10:30 ]
いやいや好きにやりゃいいじゃん
そいつにとってフィールドもプロパティも一緒つーなら
それ以外の使い方しないんだろうから
どうせ個人でやるだけだろうしw

501 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:18:35 ]
じゃ違うの?

502 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:22:27 ]
Control.DataBindingsと組み合わせるならpublicフィールドの選択肢は無いけどね。

503 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:29:35 ]
なんで?

504 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:39:07 ]
>>503
FormにTextBox2つ貼り付けて
class MyData
{
public string PublicField;
public string PublicProperty { get; set; }
}
作って
textBox1.DataBindings.Add("Text", data, "PublicField");
textBox2.DataBindings.Add("Text", data, "PublicProperty");
として動かしてみたらわかる。
PublicFieldはDataBindの対象にならない。

505 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 03:01:01 ]
>>501,503
その頭の悪そうなレスはやめてくれ

506 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 03:42:08 ]
>>505
同意

とりあえずここ読め
ufcpp.net/study/csharp/oo_property.html

オブジェクト指向には実装の隠蔽というものがあってだね(ぶつぶつ

507 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:13:36 ]
パブリックプロパティを自動実装すると
パブリックフィールドを直接公開するよりも一般に良いということを示さない限り
一般にプロパティにするべきだという理屈は屁理屈でしかないだろ

508 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:20:52 ]
なんでそこまで拘るんだw
自分しか使わない&拡張する予定がなければフィールド使えばいいじゃない。



509 名前:デフォルトの名無しさん [2009/03/29(日) 13:27:47 ]
>>508
拡張する予定があっても他人が使っていても
フィールドで問題ないだろ
どういう時に問題が起きるわけ?

510 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:31:33 ]
フィールドで問題ない問題ない

511 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:38:43 ]
はいはい、その通りですね。
君はパブリックフィールド使えばいい。私は今まで通りプロパティ使うけどな。

512 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:44:41 ]
はいはい、その通りですね。
君はプロパティ使えばいい。おいらは今までどおり使い分けるけどな。

513 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:46:51 ]
春だな
さすがに今日は言っても文句ねえだろ

514 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:51:35 ]
桜も咲いてるしな・・・

515 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:19:23 ]
・get setを制限する必要がない
・setされた値を事前に評価する必要がない
・バッキングストアを仮想化する必要がない
・プロパティ自体をvirtualにしたりsealedにしたりする必要がない
など、すなわち単なる「変数」であれば、プロパティのほうがコストが
高いのは明らかだから、あえてプロパティを使わずフィールドを公開して
構わないと思うよ。

また、将来上記のうち上3点(最後の1点はまるっきりの変更なんで別だが)の
方針が変更される可能性があったとしても、その時点でフィールドを
プロパティに変更すればソースレベルでの互換性は保てるので、問題ない。
(ただし、公開クラスライブラリで、バイナリ互換性が必要な場合を除く)

516 名前:デフォルトの名無しさん [2009/03/29(日) 14:21:23 ]
setを制限したければreadonlyにすりゃいいじゃん

517 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:39:21 ]
明示的に初期値が設定できない自動実装なんて

518 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 15:06:45 ]
プロパティもインライン化されればコストは変わらないんじゃないの



519 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 17:12:56 ]
自作クラスを2つのプロジェクトで使いたい場合、使いたいクラスはどっちのプロジェクトに含ませればいいんですか?
今どっちのプロジェクトにも同じクラスを書いていて修正するときなんか無駄があるような気がしてきました
この場合どっちのプロジェクトにも含ませない方法とかがあってそうした方がいいんでしょうか?変更は頻繁にするんですが

520 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 17:15:44 ]
>>519
片方のプロジェクトからもう1つを参照してもいいし、
別にライブラリプロジェクト作って、それを2つのプロジェクトから参照してもいいし、
ソースを「リンクとして追加」もできるし。

521 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 17:52:48 ]
できました。ありがとうございました
読み込まれるプロジェクトの順番が大事なのかとか変な方向に考えてましたどうもです

522 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 20:07:04 ]
イベントハンドラのサンプルなんかだと、フィールドでそのまま公開されてるようにみえるけど、
これもプロパティで表示したほうがいいの?

msdn.microsoft.com/ja-jp/library/db0etb8x.aspx

523 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 20:16:17 ]
>>522
event キーワードがついてると、普通のフィールドじゃなくなる。
プロパティのデリゲート版みたいな状態のなので、
そのまま公開されてるわけじゃない。

524 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 20:22:34 ]
そうなんだ意味が違うんだね サンクス

525 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 22:08:28 ]
ReadBytesで2次元配列に格納する方法がわかりません
これは1次元としてしか扱えないんですか?

526 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 23:56:19 ]
>>525
嫁が欲しいなら2次元で我慢しとけ

527 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 23:59:32 ]
質問です。
C#の本買って勉強してるんですがNorthwindが何なのかわかりません。
Northwindってなんですか?
ぐぐっても
www.dreamsoft.jp/northwind/index.html
こんなのとか
msdn.microsoft.com/ja-jp/library/ms143221.aspx
こんなのしか見つかりませんでした。

528 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:00:56 ]
MSのデータベース関連のサンプルにちょくちょく出てくる
サンプルデータの名前。
航空会社かなんかのデータっていう想定のサンプル。



529 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:01:05 ]
>>527
後者のリンクにある、サンプルデータベースじゃないの?

530 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:01:12 ]
VS2008EEでプログラムを勉強してる素人です。
拡張コントロールをいくつか作ることで、継承のありがたみは
少しずつ理解できてきたところなんですけど、
インターフェースや抽象クラスの存在意義がなかなか理解できません。
インターフェースの実装を明示することで
その機能が実装されてることが一目でわかるというようなこと以外にメリットが思いつかないんですが
大規模なものを書かないとそこら辺の概念は理解できないものなのでしょうか。

531 名前:デフォルトの名無しさん [2009/03/30(月) 00:14:27 ]
>>530
↓の14章を読んでみればどうかな?
それでも理解できなければ、今は使う必要性がないんだよ。

www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_014/cs2_014_01.html

532 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:15:15 ]
うぐ、あげちまった

533 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:16:12 ]
ありがとうございます。読んでみます。

534 名前:530 mailto:sage [2009/03/30(月) 00:17:11 ]
↑530=533です。ID出ないの忘れてました。

535 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:22:40 ]
>>530
インターフェースと抽象クラスの説明は確かに難しいのかも
例えば家電でいうと・・・

・抽象化
家電は電気製品なのでどんな製品にも必ず電源のオンオフスイッチがある→抽象クラスで記述

・インターフェース
家電は電気製品なのでどんな製品にも必ず通電する必要がある→
だけど電源を供給する方法は、コンセント、電池、バッテリー、ソーラーパネルと多種多様なので、
電源を供給するための端子は付けておくけど、実際の供給方法は製品に任せる

こんな感じ?


536 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:36:10 ]
>>525
どんなデーター形式でも扱えるよ。

537 名前:530 mailto:sage [2009/03/30(月) 00:42:32 ]
>>535
なるほど。既に定義されてるインターフェースを使ってみたら
だいぶそういう概念が理解できてきました。
もっとも自分で定義して実装する必要性を感じるには
もっと大規模なコードを書く必要があるみたいです。
少しずつ使えるようになりたいと思います。ありがとうございました。

538 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:07:27 ]
>>537
stringをフィールドに持つクラスと、intをフィールドに持つクラスで、
それぞれ共通に名前を持つフィールドを持ち、
さらに、それぞれstringに保存された文字列の文字数とintに保存された数字の桁数を取得するメソッドを
interfaceを用いて取得する方法を記述してみれ

abstract public class BaseClass
 public string Name { get; set; }

public class StringClass : BaseClass
 public string StringData{ get; set; }

public class IntClass : BaseClass
 public int IntData { get; set; }

ここまではわかるっしょ 



539 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:18:46 ]
>>538
先生!なぜabstractのBaseクラスを定義しているのかわかりません!
その場合インターフェイスじゃなくて
abstract int GetLength();をBaseクラスに書くのが適切だと思います!

540 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:30:02 ]
boolのような論理値やimageを格納するclassもあるので、
すべて一様にGetLength()が適用できないんです><

でも、それぞれ名前はもってるんです><


541 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:40:42 ]
Interfaceってのは、RubyやPythonなんかの動的型付言語なら不要だけど、
C#みたいにコンパイル時に確定してないと我慢できない潔癖な処理系に
対して、私はこのメソッド持ってますよと、とりあえず宣言するための
姑息な手段。
うっかり安心して呼び出すと実体は、
throw new NotImplementedException();と書いてあるだけなので、結局
1行目と同じ結果になる。


って、あんまり夜中にアンサイクロペディアとか読みふけってちゃ駄目だな。


542 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:53:11 ]
>私はこのメソッド持ってますよと、とりあえず宣言するための姑息な手段。
リフレクションで代用できないの?

それはともかく、まぁ、姑息かどうかはわからんけども、
interfaceを継承してるクラスは、そのinterfaceで宣言した型にキャストして実行できるから、
メソッドを持っていますよと、とりあえず宣言するためだけの手段ではないんでないの?
キャストできますよという意味と同義で書いてるのならその通りかもしらんが。

543 名前:539 mailto:sage [2009/03/30(月) 02:22:10 ]
>>540
interfaceだって戻り値がintのGetLength()作ったら同じことではないの?
abstract int GetLength()をovarrideするのと何が違うの?

俺の言いたかったのはinterfaceの例題を出すなら抽象クラスを使ったら駄目じゃないのかいと言いたい。

>>538のサンプルの場合
public Interface ISample
{
int GetLength()
}

を定義したとしてそのInterfaiceを実装するのはBaseClass?それとも
IntClassや StringClass?
BaseClassがInterfaceを実装したとして
publice abstract int GetLength();


544 名前:539 mailto:sage [2009/03/30(月) 02:26:17 ]
を定義して IntClassや StringClassがそれをoverrideするなら
GetLengthを呼び出す側はわざわざInterfaceで呼ぶ必要もなくなるわけで。

IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元

545 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 02:33:03 ]
>>543
>IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元
すべてはobject型を継承するのは混乱の元?

>interfaceだって戻り値がintのGetLength()作ったら同じことではないの?
違うでしょ
bool型などの論理型にはGetLength()は必要ないわけで。
その理屈をとことん突き詰めれば、すべては同じobject型を継承しているので、
objectクラスにGetLength()を作って、それをoverrideするなり、privateにして隠蔽すればいいことになる。

>そのInterfaiceを実装するのはBaseClass?それとも IntClassや StringClass?
インターフェースを実装するのはintclassやstringclassだね
intclassやstringclassをキャストしてISample型のarrayに保存したり、
is ISample で型を確かめてGetLengthを実行したりとか。

546 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 02:38:16 ]
>>543
じゃ、お題をこんなふうにすればいいかい?

stringとintとboolをフィールドに持つクラスで、
それぞれ共通に名前を持つフィールドを持ちながら、
さらに、intとstringを持つクラスだけに、stringに保存された文字列の文字数と、
intに保存された数字の桁数を取得するメソッドをinterfaceを用いて取得する方法を記述してみれ
ただしBoolClassは論理値なので桁数とかないので桁数を取得するメソッドは追加する必要はない

abstract public class BaseClass
 public string Name { get; set; }

public class StringClass : BaseClass
 public string StringData{ get; set; }

public class IntClass : BaseClass
 public int IntData { get; set; }

public class BoolClass : BaseClass
 public bool BoolData { get; set; }

こんなんでいい?

547 名前:539 mailto:sage [2009/03/30(月) 02:56:29 ]
>>545


>>IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元
>すべてはobject型を継承するのは混乱の元?

継承が悪い(混乱の元)とは言っていなくて、
抽象クラスとInterfaceの使い方を知らない人に
Interfaceの例題を出そうとしてabstractクラスを使っちゃ混乱するでしょと言いたいの。

>>interfaceだって戻り値がintのGetLength()作ったら同じことではないの?
>違うでしょ
>bool型などの論理型にはGetLength()は必要ないわけで。

例題に
class boolClass:BaseClass なぞ書いていないでしょw

>その理屈をとことん突き詰めれば、すべては同じobject型を継承しているので、
>objectクラスにGetLength()を作って、それをoverrideするなり、privateにして隠蔽すればいいことになる。

どう突き詰めれば>>538のBaseClassにGetLength()を定義することがこんな解釈になるのか謎w

>>そのInterfaiceを実装するのはBaseClass?それとも IntClassや StringClass?
>インターフェースを実装するのはintclassやstringclassだね

IntClassやStringClassがInterfaceを実装するなら話は分かるんだけど、
例題に IntClassやStringClassがInterfaceを実装するとどこにも書いてないわけで。
BaseClassがInterfaceをabstractで実装してサブクラスがoverrideすることもできるわけで
話が混乱するでしょ。


結論:初心者に例題出すなら もっといい例題を出そうね。

548 名前:530 mailto:sage [2009/03/30(月) 03:00:38 ]
水を差すつもりはないですけど
ぶっちゃけお二人(だと思うけど)の議論を見てるだけでも勉強になります
経験を積んだ人間に話しを聞ける環境にいないので
自分の理解の甘さが改めて実感できて、素人にはありがたいッス。



549 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 03:09:22 ]
>>547
面倒くせぇなあお前

もし返答があったら、単にinterfaceで記述しただけじゃ抽象クラスに記述するのと同じだから、
>>540で記述したように抽象クラスで実装できない例の存在を示して、
interfaceの型で宣言した変数にキャストして実行できる利点を記述しようとおもったら、すべて台無しじゃねーか

>>548
というわけで関係ない人がすべて解答してくれたわけで答えが出てしまったわけだが、
まあ、なんだがんばれ

550 名前:539 mailto:sage [2009/03/30(月) 03:09:41 ]
>>546
そんなんでいいと思います。

ただ BaseClassをabstractにする必要はないかも?

newさせたくないっていう理由でabstractクラスにするとしても
例題としてはabstractいらないかも。

2次関数を知らない人に教えるときにいきなり 
(sinx)^2 + (sinx) + 5 = 0
みたいな合成関数で例題出されたら混乱すると思う。
丁寧に教えるならシンプルにしてあげないと。

551 名前:530 mailto:sage [2009/03/30(月) 03:16:51 ]
>>549
いや、本当に勉強になります。
問いを与えてもらえて良かったです。
538辺りからをもうちょい読み返してみます。

552 名前:539 mailto:sage [2009/03/30(月) 03:25:40 ]
>>549

>面倒くせぇなあお前
ありがとう

>もし返答があったら、単にinterfaceで記述しただけじゃ抽象クラスに記述するのと同じだから、
>>>540で記述したように抽象クラスで実装できない例の存在を示して、
>interfaceの型で宣言した変数にキャストして実行できる利点を記述しようとおもったら、すべて台無しじゃねーか

小出しにするほうが面倒くさいと思う。

553 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 03:43:37 ]
>小出しにするほうが面倒くさいと思う。
んなこと理解しててわざとやってるっていってんの。
後で反証を説明したほうが効果的に理解してもらえるかなと思ったから。

>>面倒くせぇなあお前
>ありがとう
そのわざとやってるところにチャチャいれられてすべて台無しになってるから面倒くせぇっていってんの
面倒くさいの質が違う

わざと言ってるんだろうけどw

554 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 07:37:45 ]
using(@) {A}
で、@では自作ログ出力クラスのインスタンスを生成しています。
この際、インスタンス初期化時にログファイルを開けない場合は
StreamWriterのコンストラクタが出力する例外をそのままthrowするのですが、
それをcatchするには、
try {using(@) {A}}
みたいに全体を囲わないといけないのでしょうか。
この場合、Aまでtryに含まれてしまうのが嫌なのですけど・・・。

555 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 08:46:39 ]
Log log = null;
try {
    log = new Log();
}
catch (...) {
    throw;
}
using (log) {
}
なんてのもできんではないが全体try-catchでいいと思うよ

556 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:08:44 ]
try
{
MyLogger logger = null
logger = new MyLogger();

// ...


}
catch (MyLoggerException myloggerex)
{
if (myloggerex.InnerException is IOException)
{
// ...
}
}
finally
{
if (null != logger)
{
logger.Dispose();
}
}

自作ログ出力クラスが独自の例外を送出するようにすればよくない?

557 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:15:45 ]
AクラスをBクラスのメソッドの引数として渡した場合はアドレス参照で渡されるのはわかりましたが
そのメソッド内で、渡されたAクラスをBクラスのフィールド宣言に代入した場合もアドレスが保持されるだけなんでしょうか


558 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:19:28 ]
アドレス参照って誤解を言い方を止めろ
参照渡しと値渡しだ

参照型は指定しない限り常に参照のコピーを取るだけ
値型は常に値そのもののコピー



559 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:23:16 ]
>>558
参照渡しと値渡しと
参照型と値型は別物ぞよ

560 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:33:54 ]
>>559
そうですね^^;

561 名前:554 mailto:sage [2009/03/30(月) 22:48:41 ]
>>555-556
ありがとうございます。
独自の例外を作って、tryは今まで通りusing全体を囲うのが一番シンプルになりそうですね。
独自の例外なら問題なくcatchで切り分けられるし。

562 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 05:00:24 ]
すみません、質問いいですか?

例えばラベルをある数だけ生成したい場合コントロールの名前はどうつけたら
いいのでしょうか?

デザイナで置くとlabel1とか自動で付きますよね
forループで廻すとなるとどうするのでしょうか・・・


563 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 07:28:59 ]
意味不なんだがエスパーすると。
forループの中でコントロールを自分で作る。

564 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 07:55:10 ]
こういうことをやりたいのか?
for (int i = 0; i < 100; i++)
new Label() { Name = "label" + i.ToString() }


565 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 08:04:16 ]
まさにそれです
自己解決しました


566 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 14:40:25 ]
まさにそれですって
…自己解決ちゃうやん

567 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 15:22:21 ]
ワロタ

568 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 18:50:25 ]
ttp://msdn.microsoft.com/ja-jp/library/ms747027.aspx
ここの「コードを使用してイメージをレンダリングする方法」(一番下のソース)を実践したいのですが、
WPFアプリケーションプロジェクトに貼り付けただけではウィンドウに表示されません。
(貼り付ける場所がおかしいのだと思いますが…。)
どういう風に書けばいいのか教えてください。
VSC#2008Expressを使ってます。



569 名前:デフォルトの名無しさん [2009/03/31(火) 23:52:30 ]
.NET 2002(C#) で FTPクライアント処理を実装したいのですが、
おすすめのライブラリはありますか?


570 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 00:01:53 ]
質問です。
埋め込んだリソースファイル(WAVE)を指定した場所に直接コピーしたいのですが
どのように記述したらできるのでしょうか?

571 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 00:08:08 ]
ストリームを直接ファイルストリームに出力すればいいんでね?

572 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 01:22:06 ]
>>569
市販の?

573 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 01:24:51 ]
>>569
basp21はどうよ?

574 名前:デフォルトの名無しさん [2009/04/01(水) 01:40:38 ]
すいません。質問です。

フォームにデザイナで追加したコントロールには、何か、インデックスのようなものが割り振られてたりはしないのでしょうか?
自分はボタンをデザイナで一個一個大量に配置してしまったのですが、
それをプログラムコードから利用するときにめんどくさくて大変です。
最初から配列でとっておけばよかったと今では後悔していますが、
今からでも添え字があれば、それを元にエレガント且つ簡潔にコードからの利用が可能になるはずです。
誰かうまいやり方など知ってる方がいらっしゃいましたらお教えくださいませ。


575 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 01:53:07 ]
作り直せば?

576 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 01:54:17 ]
自分で配列に入れるコードを書けばいいじゃん。


577 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 01:56:21 ]
>>574
>フォームにデザイナで追加したコントロールには、何か、インデックスの
>ようなものが割り振られてたりはしないのでしょうか?
ない
プログラム内で配列でコントロールを生成して使ったことがある。

578 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 02:04:02 ]
Control.Controls



579 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 02:09:20 ]
なんと、そんなのが有ったのか・・・>>577のないは訂正だ。

580 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 02:47:59 ]
類似質問ですが
グループボックス内にテキストボックスやプログレスバーなどが沢山あり
それを実行時にグループボックスごと追加する場合
ユーザー定義コントロールを作ってnewするのがいい方法なのでしょうか?

又、その場合ユーザー定義コントロールの作り方が良くわかるサイトなどご存知ないでしょうか?

宜しくお願い致します。

581 名前:デフォルトの名無しさん [2009/04/01(水) 03:10:49 ]
574っす。
>>575-579
ありがとやんした!!


582 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 03:43:54 ]
>>569
uwa.potetihouse.com/library/tkfpdll.html
とか

583 名前:568 mailto:sage [2009/04/01(水) 03:53:22 ]
別のスレで聞いてきます。どうも〜

584 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 06:23:48 ]
質問です。
今使用しているアンマネージDLLに int WINAPI hoge(float *p, int size); のような関数があります。
float *pは呼出元で確保した配列のポインタなのですが、16バイトアライメントされている必要があります。
C#でアライメントを考慮した配列を確保する方法などあるのでしょうか?

585 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 07:28:15 ]
[StructLayout(LayoutKind.Sequential, Pack=16)]
struct Test
{
  データ
}



586 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 09:21:18 ]
yield の使い道って何かあるのでしょうか?
なんとなく気になって@ITとか見てみたんですがなんかわかりづらい・・・・
わかりやすい解釈のページとか教えていただけると助かります。

587 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 09:30:26 ]
列挙処理書くならかなり便利なんだけど。


588 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 09:36:26 ]
>>587
そのような記述を多く見るのですが・・・orz
いかんせん読解力が無いようで・・



589 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 09:40:11 ]
>>588
今は大抵 LINQ の標準ライブラリであらかた機能がそろうけども、
特定の条件だけ満たす要素を取り出したり、
特定のプロパティの値を取り出すような関数書いてみ。

それも、いったん new List() するんじゃなくて、遅延評価で。


590 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 10:00:47 ]
>>588
すべてを終えるには時間のかかる処理をしながら、条件を満たした項目から表示していくプログラムを作れば理解できるよ
記憶領域を使わないですむし、演算の終わった項目から並列処理にかけたりできるしね

591 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 10:02:48 ]
yieldは別に速くはならないだろ

592 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 10:06:41 ]
>>589-590
ありがとうございます。
そういう条件でちょっとサンプルでもつくってやってみます。

593 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 12:20:42 ]
>>586
こんなのはどう?
msdn.microsoft.com/ja-jp/events/dd283187.aspx



594 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 12:45:17 ]
最近更新してないと思ったらやはり板移転検出してた・・・

595 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 13:12:07 ]
>>593
情報ありがとうございます。
こういう使い方が出来ると言うことなんですね。

確かに >>599が言うように
>特定の条件を満たす要素を・・・
というのはその通りかと
処理がそれを呼び出す側ですっきりしそうです。

使い道が少しですがわかった気がします。
タイミングさえあれば今度どこかで実装してみようと思います。

596 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 13:26:44 ]
質問ですが、
aspxでファイルにResponse.Redirect(ファイルURL)でダウンロードさせてるんですが、
複数ユーザの同時アクセス数を制限するにはどうしたらいいのですか?
例えば上限を10にしておいて同時アクセス数が11になったらエラーページに飛ばすみたいな。

static Queue _queue = new Queue();
static object _lock = new object();
page_Load()
{
lock(_lock)
{
if(_queue.Count > 10)
Response.Redirect(ErrorPage);

_queue.Enque(new object());
}
try
{
Response.Redirect(DownloadURL);
}
finally
{
lock(_lock)
{
_queue.Deque();
}
}
}

こんなんしか思いつかないんですが・・・
定石みたいなのあるのでしょうか。

597 名前:596 mailto:sage [2009/04/01(水) 13:32:33 ]
>>596に追加で
ダウンロード時間を30秒と決め付けて
finally句でDeque前に
Thread.Sleep(30 * 1000);

598 名前:596 mailto:sage [2009/04/01(水) 14:44:42 ]
Sleepじゃ駄目だ〜(T_T)
あと DequeueのlockとEnqueueのlockでデットロック起こしてる〜(T_T)
ってワケで作り直し。

private volatile static Queue _queue = new Queue();
protected void Page_Load(object sender, EventArgs e)
{
if (_queue.Count >= 10)
{
Response.Write("混雑してます 同時アクセス数" + _queue.Count);
Response.End();
}

_queue.Enqueue(new System.Threading.Timer(new TimerCallback(tmr_Tick), null, 10 * 1000, System.Threading.Timeout.Infinite));

try
{
Response.Write("同時アクセス数" + _queue.Count);
Response.End();
}
finally
{
System.Diagnostics.Debug.WriteLine("finally");
}
}

private static void tmr_Tick(object state)
{
_queue.Dequeue();
System.Diagnostics.Debug.WriteLine("Deque Count" + _queue.Count);
}



599 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 14:50:04 ]
それでできる? 俺なら、外部(データベースとか)に、接続数を保持しとくな。

600 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 15:21:19 ]
共有リソースへのアクセス数を制限するならセマフォ使えばいいしょ

601 名前:596 mailto:sage [2009/04/01(水) 17:28:08 ]
>>600 セマフォ使ってみました。
5スレッドまで。1秒待っても駄目だったら混雑中。
private volatile static Semaphore _pool = new Semaphore(0, 5);
static Default() {_pool.Release(5); }
protected void Page_Load(object sender, EventArgs e)
{
if (!_pool.WaitOne(1000))
{
Response.Write("混雑しています。");
Response.End();
}
try
{
Response.Redirect(URL);
}
finally
{
Thread t = new Thread(() => {
Thread.Sleep(10 * 1000);
int cnt = _pool.Release();
System.Diagnostics.Debug.WriteLine("cnt " + cnt);});
t.Start();
System.Diagnostics.Debug.WriteLine("finally");
}
}
}

602 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:35:20 ]
初心者なので、用語の使い方を間違っていたらすみません。
良く経験の長い方のレスなどを見ていると

フレームワークを拡張するというような記述がありますが
具体的にはどのようなことをいうのでしょうか。
フレームワーク内で既に定義されているクラスを
継承して拡張した自分なりのクラスを持っているという理解で正しいでしょうか。

また、拡張したフレームワークを使用してアプリを作った場合
そのアプリは、拡張されていないフレームワーク上ではキチンと動作しないものなのでしょうか。
よろしくお願いします。

603 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:52:15 ]
フレームワークの拡張という言葉はあまり使わない気がする

フレームワークってのは、機能を簡単に使えるようにした壮大なライブラリ(クラス)群で、
料理で言うところの味噌や醤油のような調味料の集まりみたいなもの。

この調味料を継承して拡張して機能を自作で追加すると、
パスタにかけるだけで美味しいパスタができるというトマトソースを作ることができる。

フレームワーク(調味料)さえあれば、トマトソースのできる調味料が揃っているので
作ることはできるけど、レシピは教えてあげないと作れない。

そのレシピはdll(ダイナミックリンクライブラリ)といってレシピの集まり。
これを配布してあげることで、同じフレームワークを持っているPC上であれば、
どれもおいしいトマトソースのパスタを作ることができるという感じ。

604 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:56:44 ]
一般的な意味での「フレームワーク」と、.NET Framework は違う層だから、
そこは気をつけてね。

605 名前:602 mailto:sage [2009/04/01(水) 21:12:05 ]
言葉から、フレームワークそのものを追加・変更するような想像をしていたんですが
独自に拡張したクラスライブラリを作成するということだったんですね
納得いきました。ありがとうございました。

606 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 21:55:48 ]
横槍だけど
フレームワークはライブラリより広義の「手法」的な意味だとおもうんだぜ?
機能群はライブラリで,(利用法とか運用法も含めた)方法論的な意味でフレームワークって良く使う

607 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 22:31:43 ]
>>601
横ですが、Semaphoreはそうやって使うんですね
参考になりました

608 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:10:51 ]
階層が深くて扱いづらいintの変数に別名を付けるにはどうすればいいんですか?
int a = bbbb.ccccc.ddddd;
とすると値のコピーになりますよね
これを参照にしたいんです



609 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:26:33 ]
usingだめ?

610 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:29:35 ]
それクラスの外に書くやつですよね
クラスで管理したいです

611 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:31:13 ]
調べようぜ少しくらい
ttp://msdn.microsoft.com/ja-jp/library/yh598w02(VS.80).aspx

612 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:33:15 ]
ワラタ

613 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:33:15 ]
そういうものが必要になることじたい何かおかしいのだが、
プロパティにしたらどう?

int A { get { return bbbb.ccccc.ddddd; } set { bbbb.ccccc.ddddd = value; }}

614 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:37:26 ]
unsafeだめ?

615 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:39:03 ]
>>611
そっちか。それだめです期限付きでその中ではコピーされますよね
参照がいいです。

616 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:45:36 ]
・・・・・・(;´∀`)

617 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:47:43 ]
だからunsafeつかって好きにかけや

618 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:55:39 ]
FontDescriptionという構造体を呼び出すときに

fd = new Microsoft.DirectX.Direct3D.FontDescription();

としているんですが
次のエラーが出てしまいます

次のメソッドまたはプロパティ間で呼び出しが不適切です:
'Microsoft.DirectX.Direct3D.FontDescription.FontDescription()' と
'Microsoft.DirectX.Direct3D.FontDescription.FontDescription()'

ビルドしてみるとエラーがあるにもかかわらず問題なく動いているようです
これはどうすればいいんでしょうか



619 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:04:06 ]
質問です。

class HogeCollection : IEnumerable<Hoge>

のように、IEnumerable<T>を実装したコレクションのインスタンスがあるのですが、
そこから動的にHogeの型を取得するにはどうすればよいのでしょう?


620 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:08:24 ]
リフレクション

621 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:12:26 ]
GetType().GetInterfaces().First(i => i.Name == "IEnumerable`1").GetGenericArguments()[0]

かな
もっといい方法もありそうだけど

622 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:17:47 ]
>>613
それも値がコピーされて格納されるじゃん
一瞬でも複製を作りたくないんだけど
ほんとに引数にref指定してその中だけで使えるように渡すしか値型を参照で保持する方法はないの?

623 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:20:37 ]
>>621
Nameを使うと誤判定の可能性があるので、
オープンジェネリック型を使った方がいいな

GetType()
.GetInterfaces()
.First(i => i.GetGenericTypeDefinition() == typeof(IEnumerable<>))
.GetGenericArguments()[0]

624 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:24:10 ]
structのこといってんの?
一瞬でもコピーされるのの何が問題なのかわからんから答えようがないよな

625 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:24:38 ]
>>620-621,623
なるほど!ありがとうございました。

626 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:26:40 ]
unsafeでポインタでFA

627 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:27:44 ]
unsafe対応してないの!

628 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:28:37 ]
すまんunsafeしかないってことか
構造を変えるわ、あきらめたthx




629 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:31:21 ]
>>622
初心者スレに行って質問の仕方から勉強しなおしだな

630 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:40:56 ]
>>622
それくらいの余計なコピーの作成くらい、実行時には最適化で消えると思うよ。

631 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:43:19 ]
もしかして、複数スレッドから読み書きされるからコピーされると困る って話なのか?

632 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:51:16 ]
たぶん異なるスレッドから見てるんでしょ

関係ないけど
参照でコピーしても、そのポインタを保持してるんだからメモリの節約にはならないんだっけ?

633 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:53:22 ]
ただ呼び出しがめんどいってだけじゃね?最初の質問からすると。
最後にまた代入すりゃいいじゃんって思うけどねw

んで質問ですけど、unsafe使って問題になることって何ですか?
unsafe内のコードに問題が無いという前提で。

634 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:56:39 ]
関数の引数でref使う方法もなくはないけど、
aliasをサポートする別の言語を使うしかないな。C++/CLIで何とかならなかったっけ?

C#でもこういう裏技はあるけど正直おすすめしない。
int hoge = 0; 
TypedReference tref = __makeref(hoge); 
__refvalue(tref, int) = 5; 
Console.WriteLine(hoge); 


635 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:57:31 ]
>>633
>unsafe内のコードに問題が無いという前提で。
その前提が"成り立つ事を保障できない"事こそが最大の問題だと思うのだけど

636 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:01:34 ]
インテリセンスではエラー波線でないんですが、
オブジェクト参照がオブジェクト インスタンスに設定されていません。
というエラーが出るのですが、なんでですか?

637 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:02:41 ]
オブジェクトがnullなのにメソッドを呼び出したかなんかしたんだよ

638 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:04:35 ]
宣言時に値は入れてるんですが、起動時の順番が問題で宣言がまだ見つからないってことですか?



639 名前:デフォルトの名無しさん [2009/04/02(木) 20:06:40 ]
入れてると思ってるだけで入ってないんだよ
ぬるぽってやつだよ

640 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:07:40 ]
  ∧_∧
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__∧∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>639

641 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:09:10 ]
pub class a
pub int data = 500;

pub class b
pub int data;
pub b(a aa)
{
data = aa.data;
}

でdata = aa.data;でエラーでるんです

642 名前:デフォルトの名無しさん [2009/04/02(木) 20:10:40 ]
aaがnullなんだよ

643 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:11:31 ]
>>635
そりゃそうなんだけど、それ以外にもなんかあるのかなーと思ったけど
それ以外ないわな。unsafeは使用禁止とか普通にあるだろし

今回の参照の件とかはそれほど問題にする意味もないのかなと考えてたけど
まぁunsafeなんだし、使わなけりゃ一番問題ないな

644 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:14:19 ]
>>642
ありえないです。class bをaaを渡してnewした時初めてthis.dataに入れようとしますよね
ここでエラーになるってことはaaは入ってるんです

645 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:17:31 ]
ブレークポイント設定してaa.data;のところにカーソルあててみなよ
aaがnullになってるから

646 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:20:49 ]
nullになってました
自信あったのにショックです
ありがとうです

647 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:28:51 ]
エラーが出てるけど、自信があるのでデバッグしません!

648 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:29:49 ]
>>634
ref 使う方法。変態のきわみだ。

delegate void Alias(ref int i);
static void Main() {
  int bbbb_ccccc_ddddd = 0;
  ((Alias) delegate(ref int i) {
    i = 98765;
  })(ref bbbb_ccccc_ddddd);
  Console.WriteLine(bbbb_ccccc_ddddd);
}




649 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:30:21 ]
事前にエラーがわかる静的言語は便利なことがよくわかるよな
特に初心者の人にとっては

650 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:09:57 ]
構造体の初期化はどうかけばいいのでしょうか
Vector3 a = {0.0f, 0.0f, 0.0f};


651 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:12:41 ]
コンストラクタが使えるだろ

652 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:12:52 ]
Vector3 a = new Vector3(0.0f, 0.0f, 0.0f);

653 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:13:05 ]
構造体内にコンストラクタを書いてそこで初期化

654 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:18:52 ]
thx!

655 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:20:18 ]
>>633
部分信頼とかセキュリティ上の理由でunsafeコードを実行させてくれない仕組みに引っ掛かるとか。

656 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:24:22 ]
struct Data {
 int a, b, c, d, e......;
}

class Cupsel {
  Data data;
}


657 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:49:48 ]
>>655
はーなるほど。そういう仕組みがあったのねぇ
セキュリティポリシーによるようだね。通常はローカルだと問題ないのかな
今までなんも考えなかったわ。ありがとう

658 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:01:07 ]
System.Drawing.Graphics g = Graphics.FromImage(backBuffer);
g.Clear(Color.Black);
g.DrawImage((Image)image, new Point());
Graphics.FromHwnd(panel1.Handle).DrawImage((Image)backBuffer, new Point());

WinFormsで、高速に、ちらつかせずに画像表示をさせたいんですが
どうやるのがいいんでしょうか?
描画するまで画面を更新されないようにするやり方がわかりません・・

それと、加算合成とかをするにはDrawImageでは無理そうですがどうすれば。



659 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:02:18 ]
ちらつき防止はコントロールのDoubleBufferedでいけるんじゃないの?
あと、Graphics.FromHwnd(panel1.Handle)よりもpanel1.CreateGraphics()のほうが普通だと思う。

660 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:02:33 ]
>>634
話は戻るが、そこでusingだ。

661 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:05:46 ]
>>618分かる人いませんか?

662 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:26:07 ]
何だろう。よく分からんけど、バージョン違いのアセンブリを参照してるとか?
参照設定はどうなってる?

663 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:02:12 ]
>>660
usingディレクティブの別名は名前空間と型名だけだったと思うが、
質問者は変数の別名が欲しいといってるんじゃないのかな?

664 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:23:36 ]
>>662
DirectX関係で参照してるのは

DirectX
Direct3D
Direct3DX
DirectInput
DirectSound

です
Direct3DXのバージョンは1.0.2911.0で他のものより新しいのを使ってたんですけど
バージョンをそろえてみても同じエラーが出ます


665 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 02:44:15 ]
>>664
CS0121?
msdn.microsoft.com/en-us/library/ky5f1hz8.aspx
どうやらオーバーロードなどをしていて,複数の選択肢が暗黙的な型変換で,動作が決定不能になる時に発せられるらしい.
状況によって変わってくるから,他の部分で名前と名前,型と型がバッティングしていないか確かめてみたら?

あと,なんだか Microsoft.DirectX.Direct3D.FontDescription で検索すると,成功している人が少ない雰囲気.

666 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 07:06:03 ]
アクセス制限機能つきのアプリを作りたいです。

ユーザ権限やパスワード管理機能つけたいんだけど、
一から作るしかないですか?

.NET Framework 2.0 ならいいライブラリがありそうだけど見つけきれません。。。



667 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 07:51:41 ]
使ったことないけど、System.Security名前空間から適切な制限を見つけてDemaidメソッド呼び出せばいいんじゃね?

668 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 10:34:17 ]
System.Windows.Form.WebBrowserをIE8に変更できませんか?
OSのIEは8に更新しました

Vista + VS2008 です



669 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 10:41:42 ]
>>668
更新した時点でもうなっとるがな。

670 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:13:53 ]
windowsアプリで自動アップデート機能をつけようと思うのですが
Program Files以下のファイルを更新するときは
管理者権限が必要ですよね。
Vistaの場合管理者でログインしても
普通にアプリを実行するとWindowsPrincipalはUserになっちゃいますよね。
右クリックで管理者として実行を行わないと
管理者権限で実行されませんよね。
そのため自動アップデートによるアップデートができないと思うのですが、
世に出回っているVista対応アプリはどうやって対処しているのでしょうか?

671 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:18:24 ]
>>670
UAC の昇格をしてるでしょ。

672 名前:668 mailto:sage [2009/04/03(金) 15:21:40 ]
>>669さん
確認くんで調べたらIE7のままなんです

673 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:25:11 ]
>>672
その結果を貼り付けてみ。互換モードになってるとかの落ちじゃないよね?

674 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:41:32 ]
IE8 WebBrowser Control で検索したらすぐに答えが出てきたぞ
ttp://blogs.msdn.com/ie/archive/2008/03/18/webbrowser-control-rendering-modes-in-ie8.aspx

675 名前:670 mailto:sage [2009/04/03(金) 16:08:08 ]
>>671
ユーザが意図的に管理者として実行をして、
昇格をしてもらわないとアップデートできないので、
世に出回ってるアプリはどう対応してるのかということを質問しています。
普通に実行したときはバージョンアップの通知だけで、
通知があったら「管理者として実行」してもらうと言うことになるんでしょうか。
でもそれだとUACを知らない、年配などのライト層は
ずっとバージョンアップできないってことになりますよね。
しかもそれって、自動アップデートではないですよね。

676 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:11:59 ]
>>675
よくわからんけど、セキュリティソフトなんかは予めUAC昇格させる設定を
ユーザーにさせてるんでないの?
都度か一括かの違いで

677 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:17:35 ]
>>675
つか、何言ってんの?

「管理者として実行」しなくても、UAC の昇格を行うことはできるよ。
一般的な方法としては、マニフェストを書いておいて、そのアプリを呼び出す。
新しいバージョンがあるかを確認するアプリと、実際に更新をするアプリに分ける、
って感じだね。

Firefox も、ATOK も HP のプリンタドライバも、そんな感じでやってると
思うけど・・・。

678 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:24:46 ]
Google ChromeがAppData内にインストールされるのは
UACの昇格なしでアップデート可能にする為だって話を聞いたことがある



679 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:25:02 ]
>>677
何言ってんのか分からないのに答えられるってすごいなぁ。
しかも最後、自信なさげなところがなんとも。

680 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:25:20 ]
>>678
そもそも ClickOnce だし。

681 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:27:37 ]
XPユーザーとしてはUACの昇格とかわけわかんないし怖いよ
今はそんなのも気にしなきゃならんのか

682 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:29:51 ]
VistaユーザーだってUACなんか訳わからんよw
Linuxみたいにアクセス権限だけでいいだろって突っ込まれまくりだろ

683 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:32:42 ]
>>679
「UAC 昇格起動」と「修辞的疑問文」でくぐってからまた来てね。


684 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:33:35 ]
全世界の奴がMSに文句つけまくっていじめまくった結果がこれだよ
そして無意味なセキュリティをつけたらフルボッコだよ

685 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:34:51 ]
>>684
× 全世界の奴
○ 狂ったLinuxユーザー

686 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:35:58 ]
なんでLinuxユーザーが文句つけるんだ

687 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:38:37 ]
>>680
ClickOnceって.NETアプリ以外でも使えたのか

ClickOnceと同じ場所を使ってるだけかと思ってたよ

688 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:40:53 ]
>>687
正確には、インストーラとして使ってる、ってとこかと。
そのおかげで、統合認証以外のプロクシを使ってると、インストールすらできないw



689 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 23:29:47 ]
>>675
Verb を runas にしたら昇格するよ。
アップデータの PE わけて起動させたほうがいいかもしれないけど。
なんとなーく勘違いしてそうなので UAC についてプログラマの視点から
指摘しとくと、昇格ダイアログ出すまではプログラムで可能。
OK ボタン押したら昇格ダイアログ→OK → アップデートってやるんだよ。

あとアップデートに関して言えば、パッチパッケージにすれば明示的な
昇格はいらない(ポリシーにより不可になるし署名が要るけど)。
Program Files 以下でも。実は古くからある機能だが。
実際には、パッチは管理や検証がめんどくさくなるのであまり使われな
いけどな。

>>681
Vista ユーザーからしたら XP の何もなく管理者で動くの不安になる正直
かといって Users で使おうとしたら不便極まりないし。両立できてかなり
いい機能だと思うがなぁ >UAC。リダイレクトとかの機能含めてな。

690 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 00:26:26 ]
>>665
はい、CS0121です

引数なしのコンストラクタを呼び出しているのに
二つ選択肢があるっていうのがちょっと理解できません・・・
ヘルプのコンパイラ エラー CS0121の使用例は理解できるんですが・・・

エラーは吐いているんですがビルドできるし正常に動作しています
それも理解できないし気持ち悪いです

691 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 02:14:56 ]
int a=0,b=0,c=0;
int line_count = arrText.Count;
ar_OKPOS = new List<int[]>[line_count];
for (int i = 0; i < ar_OKPOS.Length; i++){
ar_OKPOS[i] = new List<int[]>(new int[][] { new int[2] });
}
foreach (string sOutput in arrText)
{
// 一行ずつ読み込んで,各行をsplitメソッドで分ける
string temp = (string)arrText[a]; // string型にキャスト
string[] temp2 = temp.Split(',');// splitメソッドで文字列アレイにして数える
int col_count = temp2.Length; // 列数を数えているだけ

string[] temp_line = sOutput.Split(',');
for(int i=0;i<temp_line.Length;i++)
{
for(int k=0;k<2;k++){
i = i + k;
ar_OKPOS[a][b][c]=Convert.ToInt32(temp_line[i]);
c++;
}
c = 0;
b++;
}
b = 0;
a++;
}

692 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 02:24:35 ]
すいません 誤爆してしました

693 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 08:52:22 ]
デザインパターンとか全然勉強せずにプログラマやってるけど、勉強したほうがいいのかな?

694 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 08:54:14 ]
デザインパターンはなんかJava臭いよな
C#はオブジェクト指向至上主義じゃないから合わないんじゃない

695 名前:デフォルトの名無しさん [2009/04/04(土) 09:52:38 ]
標準のクラスライブラリでも結構それっぽいのはよくでてくるよ
ただjavaと違って、MSはほとんどデザインパターン用語を使わない

696 名前:デフォルトの名無しさん [2009/04/04(土) 13:38:17 ]
privateなメンバ変数もprivateなプロパティとして表示させたほうがいいですか?

またメソッドでメンバ変数を利用するときなるべく引数として渡した方がいいですか?
それともメソッド内でいきなり使用しても問題無いですか?

たとえばクラスに以下のようなメソッド等があったとして
private int _num;
public void Method()
 int num = CalcMethod(2);
private int CalcMethod(int num1)
 return num1+_num:
こういう書き方が良いのか
private int _num:
public void Method()
 int num = CalcMethod(2, _num);
private int CalcMethod(int num1. int num2)
 return num1+num2;
こんな書き方のほうがいいのか知りたいです。
例では単なる足し算ですが、複雑な計算をしているという仮定です。

697 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:41:03 ]
演算要素を全て引数で取らせるならstaticにする

698 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:20:05 ]
メソッドを呼び出す側からすれば,メソッド呼び出しはオブジェクトを操作することなので
内部状態を存分に使ってもらって構わない気がする.



699 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 15:33:03 ]
ありがとう
なるべく引数で渡したほうが、その中で完結するのでわかりやすい気がして
じゃあ、あんまり気にしなくていいってことかな?


700 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 15:58:22 ]
計算処理のように内部状態に関係なしに定義できるものは、
内部状態非依存(static)の方が単体テストしやすい

まあ、その例くらいの規模なら大して変わらないんだが

701 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:06:09 ]
>>696
むしろそのメソッドを定義したクラスはどんな責任と制約をもってんのよ?
メソッド単体じゃあなんともいえない

>699
時と場合による
プログラミングしやすい分かりやすさもあれば、
利用しやすいわかりやすさもある

702 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 17:48:14 ]
VC#単体(他から持ってきたライブラリを使わず)で開発したソフトやゲームを
販売する場合、ライセンス等の問題ってありますか?


703 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 17:59:31 ]
場合による。

704 名前:デフォルトの名無しさん [2009/04/04(土) 21:17:48 ]
ミサイル防衛システム作りたいんですがヒントだけでもください

705 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:25:07 ]
MDIで作成した子フォームに含まれるコントロールを取得後、アクセスしたいんですが
foreachでいちいちループ回さないといけない・・・
なんか他にいい方法ないでしょうか?
子フォームはアクティブな状態のものです

if (!(this.ActiveMdiChild as Form == null))

{
foreach (Control Ctrl in (this.ActiveMdiChild as Form).Controls)
{
 if (Ctrl is TextBox /*例としてテキストボックス*/ )
 {
  //処理
 }
}
}


706 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:41:58 ]
全コントロールを対象に処理が必要なら foreach で回さざるを得ないだろ。
特定のコントロールのみを対象にするなら Panel か UserControl に貼り付けて
必要なコントロールへのアクセスを容易にすればいいよ。

707 名前:705 [2009/04/04(土) 21:54:17 ]
ん〜じゃあ無理か
Panelのリストを管理するとまた手間がかかりますしねえ・・・
どうもありがとうございました

708 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:05:22 ]
動的に作成する場合でもIList<>に入れればいいし、
あらかじめポトペタならコントロールが限られてるから
どちらにしても最低限のループでいけるんじゃないの?



709 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:16:50 ]
Linqでコントロールの種類ごとに連想配列に分配するクエリを作れば?

710 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:29:30 ]
>>702
ないよ

711 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:12:49 ]
Form activeChild = this.ActiveMdiChild as Form;
if (activeChild != null)
{
  activeChild.Controls.Where(c => c is TextBox).ToList<TextBox>().ForEach(t =>
  {
    // 処理
  });
}

かえって煩わしいな。

712 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:29:55 ]
>>711
ん?
実験してみようとしたのだが、インテリセンスにWhere()が表示されないのだがなんでだ?

713 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:42:19 ]
ControlCollectionがIEnumerable<Control>を実装してないからか?

714 名前:デフォルトの名無しさん [2009/04/05(日) 00:43:46 ]
だな
気がつかなかった!すげー便利じゃん!と思ったのにorz

715 名前: [2009/04/05(日) 00:52:48 ]
今までたくさんのサイトから通報者つのりあと少し
です
こいつは違反出品で昨日二度削除されました
auok.auone.jp/_ev?tr=83751566&et=2
空き巣に入られた?以上では‥
薔薇チョコ洋子さんは靴の転売や上履き二回削除されてるのに
今回は長期使用の文を消して書いてます
悪質なので評価欄の誹謗中傷の理由で通報お願いします

auok.auone.jp/item/item_189662269.html?u=4682520
わいせつ物

auok.auone.jp/item/item_189667641.html?u=4682520
わいせつ物
三箇所違反ですのでよろしくお願いします


716 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 02:53:12 ]
this.ActiveMdiChild.Controls.Cast<Control>().Where()とか?

717 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:03:10 ]
クラス内の自動プロパティを初期化したいのですがコンストラクタ内でするしかないのでしょうか?
例えば
public string Name{get;set;}
というものがあって、Nameは始めはnullですが、""に初期化しておきたいのです。
フィールドでしたら
private string Name = "";
と出来ます。
プロパティの量だけコンストラクタにも初期化する量が増えてしまうのでフィールドのように出来れば一度に初期化したいのですが方法はあるのでしょうか?

718 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:03:27 ]
>708 がベストだろ



719 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:10:31 ]
クラスを継承したときに基本クラスのメソッドにコードを追加するように書くにはわかりました。

720 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:26:10 ]
>>717
ありません
自動プロパティの使用をやめるか普通にコンストラクタで初期化してください

721 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:52:29 ]
>>717
リフレクションでstring型のプロパティを一括初期化できなくもないがバグの元だな

722 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:58:22 ]
そのためのオブジェクト初期化子なんだろうか

723 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:59:50 ]
ヘジさんが自動プロパティに必死で抵抗してたのは直接初期化できないからなのかな

724 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:12:36 ]
自動プロパティって、文法的にインターフェースでの宣言と一緒なのがちょっと気になるっちゃ気になる。

int Method();

とだけ書いたらメソッドの中身ができちゃうようなもんだからなぁ。
パッと見同じだけど全然意味の違うものってのは、
ミスの原因だし、読むときの混乱招くから。

725 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:12:47 ]
コンストラクタで初期化するくらいなら、
タイピング量的に自動プロパティである必要がぜんぜんないな

726 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:14:42 ]
もう、自動プロパティを自動で普通のプロパティに展開するユーティリティを使えばいいよ

727 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:22:42 ]
private string _test;
public string Test { get _test; set _test; }

こういう糖衣構文を可能にするだけでよかったんだよ

728 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:26:55 ]
糖衣構文といいたいだけのやつ増えすぎ



729 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:29:42 ]
構文糖を可能にするだけでよかったんだよ

730 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:30:46 ]
public property string Test = "";

でいいんじゃないの

public readonly property string Test = "";

とか

731 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:36:05 ]
public string Test { get GetTest(); set SetTest(value); }
も可能そうだな


732 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:41:00 ]
>>731
それは意味がわからない。普通にかけばいいだろ
public string Test { get { return GetTest(); } set { SetTest(value); } }

733 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:41:50 ]
インターフェイスにプロパティを宣言するときの書き方と合わせたかったんだろ
美学ってやつなんだろう

734 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:48:09 ]
たとえ美学でも、読み取り専用にするprivate set;はせっかくの省力構文を台無しにしているな
public string Test { get; }
これで何がまずいのだろう

735 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:48:47 ]
event の構文が

event DelegateType Variable;
event DelegateType Variable { add { ...] remove { ...} }

なのを考えると、

property VarType Variable;
property VarType Variable { set { ... } get { ...} }

がよかった気もするなぁ。


736 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:50:10 ]
>>732
楽になるじゃん
それに変数とメソッドを同時に書くこともある
public string Test { get GetTest(); set _test; }


737 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:52:33 ]
property Name: string read FName write FName;
もうこれでいいよ

738 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:54:11 ]
>>735
それいいよね
読み取り専用プロパティは
readonly property VarType Variable;
にすればいいし



739 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:03:07 ]
>>734
初期化も何もできないじゃん

740 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:26:12 ]
>>739
private set;と書いたことにする

741 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:44:34 ]
それなら>>735スタイルにしてgetも書かないようにしないとおかしい
アクセサを宣言する意味でgetやsetを書いてるのに

742 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:04:59 ]
>>740
( ゚д゚ )

743 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:08:15 ]
アクセス修飾子をpublicとprivateだけと思ってる奴が多いようだな

744 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:25:18 ]
そんな奴いないだろw
もともとはプロパティのアクセサにアクセスレベルは指定できなかったんだよ
public get; protected set;みたいなのはそもそも想定されてなかった
だから別に>>735の形になっててもおかしくはない

745 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:13:05 ]
addとremoveが必須なeventとgetとsetは片方あればいいプロパティじゃ初めから条件が違うな

746 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:55:27 ]
話の流れを全部理解しているわけじゃないが、
そういうシンメトリックかどうかって話じゃないだろうw

素直に(VB方式ともいう)propertyってキーワードを導入しておいた方が
可読性の観点からは好ましかったんじゃないかって話なんじゃないの?

747 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:23:51 ]
でもevent 型 名前;と型 名前 { get; set; }じゃ差がありすぎるからなあ
イベントを理解する上でプロパティとの類似性はかなり重要なのに
構文上全然違う種類のものになっちゃってるのはさすがに

748 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:43:42 ]
そういや、結構いろんな言語に精通してる同僚が最近 C# 触り始めたんだけど、
event 知らずに普通にデリゲート型のプロパティ使ってたなぁ。




749 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:51:16 ]
イベントって機能がデリゲートで実現されていることを知らずにイベントを
使ってるって話ならありそうだが、デリゲート押さえてるのにイベント知らない、
なんてこと普通はありえん気がするけどね。

750 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:55:20 ]
eventって別に必要ない機能だろ

751 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:58:49 ]
javaなんかでよく出てくるgetHoge, setHogeパターンを言語に組み込んだのがプロパティ
同様にaddHogeListener, removeHogeListenerパターンを言語に組み込んだのがイベント

752 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 23:29:37 ]
言語に組み込む組み込まないの話ではないだろ

753 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 23:49:33 ]
>>749
「デリゲートはイベント処理用のもの」って認識だとそうなんだけど、
「関数ポインタの便利版」って認識だと、
関数ポインタのプロパティでイベントハンドラ取ればいいやってなってもおかしくないかと。


754 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 23:56:59 ]
もしプロパティを使うならデリゲートのコレクションを返すべきだろ
button.ClickEventHandlers.Add(new EventHandler(button_Click));
これなら意味的には同じ

755 名前:754 mailto:sage [2009/04/05(日) 23:59:32 ]
外からの要素へのアクセスはできないようにしないといけないよもちろん
マルチキャストでいいだろと突っ込まれそうだから一応

756 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:00:30 ]
Formsのコントロールの初期化をデザイナーで作っているところなんだが、
ツールバーのボタンが横に並んだ1つづりのPNGファイルを
ImageListを使って切り出して使おうとしているのだがうまくいかない。

System.Windows.Forms.ImageList il = new System.Windows.Forms.ImageList();
il.TransparentColor = System.Drawing.Color.Transparent;
il.ImageSize = new System.Drawing.Size(24, 24);
il.Images.AddStrip(Resources.tool);

こんな風に書いてデザイナーに読ませると、AddStrip()が認識できずに落ちてしまうようだ。
仕方がないのでpartialされたForm本体側で追加で初期化してるんだが、当然ながらデザイナーではプレビューできない。
画像の切り出し、切り出したチップをそれぞれのコントロールで使用したいんだがどうしたらいいだろうか。

757 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:10:38 ]
>>748
eventをつけた場合とつけない場合は何が違うのですか?
public event EventHandler Unko;
public EventHandler Unko

758 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:13:42 ]
>>757
ググれかす
見た目としては、eventだと外から行える操作がデリゲートの追加と削除だけになる。



759 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:17:51 ]
>>757
Unkoの硬さが違ってくる

760 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:23:11 ]
>>758-759
ありがとう。
何となく分かったよ
Unkoの硬さが+=と-=だけになるってことですね

761 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:28:52 ]
>>756
デザイナで設定するのは無理なんじゃないの
とりあえずImageListプロパティだけ設定して,Tagプロパティにインデックスを入れといて
後でコードから舐めてImageIndexプロパティに設定し直すとか

762 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 01:04:40 ]
>>761
ありがとう。「無理」という返事を聞いてある意味安心した。

どうせデザイナーで作る部分はある程度静的な割付になるので、わざわざTagに入れてループをまわさなくても、
ImageList.Images プロパティをControl.Image に直接代入していくだけで十分だね。

763 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 01:22:48 ]
>>762
ImageList継承して"ImageStrip"のようなプロパティを追加するとか、
あるいは最初から目的のイメージを持たせちゃうとかすれば出来る気もする。

っていうか、なんでわざわざそんなC#向きでない作り方をするんだろう。
なんでも道具にあった作り方ってあると思うんだけど。

764 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 01:24:20 ]
あーImageListってシールされてるのか。。

765 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 01:59:32 ]
String型がシールされてる上にIStringのようなインターフェイスもないってどういうこと?
String型に限らずやたらシールされると拡張できなくて異常に不便

766 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 02:02:16 ]
C#の入門誌のオススメ教えて

767 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 02:04:16 ]
C#に入門書は必要ない
ぐぐれば腐るほどでてくるからな・・・
強いて言えば逆引き系のものがいいよ

768 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 02:04:39 ]
継承は最低の方法だってみんな分かって来てるじゃない
それはともかくStringはIEnumerable<char>として扱うと便利だよ



769 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 03:31:43 ]
>>763
コントロールで使う画像の処理をImageListに任せるのは、
Win32SDK時代から続く古式ゆかしいお作法なんだ。

770 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 08:32:28 ]
> それはともかくStringはIEnumerable<char>として扱うと便利だよ
これは気づかなかった。ありがとう

771 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 09:03:50 ]
デザイナーいるとかうらやましいなおい・・・・

772 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 09:26:25 ]
>>765
恥ずかしいレスだなおいw

773 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 09:31:03 ]
>>771
それはボケなのか……?

774 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 10:42:32 ]
Stringがsealedなのはimmutableにするため
変更できない方が扱いやすいから

775 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 17:54:34 ]
扱いやすいっていうか、継承を禁止しないとイミュータブルであることを保証できない。

776 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:04:25 ]
なんとなくだが、>>774
"stringはimmutableであった方が扱いやすい"
と言いたかったのではないかと思う。

777 名前:デフォルトの名無しさん [2009/04/06(月) 21:19:49 ]
>>766
洋書なら色々あるけど、邦訳版が出てないのが多い・・・。

778 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 02:18:55 ]
C#って検索数がいまいちなんだよね。
なんで?



779 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 02:34:22 ]
>>778
記号とか入いってるとかは検索エンジン的にマイナスな気がする。
あと、なんだかんだいって後発だしね。
それと、一般名詞そのまま使ってるrubyとかと比べりゃそりゃ少なくなる。

780 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 03:42:38 ]
思いつくままに検索してみた。言うほど少なくは無いようだが

php の検索結果 約 9,700,000,000 件
javascript の検索結果 約 680,000,000 件
vb の検索結果 約 657,000,000 件
java の検索結果 約 377,000,000 件
scheme の検索結果 約 107,000,000 件
ruby の検索結果 約 102,000,000 件
c++ の検索結果 約 101,000,000 件
perl の検索結果 約 88,000,000 件
c# の検索結果 約 63,900,000 件
python の検索結果 約 62,300,000 件
delphi の検索結果 約 49,500,000 件
lisp の検索結果 約 8,290,000 件
fortran の検索結果 約 7,720,000 件
cobol の検索結果 約 6,530,000 件
c++/cli の検索結果 約 4,680,000 件

781 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 03:54:22 ]
>>780
ごめんそれ違う。

漏れが言ったのは、グーグルトレンドの方。

782 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 04:47:38 ]
>>780
発想は面白いよ発想は

783 名前:sage mailto:sage [2009/04/07(火) 13:13:32 ]
vb.net の private shared は C# でいうとなんですか?
private partial ? private protected?

784 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:17:51 ]
private static

785 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:19:16 ]
thx!

786 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:11:03 ]
VB.netの存在意義がわからない
初心者向けならジェネリックやLinqの拡張をすべきではないと思うんだが・・・

787 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:12:59 ]
VB.NETはVBプログラマ用の隔離病棟もしくはオブジェクト指向リハビリ施設

788 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:13:04 ]
>>786
それは、貴方の考えた存在意義と違うってだけでしょう。



789 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 18:15:55 ]
C#>VBってのはC#でオブジェクト指向を勉強した奴がやけに言いたがるようだけど
他から見たらチェイサーとクレスタ


790 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 18:24:42 ]
そりゃ.NETがベースにあるからだろ

791 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 18:28:30 ]
.NETのWebBrowserコンポーネントで
RichTextBoxのSelectionColorプロパティみたいに、文字列をドラッグしたときの選択色を変える方法ありませんか?

792 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 05:02:52 ]
Microsoft Visual C++ Express Edition
このコンパイラで一度「デバッグ無しで開始」でコンパイル成功するとソースを書き換えてもプログラムが変わらないようです
今までは少しソースを書き換えようと思ったら新規作成で新しいソース作ってコピペを繰り返してたんですがいい加減ソースの管理がキツいです
誰か助けてください

793 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 05:09:03 ]
バイト代は出ますか?

794 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 05:14:13 ]
>>792
全ては君の勘違い

795 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 06:02:20 ]
>>792
『Microsoft Visual C# Express Edition』で開発していると仮定しての話だが、(スレタイ読めよ!)
確かにVC++と違って C#の開発のときはアプリの実行ボタンでビルドが更新されないことがあるようだ。
しかし、コンパイルないしビルドボタンを押せば問題ないはず。
デバッグ無しで開始 や デバッグ実行 のボタンとは別にあるぞ。

796 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 09:47:57 ]
>>792
リビルドしてみた?

797 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 09:53:21 ]
むしろ自動ビルドしてるならクリーンアップ?で
さもなくばexploreでファイル削除

798 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:22:07 ]
.net のプログラムを C#に書き換えています。
.net におけるshadow(オーバーライドの一種で引数も返り値も変更可能なもの)
はC#だとどういう風にトランスレートすればいいんですかね?



799 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:26:15 ]
.net のプログラムってなに?VB?

800 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:27:01 ]
もちろんC#

801 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:27:15 ]
隠蔽のnew

802 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:30:02 ]
vb.netっす

803 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:32:06 ]
VBではoverridesとshadowが別なのが良くわかんないね。
overridesがほぼC#のnewと同じ。
shadowとまったく同じものはなかったかと。

804 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:35:20 ]
それでは Public Shadow Property X は
public new override X
{get return ...みたいな感じで書けばいいってことですか?

805 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:36:43 ]
ああちがうか、そもそもoverrideとoverridesのちがいがわかってませんでした。
勉強してきます。

806 名前:デフォルトの名無しさん [2009/04/08(水) 15:43:35 ]
WebBrowserのDocumentで、mshtmlを経由してiframeの中身にアクセスしようとするとUnauthorizedAccessExceptionになるのですが、
これを回避するにはどうすればいいのでしょうか。

807 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:51:30 ]
public class Bar
inherits Foo
  overrides sub f()
  end sub
  shadows sub g()
  end sub
  overloads sub h()
  end sub
end class
をリフレクションで調べるとこういう違いがあるようだべさ。

public class Bar : Ansi,Auto
    extends public class Foo : Ansi,Auto
        public virtual Void f()
        public Void g()
        public Void h(),HideBySig
        public constructor Void .ctor(),SpecialName

C#の場合全部のメソッドにHideBySigが付いてるんだよね。


808 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:28:38 ]
すみません。馬鹿な質問いいですか?

フォームにラベルがいくつかありまして、それぞれ
lbl001
lbl002
lbl003
という名前になっています。

で引数に001とか002を渡すと通し番号の一致するラベルのテキストを""に変えるメソッドを
作りたいのですが、どうしたら良いのでしょうか?

解りにくい文章ですみませんが、お願いします。





809 名前:808 mailto:sage [2009/04/08(水) 19:30:47 ]
private void hoge(string number)
{
lbl+number.text="";
}
という感じなのですが・・・

810 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:36:25 ]
public void ClearLabel(string labelName)
 Control control = this.Controls.Find(labelName, false)[0].Text = "";

thisはForm


811 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:39:39 ]
ああ、最初の変数宣言はイラネ

public void ClearLabel(string labelName)
 Control control = this.Controls.Find(labelName, false)[0];
 control.Text = "";

または

public void ClearLabel(string labelName)
 this.Controls.Find(labelName, false)[0].Text = "";


812 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:42:38 ]
public void Func(int number)
{
string name = "lbl" + number.ToString("000");
foreach (FieldInfo info in this.GetFields())
{
if (name == info.Name)
{
Label label = (Label)info.GetValue(this);
label.Text = "";
}
}
}

813 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:43:55 ]
ラベルを配列に入れりゃいいんじゃないの

814 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:46:45 ]
>>808
そういうことをするならラベルをコレクションで管理しとけ
リフレクションを使うのはあくまで応急処置

最初からコレクションで生成してもいいし、どうしてもデザイナを使いたいなら以下のようにする
var labels = new List<Label>();
labels.Add(lbl001);
labels.Add(lbl002);
labels.Add(lbl003);

815 名前:808 mailto:sage [2009/04/08(水) 19:58:30 ]
みなさまありがとうございました!
>>811
public void ClearLabel(string labelName)
 this.Controls.Find(labelName, false)[0].Text = "";

この場合labelNameは"002"とかでもlbl002を見つけてくれるのでしょうか?

>>812
なるほど。僕でも判る解りやすいコードですね

>>814
おっしゃる通りです。以降気をつけます

816 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 20:21:07 ]
>>815
見つけてくれないからlabelNameを自分で作成すれ

817 名前:808 mailto:sage [2009/04/08(水) 21:27:47 ]
>>816
ありがとうございました!

僕はデザイナでしかコントロールを置いたことがないので
名前の重複がありうるなんて知りませんでした。

なので名前のわかっているコントロールを探すなんてナンセンスな感じを
うけましたが、自分が無知だっただけでした!

818 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:49:25 ]
何も解かってないことが解かった



819 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:54:33 ]
>>817が何を言ってるのかまるでわからない・・・

820 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:56:19 ]
なんとなく理解できる俺もほ乳類を名乗って問題無いのか・・・

821 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:41:34 ]
>819
多分Nameプロパティとフィールド参照名をごっちゃにしてるんだろ。
>817
参照名はスコープ内で重複しないけど、コントロールごとに設定できるNameプロパティの値は重複可能。
デザイナーは勝手に「Name = 参照名」に設定してるから一意に見えるだけ。自前でNameを設定してなければ、
int num = 2;
Label label = this.Controls[ "lbl" + num.ToString("000")] as Label;
if( label != null ) { 処理 } else { エラー処理とか }
自前のコードでNameを設定してて同じNameの奴が重複してたら、最初に追加されたやつ(普通はデザイナーが作った方)が返ってくる。
どうしてもフィールド名のほうでアクセスする必要がある場合は、>812みたいにリフレクションを使う。
でもクラス内で完結することに使うことはまずない。

822 名前:デフォルトの名無しさん [2009/04/09(木) 00:09:57 ]
Regexクラスを使った正規表現って
交差演算子「&&」は使えませんよね?

823 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:12:33 ]
古語でも可也

824 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:18:44 ]
>>822
MSDN読め。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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