ふらっとC#,C♯,C#(初心者用) Part39at TECH
ふらっとC#,C♯,C#(初心者用) Part39 - 暇つぶし2ch159:デフォルトの名無しさん
09/03/17 22:15:21
>>157
WebBrowser でやるならそんな感じ。リクエストを投げるなら、
HttpWebRequest で Post。

160:デフォルトの名無しさん
09/03/17 22:18:49
さっそくどうも
う~ん難しそうですね
よく読んでみます

161:デフォルトの名無しさん
09/03/18 15:09:29
クラスAで初期化(インスタンス?)したクラスBの
プロパティをクラスCから読み書きしたい場合は
クラスAのインスタンスをPublicにしてアクセスするもの
なんでしょうか。定石があれば教えて下さい。

162:デフォルトの名無しさん
09/03/18 15:26:20
よくわからんけどこんな感じのことを言ってる?

public ClassA{ public ClassB b = new ClassB(); }
public ClassB{ public string s = "test"; }

ClassC
{
  public ClassC()
  {
    ClassA a = new ClassA();
    Console.WriteLine(a.b.s);
  }
}


163:デフォルトの名無しさん
09/03/18 16:00:08
正にそう言うことです。
そういうアクセスの仕方が一般的なのかと思いまして。

164:デフォルトの名無しさん
09/03/18 16:10:54
プロパティはどこに行ったんだ

165:デフォルトの名無しさん
09/03/18 16:11:59
直接フィールド公開するのは論外として、
ClassAがstring型プロパティとして公開するか直接ClassBを公開するかは場合による

166:161
09/03/18 17:46:13
>>165
今回の場合、以下のような構成になっています。
・クラスA(メインフォーム。起動時に各種設定値を読み込みクラスBに格納)
・クラスB(設定値を保持する為のクラス。プロパティやフィールドのみ)
・クラスC(クラスAから開かれるオプション画面)

クラスAからクラスCを開いたときに既に読み込まれたクラスBの設定値を
読み込みクラスCの各種コントロールに反映したいのですが、クラスCで
クラスBを初期化すると値まで初期化されてしまい困っています。

こういう場合はどのようにするのが定石でしょうか。
>>161,163は携帯からだったので端折ってしまってすいません。

167:デフォルトの名無しさん
09/03/18 17:50:36
ClassCもフォームなんだよね?

そういう場合はClassAの側でClassCのプロパティを設定してやる方がいいんじゃないかな
ClassCのコンストラクタにClassBの参照渡すとかね

168:161
09/03/18 18:17:10
>>167
フォームです。ClassCでプロパティを作成するのは面倒なので
後者の方法についてどのようにするか色々調べてみます。
有り難う御座いました。

169:デフォルトの名無しさん
09/03/18 19:09:49
IEnumerableをシリアル化するには、どのような方法を利用すればいいですか?

170:デフォルトの名無しさん
09/03/18 19:36:26
ToArray

171:デフォルトの名無しさん
09/03/18 20:10:29
フォームを最大化する時にその中のコンポーネントも連動して
同じ比率で大きくしたいんですけどどうすればいいですか?
最大化する時に一々それぞれのサイズをいじるしかない?

172:デフォルトの名無しさん
09/03/18 20:25:16
>>171 Control.Anchorプロパティとかで解決できるかな?

173:デフォルトの名無しさん
09/03/18 20:26:00
>>171
普通はSplitContainerを使う

174:デフォルトの名無しさん
09/03/18 22:55:24
変数の型で同じバイト数のものならやっぱり
少数型より整数型のほうが速いですか?

175:デフォルトの名無しさん
09/03/18 22:56:02
>少数型
そんなものはありません

176:デフォルトの名無しさん
09/03/18 22:59:27
失礼 小数

177:デフォルトの名無しさん
09/03/18 23:01:45
初めから答える気のない奴が
揚げ足を取るだけのためにレスしてるだけだから気にすんな

178:デフォルトの名無しさん
09/03/18 23:04:15
自己紹介するスレじゃないよ

179:デフォルトの名無しさん
09/03/18 23:04:43
速いかどうかは環境依存

180:デフォルトの名無しさん
09/03/18 23:05:13
お前も自己紹介してるやないけ

181:デフォルトの名無しさん
09/03/18 23:06:55
くやしかったかい?

182:デフォルトの名無しさん
09/03/18 23:07:48
はい
くやしかったです

183:デフォルトの名無しさん
09/03/18 23:07:52
最後までレスし続けたほうが勝ちかい?

184:デフォルトの名無しさん
09/03/18 23:08:32
そう思います

185:デフォルトの名無しさん
09/03/18 23:08:37
いや君の勝ちでいいよ?

186:デフォルトの名無しさん
09/03/18 23:08:40
じゃあ俺の勝ちだろ
お前ら弱すぎワロタ

187:デフォルトの名無しさん
09/03/18 23:08:59
これだから理系は困る

188:デフォルトの名無しさん
09/03/18 23:10:04
理系って?文系って?なに?説明してくれない?

189:デフォルトの名無しさん
09/03/18 23:10:12
175 名前: デフォルトの名無しさん [sage] 投稿日: 2009/03/18(水) 22:56:02
>少数型
そんなものはありません

とりあえずさらしage

190:デフォルトの名無しさん
09/03/18 23:11:40
中卒には関係ないよ 区別があるのは高校からですよ

191:デフォルトの名無しさん
09/03/18 23:11:42
必死だな

192:デフォルトの名無しさん
09/03/18 23:11:47
>>174
とりあえずint(System.Int32)で扱えば一番良いはず。

193:デフォルトの名無しさん
09/03/18 23:12:53
理系とか文系という言葉に強烈に反応するのが約一名いるのは仕様ですか?

194:デフォルトの名無しさん
09/03/18 23:13:40
おまえら#regionで畳んどけよ

195:デフォルトの名無しさん
09/03/18 23:14:29
変換ミスぐらい許容できないバカがいるから荒れるんだよな

196:デフォルトの名無しさん
09/03/18 23:15:20
いやその後の方が問題だ

197:174
09/03/18 23:15:23
>>192
どうも
できるだけ32bitのものを使おうとおもってますが
最近はjavaとかも64bit版あったりするんでどんなもんかなと思いまして

198:デフォルトの名無しさん
09/03/18 23:17:02
基本クラスのメソッドに含まれるメンバ変数の値を
派生クラス側で変更して、そのメソッドを使いたいんですが
どうしたらいいのでしょうか?

199:デフォルトの名無しさん
09/03/18 23:19:03
>>197
実際のところ64bit整数は32bitと同じかそれ未満の速度になるよ


200:デフォルトの名無しさん
09/03/18 23:20:52
>メソッドに含まれるメンバ変数
とは何だ?

201:デフォルトの名無しさん
09/03/18 23:22:19
>>198
値って引数のこと?

202:デフォルトの名無しさん
09/03/18 23:23:54
>>198
やりたい事をそれっぽいコードで示してみ


203:174
09/03/18 23:24:26
そうですか
これらの速度をベンチマークで比較してるとこがあればいいんですけどねえ

204:デフォルトの名無しさん
09/03/18 23:26:06
virtual?

205:デフォルトの名無しさん
09/03/18 23:26:56
きっと斜め上の回答が来る筈。
って事で、メソッド内のローカル変数だと予想

206:デフォルトの名無しさん
09/03/18 23:28:49
>>198
>>60-62と同じような質問にも読める

207:デフォルトの名無しさん
09/03/18 23:34:07
結局どれなんだよ・・・

208:デフォルトの名無しさん
09/03/18 23:35:34
>>202
こういう感じです
派生クラスでメソッドを書き直すしかないですか?

public class A{
int x = 10;
public MethodA(){
Console.WriteLine("ここに表示される値を変えたい→ " + x);
}
}

public class B : A{
new int x = 20;
}

public class DEMO{
public static void Main(){
B b = new B();
b.MethodA(); //ここで20と表示したい
}
}

209:デフォルトの名無しさん
09/03/18 23:40:05
>>208
これでどうだ
public class A
{
protected int x = 10;
public void MethodA()
{
Console.WriteLine("ここに表示される値を変えたい→ " + x);
}
}
public class B : A
{
public B()
{
this.x = 20;
}
}
public class DEMO
{
public static void Main()
{
B b = new B();
b.MethodA(); //ここで20と表示したい
}
}

210:デフォルトの名無しさん
09/03/18 23:49:16
>>209
おー、これです
ありがとうございます

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

212:デフォルトの名無しさん
09/03/19 00:08:21
>>211
URLリンク(msdn.microsoft.com)(VS.80).aspx


213:137
09/03/19 00:55:19
>>210
しかと吟味の上、よきに計らえ

214:デフォルトの名無しさん
09/03/19 00:57:01
ごばorz

215:デフォルトの名無しさん
09/03/19 01:30:02
どこの誤爆だよwww

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

217:デフォルトの名無しさん
09/03/19 03:18:50
>>211
Main関数の中に配列いれろ

218:217
09/03/19 03:20:26
言い方が悪かった

static void Main(string[] args)

こういう感じね


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

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

詳しいやりかたはぐぐれ

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

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

222:デフォルトの名無しさん
09/03/19 03:44:03
>>211
Processじゃないの?


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

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

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

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

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

225:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/19 17:06:08
エラーはちゃんと読みなさい。

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

日本語でOK

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

229:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/19 17:22:22
もう一息
var da = new int[][] { new []{1,2,3}, new []{5,6}, new []{7}, new []{8,9,10}};


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


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

233:デフォルトの名無しさん
09/03/19 22:49:45
 
日本を狙う 朝鮮人の原爆ミサイル建造費用は

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

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

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

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

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

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

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

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

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

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

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

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

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

URLリンク(2cchan.ham-radio-op.net)

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

ありがとうございました

235:デフォルトの名無しさん
09/03/20 03:02:46
すみません。質問いいですか?

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

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

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

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

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

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

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

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

240:デフォルトの名無しさん
09/03/20 23:21:28
マルチスレッドが嫌ならDoEventsでも使えば

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

242:デフォルトの名無しさん
09/03/21 00:11:27
>>237
マニアックな例になるけど、
URLリンク(ufcpp.net)
とか。

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

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

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

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

245:デフォルトの名無しさん
09/03/21 11:29:19
Yahooの株式データはurlにクエリ付けて操作できる

246:デフォルトの名無しさん
09/03/21 11:47:11
URLにクエリですか?

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

248:デフォルトの名無しさん
09/03/21 11:50:23
>>246
クエリ文字列。

URLリンク(stocks.finance.yahoo.co.jp)
なら
code=4686.q

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

249:デフォルトの名無しさん
09/03/21 11:55:39
>>248
銘柄のコードでですね。

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

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

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

250:デフォルトの名無しさん
09/03/21 12:20:33
スクレイピングなんてそんなもん。

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

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

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

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

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

254:243
09/03/21 13:04:14
色々な意見ありがとうございます。
ちょっと考えてから作るか作らないか検討します。

255:デフォルトの名無しさん
09/03/21 13:07:14
>>252
たぶんそうです。
+=と=の違いってどうなんですか?

256:デフォルトの名無しさん
09/03/21 13:10:34
調べろよ。

x = x + y;

x = y;

の違い。

257:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/21 14:28:45
>>256
ハンドラーに+=ってイメージがつかないんです(ノ_・。)

259:デフォルトの名無しさん
09/03/21 14:34:45
継ぎ足していくイメージだな

260:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/21 15:13:23
でも実際、delegateの場合は+=演算子がオーバーロードされて、
Delegate.Combineメソッドが実行されるってこと?

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

263:デフォルトの名無しさん
09/03/21 19:32:07
スレリンク(gamedev板:95-番)


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

265:デフォルトの名無しさん
09/03/21 21:11:11
throw new System.Exception();

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

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

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

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

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


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

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

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


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

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

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

275:デフォルトの名無しさん
09/03/22 00:38:37
つまり、ググると混同してるのやら誤解しているのやらがたくさん出てくると


276:デフォルトの名無しさん
09/03/22 00:42:17
>>274
はいはい(笑)

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

278:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/22 00:45:59
訂正 >>266-267 でした

280:デフォルトの名無しさん
09/03/22 00:46:05
>>275
>>276
はいどうぞ

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

URLリンク(www.atmarkit.co.jp)

281:デフォルトの名無しさん
09/03/22 00:50:35
>>280
だから何?って感じなんだがwww
何の証明にもなってない

282:デフォルトの名無しさん
09/03/22 00:51:16
>>281
>>278は華麗にスルー?

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

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

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

286:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/22 01:12:59
linqとして紹介されてたものが実はlinq to sqlのことだとも知らなかったのか。。

288:デフォルトの名無しさん
09/03/22 01:15:53
>>287
君か、引っ掻き回してたのは

289:デフォルトの名無しさん
09/03/22 01:19:00
何を?
勘違いしてた人はいるみたいだけどね

290:デフォルトの名無しさん
09/03/22 01:19:46
Linq だけならふつーは Linq to Objects を指すんじゃない。


291:デフォルトの名無しさん
09/03/22 01:25:58
じゃあ事実関係から

1 Linq To SQLはLinq To Entityとは別物 ここまではok?
URLリンク(www.atmarkit.co.jp)

2 VS2008と.NET3.5は同じ時期にリリースされた ここまではok?
URLリンク(itpro.nikkeibp.co.jp)

3 Linq To SQLは.3.5に搭載されている ここまではok?
URLリンク(d.hatena.ne.jp)

4 Linq To Entity(Entity Framework)は3.5 SP1で搭載された ここまではok?
URLリンク(d.hatena.ne.jp)

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


292:デフォルトの名無しさん
09/03/22 01:31:57
>>290
同感

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

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

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

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

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

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

298:デフォルトの名無しさん
09/03/22 03:49:08
LINQ to XML使ってる俺はどうなんの

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

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

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

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


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

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

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

305:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/22 14:04:08
URLリンク(msdn.microsoft.com)

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

 Windows Form Designer generated code

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

307:デフォルトの名無しさん
09/03/22 14:08:45
>>306
//Windows Form Designer generated code
とコメントアウトすればいいのかな?


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

309:デフォルトの名無しさん
09/03/22 14:25:03
>>308
VS2002/2003の頃の記事だから、percial class じゃないんだな。

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

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

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

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

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


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

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

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

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

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

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

319:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/22 15:01:40
>>319
ちびっと訂正
>public RegularizedAngle(float f) { inAngle = f; } 
public RegularizedAngle(float f) { inAngle = 0; Angle = f; }


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

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

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

324:デフォルトの名無しさん
09/03/22 16:02:59
>>321
それもLINQ

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

326:デフォルトの名無しさん
09/03/22 16:30:24
LINQってなんて読むの?ラインクエリ?

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

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

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

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

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



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

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

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

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

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

332:デフォルトの名無しさん
09/03/22 17:32:38
ReadOnleyプロパティだからそれ。

333:デフォルトの名無しさん
09/03/22 17:34:19
やどりぎ+どくどく

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

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

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

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


338:デフォルトの名無しさん
09/03/22 20:53:46
ありがとうございますた

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

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

340:デフォルトの名無しさん
09/03/22 22:23:24
モデルの中にかけばいいんじゃねーの?

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

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

346:デフォルトの名無しさん
09/03/23 11:33:11
嫌です

347:デフォルトの名無しさん
09/03/23 12:42:50
同意

348:デフォルトの名無しさん
09/03/23 17:56:52
御意

349:デフォルトの名無しさん
09/03/23 18:22:15
ザムディン

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

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


352:デフォルトの名無しさん
09/03/23 20:56:08
System.Windows.Forms.Screen
から作業領域取得して設定

353:350
09/03/23 21:37:29
this.MaximizedBounds = Screen.GetWorkingArea(this);
で修正できました。
ありがとうございます。

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

355:デフォルトの名無しさん
09/03/24 16:31:41
それくらい試せよ

356:デフォルトの名無しさん
09/03/24 16:32:23
>>354
試してみればいい。

357:デフォルトの名無しさん
09/03/24 17:46:10
なるほど
ありがとうございました

358:デフォルトの名無しさん
09/03/24 17:57:07
a += b * c;

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

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


359:デフォルトの名無しさん
09/03/24 18:02:19
結合法則考えればすぐ分かるだろ

360:デフォルトの名無しさん
09/03/24 18:05:05
a * = b + c
は?

361:デフォルトの名無しさん
09/03/24 18:07:48
a = a * (b + c)

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

363:デフォルトの名無しさん
09/03/24 18:16:51
うそばっかりだなこの擦れ

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


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

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

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

367:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/24 19:24:56
見やすくなるけどスピード負担はやや増えるのかな?

369:デフォルトの名無しさん
09/03/24 19:37:31
なんのすぴーどだよ

370:デフォルトの名無しさん
09/03/24 19:43:53
島袋の負担は増える
上原の負担は減るんじゃなかろうか

371:デフォルトの名無しさん
09/03/24 19:59:18
解散しちまえ

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

373:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/24 20:54:44
ビット演算だな
AltとControlとShiftのビットを立てている

375:デフォルトの名無しさん
09/03/24 21:13:02
>>373
ビット演算でググれ。

376:デフォルトの名無しさん
09/03/24 21:30:33
>>373
フラグの使い方の悪い見本だな


377:デフォルトの名無しさん
09/03/24 21:57:06
そうか?

378:デフォルトの名無しさん
09/03/24 22:01:38
!= 0 ←これが気に食わないんでしょたぶん

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

380:デフォルトの名無しさん
09/03/24 22:19:50
理由書かない奴は気にするな

381:デフォルトの名無しさん
09/03/24 22:20:58
理由分からない奴は気にするな

382:デフォルトの名無しさん
09/03/24 22:27:52
>>379
どうせくだらない理由だから気にスンナ

383:デフォルトの名無しさん
09/03/24 22:43:03
なるほど
ありがとうございました

384:デフォルトの名無しさん
09/03/24 22:45:05
入れ替える必要はなさそうだけどな。

385:デフォルトの名無しさん
09/03/24 23:02:26
!= 0 以外の良い書き方ってあるんですか?

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

387:デフォルトの名無しさん
09/03/24 23:09:23
>>385
!(1 = 0)

388:デフォルトの名無しさん
09/03/24 23:10:51
なるほど
ありがとうございました

389:デフォルトの名無しさん
09/03/24 23:10:52
アホは無理にレスしなくていいよ

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



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

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

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

394:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/24 23:53:36
なんでそんな変な名前つけてるの?

396:デフォルトの名無しさん
09/03/24 23:56:18
アホは無理にレスしなくていいよ

397:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/25 00:23:07
     ⌒ ⌒               ____
   (     )          ゝ/     __ヽ
      | | |              /        | 丨
   , ─ 、 __          i >>376  |-||
 /         ヽ     /   ヽ      (|| | /^ヽ
/       /)ノ)ノ   //   \∧/   ノ /ヽノ
| >>393 ///⌒ヽ   /   , ─/ ̄ ̄`─ ´ / ______/
ヽ     /)─|  ミ|      /  /     ,-─ ′ ───/
∠   (| |.  ヽ__ノ>     ( ̄ノ/     /    -、        /
∠_ / ` /^\__ >      ̄ |── |─┬┘ |──/
  ノ    (__          ヽ___ノ─┴ 、__ノ ̄ ̄/
 / ̄ ̄\┌─ ′ /^-、    -、_/  /_____ /
/ ̄ ̄ ̄⌒ヽ   (   丿  /   |  /───/
        \  / ̄/   (__ノ ̄ ̄  //  /
          \/  /         //  /

399:デフォルトの名無しさん
09/03/25 00:25:19
Queue<int>にint詰めて順に足せばいいじゃん

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

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

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

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

402:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/25 00:51:08
>>401
C#でクラスを引数に設定した場合は参照渡しだったと記憶していますが、
あえて明示的にrefをつけるというのはどのような意図を以て行うのでしょうか?

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

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

404:デフォルトの名無しさん
09/03/25 00:54:45
(?_?)

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

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

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

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

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

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

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

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

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

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

413:デフォルトの名無しさん
09/03/25 10:57:32
RestoreBoundsで通常時のサイズを取得できるが。

414:デフォルトの名無しさん
09/03/25 10:59:37
>>413
瞬殺されました
どうもありがとです

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

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

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

417:デフォルトの名無しさん
09/03/26 10:43:58
ループ

418:デフォルトの名無しさん
09/03/26 11:42:53


419:デフォルトの名無しさん
09/03/26 11:43:58
switch文について

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

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


420:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/26 12:05:30
やっぱりそうですか
ありがとうございます

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

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

423:デフォルトの名無しさん
09/03/26 15:39:07
>>419
case 1: case 2: case 5: case -8:

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

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

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

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

426:424
09/03/26 15:53:31
javaでもコンパイルできました
C系統ではOKみたいですね
どうもです

427:デフォルトの名無しさん
09/03/26 15:55:23
おいおい

428:423
09/03/26 15:56:22
ごめん。アホなこと書いてた

429:デフォルトの名無しさん
09/03/26 15:58:22
ん?-8がやっぱおかしいの?
全部だめなの?

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

431:デフォルトの名無しさん
09/03/26 16:02:32
ちょっとワラタw

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

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

434:デフォルトの名無しさん
09/03/26 20:21:32
throw new NotImplementedException
これはなんて書いてあるかわかる?
わかればOK!

435:デフォルトの名無しさん
09/03/26 20:24:17
投げる 新しい ちがう 実装される 例外

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

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

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

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

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

440:デフォルトの名無しさん
09/03/26 20:44:26
>>433はな
throw自体が無意味って話に変わったんじゃないの

441:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/26 20:52:58
throwってなにかね?

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

URLリンク(msdn.microsoft.com)(VS.80).aspx


444:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/26 20:56:36
>>441
消すんだよ。

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

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

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

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

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

451:デフォルトの名無しさん
09/03/26 21:04:23
>>449
誰も必須だとか言ってないだろハゲ

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

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

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

455:デフォルトの名無しさん
09/03/26 22:23:02
勝手に作れよハゲ

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

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

458:デフォルトの名無しさん
09/03/27 00:41:56
>>455
失礼な
まだほんのりと残っていますぞ

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

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


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

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

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

教えて!エロい人!

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

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



464:デフォルトの名無しさん
09/03/28 16:22:53
>>463
Action<>

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

466:デフォルトの名無しさん
09/03/28 18:46:07
EventHandler<T>にしようよ。

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


468:デフォルトの名無しさん
09/03/28 20:18:48
なんの釣りだよ。

469:デフォルトの名無しさん
09/03/28 20:19:50
いや本当に違いがよくわからないので教えて下さい

470:デフォルトの名無しさん
09/03/28 20:21:43
ぐぐったんですか?

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


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

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


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

475:デフォルトの名無しさん
09/03/28 20:43:15
private string _name;

public string Name{

476:デフォルトの名無しさん
09/03/28 20:48:12
>>474
誰がそんなこと聞いてる?

477:デフォルトの名無しさん
09/03/28 20:48:26
誰も訊いてない。

478:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/28 21:00:12
配列は確保するまで使えません
未割り当てエラー出すだけ

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

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

481:デフォルトの名無しさん
09/03/28 21:30:52
>>476
>>467の趣旨はそういうことだろ?

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

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

484:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/28 23:48:07
で、どう違うんだ?


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

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

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

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

490:デフォルトの名無しさん
09/03/29 00:25:44
フィールドとプロパティではメタデータ上でも区別される

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

492:デフォルトの名無しさん
09/03/29 00:36:24
使いたくなきゃ使わなきゃいいじゃない

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

494:デフォルトの名無しさん
09/03/29 00:44:13
もうそれでいいよ

495:デフォルトの名無しさん
09/03/29 00:55:53
屁理屈すぎてもう面倒臭い

496:デフォルトの名無しさん
09/03/29 01:01:32
自分の理屈に合わない理屈は屁理屈ということにしたいんですね わかります

497:デフォルトの名無しさん
09/03/29 01:07:10
>>496
それを屁理屈って言うんだよ。

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

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

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

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

501:デフォルトの名無しさん
09/03/29 02:18:35
じゃ違うの?

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

503:デフォルトの名無しさん
09/03/29 02:29:35
なんで?

504:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/29 03:01:01
>>501,503
その頭の悪そうなレスはやめてくれ

506:デフォルトの名無しさん
09/03/29 03:42:08
>>505
同意

とりあえずここ読め
URLリンク(ufcpp.net)

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

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

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

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

510:デフォルトの名無しさん
09/03/29 13:31:33
フィールドで問題ない問題ない

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

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

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

514:デフォルトの名無しさん
09/03/29 13:51:35
桜も咲いてるしな・・・

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

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

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

517:デフォルトの名無しさん
09/03/29 14:39:21
明示的に初期値が設定できない自動実装なんて

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

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

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

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

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

URLリンク(msdn.microsoft.com)

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

524:デフォルトの名無しさん
09/03/29 20:22:34
そうなんだ意味が違うんだね サンクス

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

526:デフォルトの名無しさん
09/03/29 23:56:19
>>525
嫁が欲しいなら2次元で我慢しとけ

527:デフォルトの名無しさん
09/03/29 23:59:32
質問です。
C#の本買って勉強してるんですがNorthwindが何なのかわかりません。
Northwindってなんですか?
ぐぐっても
URLリンク(www.dreamsoft.jp)
こんなのとか
URLリンク(msdn.microsoft.com)
こんなのしか見つかりませんでした。

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

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

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

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

URLリンク(www.atmarkit.co.jp)

532:デフォルトの名無しさん
09/03/30 00:15:15
うぐ、あげちまった

533:デフォルトの名無しさん
09/03/30 00:16:12
ありがとうございます。読んでみます。

534:530
09/03/30 00:17:11
↑530=533です。ID出ないの忘れてました。

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

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

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

こんな感じ?


536:デフォルトの名無しさん
09/03/30 00:36:10
>>525
どんなデーター形式でも扱えるよ。

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

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

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

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


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


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


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

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

543:539
09/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
09/03/30 02:26:17
を定義して IntClassや StringClassがそれをoverrideするなら
GetLengthを呼び出す側はわざわざInterfaceで呼ぶ必要もなくなるわけで。

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

545:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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
09/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
09/03/30 03:00:38
水を差すつもりはないですけど
ぶっちゃけお二人(だと思うけど)の議論を見てるだけでも勉強になります
経験を積んだ人間に話しを聞ける環境にいないので
自分の理解の甘さが改めて実感できて、素人にはありがたいッス。

549:デフォルトの名無しさん
09/03/30 03:09:22
>>547
面倒くせぇなあお前

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

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

550:539
09/03/30 03:09:41
>>546
そんなんでいいと思います。

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

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

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

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

552:539
09/03/30 03:25:40
>>549

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

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

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

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

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

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

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

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

556:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/30 20:15:45
AクラスをBクラスのメソッドの引数として渡した場合はアドレス参照で渡されるのはわかりましたが
そのメソッド内で、渡されたAクラスをBクラスのフィールド宣言に代入した場合もアドレスが保持されるだけなんでしょうか


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

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

559:デフォルトの名無しさん
09/03/30 21:23:16
>>558
参照渡しと値渡しと
参照型と値型は別物ぞよ

560:デフォルトの名無しさん
09/03/30 21:33:54
>>559
そうですね^^;

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


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch