ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
151:デフォルトの名無しさん
08/03/26 10:32:25
>>147
JITの勝手、作る側は意識しない。
今現在どうなっているのかというなら、アセンブリ単位で読み込まれているようだ。
用語の意味や詳細がわからないなら以下を読め、ただしプログラム初学者には難易度は高いぞ。
URLリンク(www.atmarkit.co.jp)

152:デフォルトの名無しさん
08/03/26 10:45:34
>>147
メモリ上に読み込まれるのと、型として評価されるのと、
特定のメソッドがJITでコンパイルされるタイミングはどれも違う。
型として評価されるタイミングならスタティックイニシャライザに
WriteLineを仕込んでみると近似できると思うよ。

153:デフォルトの名無しさん
08/03/26 11:41:00
C++でStack.Popが例外安全に作る方法が無いというのが
C#でどのように克服されてるかという話かもしれない

154:デフォルトの名無しさん
08/03/26 11:54:34
克服もなにも例外が非安全になる言語はC++だけだ、そもそも例外の実装に失敗している
C++では、例外を使わないという事を検討すべきだな、故障中と書かれた蛇口をひねるような真似はすべきでない。
この話題は、もはやスレ違いだ 147 は死ねって事でFA。

155:デフォルトの名無しさん
08/03/26 12:04:22
>>147
使われる前には読み込まれていなければならない
具体的なタイミングは実装依存だったと思う

156:デフォルトの名無しさん
08/03/26 12:05:16
いやいやC#だって基本保証すらないメソッドを作れる。
作るほうが難しいけど。
C++はただなんでも値渡しでコピーするから
例外投げないメソッドが作りづらいだけじゃないか、それが致命的なんだけど。

157:155
08/03/26 12:07:03
メソッドのことだったのか
>>155は変数の中身のことだから忘れてくれ

158:119
08/03/26 13:10:19
20行目と22行目の下にgoto文入れたら解決しました。
ついでにもうひとつ質問ですがデバッガはどこを押せばできますか?
使ってるソフトはMicrosoft Visual C# 2008です。
おしえてください

159:デフォルトの名無しさん
08/03/26 13:16:24
こんなコードにgoto文使うなよ

160:デフォルトの名無しさん
08/03/26 13:18:56
switchと多重ループ抜けるとき以外はgoto使用禁止
デバッグは止めたいところにカーソル置いてF9を押してブレークポイントを追加してからF5

161:デフォルトの名無しさん
08/03/26 13:19:54
このコードでごとぅって思考放棄じゃね?

162:デフォルトの名無しさん
08/03/26 13:25:15
どこの初心者サイトや入門書でもgotoをはじめに教えるなんてありえないけど
goto使いまくるような言語から入った人なのかな

163:デフォルトの名無しさん
08/03/26 13:28:14
gotoは大域gotoじゃなきゃ別に危険じゃないんだぞ

164:デフォルトの名無しさん
08/03/26 13:31:44
昨今、危険かどうかというより可読性の問題が大きい。

165:デフォルトの名無しさん
08/03/26 13:35:50
gotoはスパゲッティーコードの元。

166:デフォルトの名無しさん
08/03/26 13:36:41
上向きのgotoはコンパイルエラーでもいいと思う

167:デフォルトの名無しさん
08/03/26 13:36:49
>>158,119
考えられるケースを書き出してからコード書き始めると漏れがなくなる。

abc
123
132
213
231
312
321

あと重複チェックは先頭でやってしまったほうがいいな。
正しくない入力データはなるべく早く排除しておいたほうがいい。
というのを踏まえてgoto抜きで書き直してみ。
別に使っちゃいけないわけじゃないがこのケースで使う必要は0。

それからgotoネタは他所でやった方がレスの共通化が図れて効率的。

168:デフォルトの名無しさん
08/03/26 13:37:12
goto使いまくる言語ってどんなだよ
スクリプト系か

169:デフォルトの名無しさん
08/03/26 13:37:16
一つの関数を巨大にしない限り
gotoでスパゲッティになることもない
問題なのは巨大な関数の方でgotoじゃない

170:デフォルトの名無しさん
08/03/26 13:42:31
>>168
HSPとかかなぁ。よく知らないけど。

171:デフォルトの名無しさん
08/03/26 13:42:52
あーHSPはgoto使いまくるね

172:デフォルトの名無しさん
08/03/26 13:43:39
gotoを使うべきところはあるが、どう見ても>>119は使うべきでない所だろ。
スパゲティとかいうレベルじゃなく場当たり的に回避してるだけだ

173:デフォルトの名無しさん
08/03/26 13:45:43
複雑なifとか多重ループはわかりにくいから
避けられるなら避けるべきだ

174:デフォルトの名無しさん
08/03/26 13:59:25
このスレには、チームで開発しててコードの書き方に異様にこだわる人がいる。
チームのメンバとか、他社へ納品するとか、他人が見る可能性がある場合は、
そういうことに気をつける必要はある。

だが、個人で書いてて誰にも見せないなら、どんな書き方をしようが個人の自由。
気にするな。

でもgotoは、COBOLとRPGでreturnとかcontinueとかbreakとかがなくて
仕方なく使ってたのが最後だな。

175:デフォルトの名無しさん
08/03/26 14:08:13
ラベル付きbreakがあれば下向きgotoやめてもいいな。

176:デフォルトの名無しさん
08/03/26 15:25:52
時間を取得して、 以下のような処理をさせたいのですが、
時間のみの取得がどうすればいいのか分かりません。
long tick = DateTime.Now.Ticks;
DateTime d = new DateTime(tick);
というサンプルを見つけたのですが、これでは年〜秒まで取得してしまします。
どのようにすればよいかご助言下さい。
if(4時<時間<=11時)
{
          処理1
}
else if(11時<時間<=16時)
{
処理2
}
else
{
処理3
}

177:デフォルトの名無しさん
08/03/26 15:39:32
DateTime.Now.Hour
つかDateTime構造体をちゃんと調べれ

178:デフォルトの名無しさん
08/03/26 15:41:31
>>174
どうみても>>119は初心者なんだから個人の自由とかの議論の前にみんなが指摘してやってるだけだと思うよ。

179:デフォルトの名無しさん
08/03/26 15:51:03
C#でgetchar();に相当する物ってなんでしょうか?
C言語で入力を待って実行するのに便利だったのですが。

180:デフォルトの名無しさん
08/03/26 15:51:48
>>177
ありがとうございます。

181:デフォルトの名無しさん
08/03/26 15:53:35
Console.Read()

182:デフォルトの名無しさん
08/03/26 15:54:34
>>179
URLリンク(msdn.microsoft.com)

183:デフォルトの名無しさん
08/03/26 15:58:27
>>181-182
thx

184:デフォルトの名無しさん
08/03/26 17:08:51
Enum型のみを指定できるジェネリッククラスを作ろうと思ったのですが、whereでEnumを指定できないため、
Where T : Typeとしました。
このとき、TがEnumから派生したものでない場合、例外を投げるにはどの例外を投げたらいいでしょうか?
ArgumentExceptionにメッセージでEnumを継承してないからだめって書いて投げてもいいのでしょうか?

185:デフォルトの名無しさん
08/03/26 17:13:50
where T : structだろ
例外はなんでもいいんじゃね
どうせ実行時には発生しちゃいけないはずなんだから

186:184
08/03/26 17:14:26
すいません、where T : Typeは余計でしたので、無視してください orz
whereは指定していませんが、上記の場合、どの例外を投げるのが適切なのでしょうか?

187:デフォルトの名無しさん
08/03/26 17:42:29
みんなが作った
Windows コントロール ライブラリ
見れるところってありますか?

188:デフォルトの名無しさん
08/03/26 17:49:20
>>186
where T : structにしといたほうがいい
TEnumのほうがいいかも
ArgumentExceptionはメソッドの引数の例外だからExceptionかその直接の派生クラス作って投げたら

>>187
codeplexとかcodeprojectとか

189:デフォルトの名無しさん
08/03/26 18:04:48
>>185
コンパイルエラーにできないということはそういう使い方をするなということなんでしょうかね…

>>188
TypeLoadExceptionというものを見つけたんですが、これはまた別物なんでしょうか?

それと、お二方のご指摘通り、where T : structを指定しました。
ありがとうございます。

190:デフォルトの名無しさん
08/03/26 20:05:00
private List<string> GetList()
{
List<string> list = new List<string>();
return list;
}


List<string> list = GetList();にするとnullが返って来てエラーとなります。
こういうものなのですかね?。

191:デフォルトの名無しさん
08/03/26 20:16:07
>>190
ちょw

192:デフォルトの名無しさん
08/03/26 20:17:07
>>190
それはおかしい
そのコードでnullが返ることは無い

193:デフォルトの名無しさん
08/03/26 20:17:48
>>156
>例外投げないメソッドが作りづらいだけじゃないか
具体的に例外安全とならない例をひとつ挙げてみてもらえないか?
不可能だと思ったので、すこし興味深い。

194:デフォルトの名無しさん
08/03/26 20:19:01
>>190
クリーン再インストールすると治るんじゃないかなw

195:デフォルトの名無しさん
08/03/26 20:22:40
C#で作っているプログラム aaa.exe から
別のプログラム bbb.exe 上の
ボタンを自動で押したいのですが、どうやればいいのでしょうか?


196:デフォルトの名無しさん
08/03/26 20:25:44
>>195
セキュリティー上の重大な問題を引起こす、その種の操作は一般にはできない。
無理すればできるが、かなり高度な話題、相互運用でググれ。

197:デフォルトの名無しさん
08/03/26 20:31:34
>>195
bbb.exe側のソースをいじれるなら .NETリモート処理で対応する。
できないなら>>196のいうとおりAPIいじくるしかない。

198:190
08/03/26 20:40:43
やはりおかしいですよね・・・。私も不思議だったので投げてみました。
家族の夕食を作って食べてから出直してきます。

みなさん、ありがとう。

199:デフォルトの名無しさん
08/03/26 20:55:52
コンソールアプリケーションだとこのようなコードがコンパイル出来ません。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(f());
}

private int f()
{
return 10;
}
}
}
f()をstaticなメソッドにすれば問題ないのですが何故ですか?
フォームアプリケーションではstaticでなくても問題ないみたいですが…。

200:デフォルトの名無しさん
08/03/26 20:58:39
>>196>>197
bbb.exeはいじれないです。
APIでいじる方法のキーワードとなりそうなググり方でも教えていただけると嬉しいです

201:デフォルトの名無しさん
08/03/26 21:02:33
>>199
フォームアプリケーションでは、
ウィザードが生成するコードの中でインスタンスを作っている。
コンソールアプリケーションでは、自分でインスタンスを作らないといけない。
static void Main(string[] args)
{
Program p = new Program;
Console.WriteLine(p.f());
}


202:デフォルトの名無しさん
08/03/26 21:08:47
>>201
ありがとうございました!
Mainのあるクラスですらインスタンスを作らなくちゃいけないんですね。
たしかにstaticなのはMainだけだからそうなんだろうけど自分自身を作るみたいで変な感じ^^;

203:デフォルトの名無しさん
08/03/26 21:16:13
そういえばVS2003以前はフォームのクラスの中にMainがあったよな
当時は何の疑問も感じずに使ってたけどProgram.csに慣れると
コンポーネントの中にエントリポイントがあるっておかしいだろ普通に考えて

204:デフォルトの名無しさん
08/03/26 21:20:44
>>200
URLリンク(www.microsoft.com)
APIの使い方が分らないというならキッパリ諦めた方がいい。

205:デフォルトの名無しさん
08/03/26 21:44:19
>>200
FindWindow系で対象のボタンのウインドウハンドルを探して
クリックしたメッセージを送るか、マウス操作をエミュレート

206:デフォルトの名無しさん
08/03/26 22:06:39
>>204>>205
対称となるウィンドウ(ボタン)は固定なので、SendMessageくらいで出来ると嬉しいです。
Spy++のように座標が取得できればマウス動かしてやろうかな
などと考えております

207:デフォルトの名無しさん
08/03/26 22:21:50
>>206
ならDllImportAttributeあたりを調べてみるといい

208:デフォルトの名無しさん
08/03/26 22:33:49
>>206
対象のウィンドウのウィンドウハンドル取得後、
GetWindowRectで対象ウィンドウの現在位置を取得して、
対象ウィンドウの左上座標からの相対位置から、スクリーン座標を求めた後に、
WindowFromPointでボタンのウィンドウハンドルを取得し、
SendMessageでキーのアップダウンメッセージなりマウスのアップダウン(クリック)メッセージなりを
送ればいいとおもわれ

209:デフォルトの名無しさん
08/03/26 22:37:07
BOTでも作るの?

210:デフォルトの名無しさん
08/03/26 22:38:14
BOTなんてやるならクライアントをエミュレートした方が早いだろ。

211:デフォルトの名無しさん
08/03/26 22:44:30
つか、このレベルの事をやりたいのなら、ここじゃなくてふさわしいスレッドへ行けよ
さらに言うなら、この程度自力でなんとかしやがれ。

212:デフォルトの名無しさん
08/03/27 00:08:19
C#というのは、名前とは違い、CとC++のどちらにも互換性が無いのだろう。
ANSIの標準ライブラリは、何一つC#では使えないんだろうな。
それなら、VB.NETのほうが良いのでは。
VBを知らない人のための言語のように思えるが。

213:デフォルトの名無しさん
08/03/27 00:22:28
コンパイラ エラー CS0274 って別にエラーにする必要なくね?

public int Property
{
  get { return hoge; }
  private set { hoge = value; }
}
より

public int Property
{
  public get { return hoge; }
  private set { hoge = value; }
}
のほうがシンメトリックだし。

214:デフォルトの名無しさん
08/03/27 00:33:21
>>213
ヘジたんの御心のままです

215:デフォルトの名無しさん
08/03/27 00:39:46
わざわざ、public書く必要もないが、禁止するほどのことでもないな。

216:デフォルトの名無しさん
08/03/27 01:09:01
C#で電子メールクライアントを作っているのですが、Windowsの右クリックメニューにある
「送る」->「メール受信者」という項目から通常使うメーラとして起動したいのですが、

HKEY_LOCAL\SOFTWARE\Clients\Mail\nullmail\Protocols\mailto\shell\open\command
HKEY_LOCAL\SOFTWARE\Clients\Mail\nullmail\shell\open\command

などのレジストリを書き換えても動いてくれません。
IEの通常使うメールソフトの設定には表示されているのですが、なぜか起動すらしてくれないのです。

Gmail等のWebメールでURLに引数を付けて呼び出す方法などだと動くのですが、
.NETでメールを書く場合には何かルールがあるのでしょうか?

217:デフォルトの名無しさん
08/03/27 02:52:38
初めてプログラムを学ぶ者です。
C#を使えるようにしたいのですが、
どのように勉強するのが効率的なのでしょうか?

一応、15日ほど前にC#の絵本というのを買って
Micro Soft Visual Studio C# 2005 Express Edition
というツールを使いながら読み進めているのですが、
サンプルプログラムに省略されている部分が多くてよくわからないのです。

218:デフォルトの名無しさん
08/03/27 08:47:31
TreeNode[] tn = treeView.Nodes.Find(key, true);

これってつまり重複したキーが使えるという事なのでしょうか?
今まで気づかなかったorz

219:デフォルトの名無しさん
08/03/27 09:05:21
テトリスを作ってみたいのですが少し調べてみたらXNAとDirectXと2つあるようです。
どちらで作ればよいのでしょうか?

220:デフォルトの名無しさん
08/03/27 09:27:17
XNA・・・xbox360でも動く、資料少ない。将来性あるのか謎。
      PCだと、XNAランタイムみたいなの入れてないと動かないPO
DirectX・・・資料多い。ややめんどくさいかも。PCだけだとこっちの方が動く環境多い


221:デフォルトの名無しさん
08/03/27 09:28:00
テトリスレベルならGDIでいいんじゃね

222:デフォルトの名無しさん
08/03/27 09:29:56
C#でDirectXつかう利点あるの?
C++つかったほうが

223:デフォルトの名無しさん
08/03/27 09:36:15
とりあえず何か作ってみたいのです。

224:デフォルトの名無しさん
08/03/27 09:45:54
>>223
じゃあどっちでも良いじゃん

225:デフォルトの名無しさん
08/03/27 09:55:48
XNAは、Xbox360と共通化されたDirectXのラッパーで、C#から楽に呼べる。
C#にする時点で.NETを入れる必要があるんだから
XNAのランタイムを入れる必要があるってデメリットは無視できると思う。

「DirectX」がもしManaged DirectXのことを言ってるんだとしたら結局は同じ。
Managed DirectXは見捨てられ、XNAにシフトした。
ただし、360コントローラ以外のパッドのようにXbox360と互換がないデバイスは
XNAでサポートされていないのでManaged DirectXを使う必要がある。

DirectXを直接C#から呼ぶのは大変。


と時間が出来たら技術的興味からXNAに触ってみようとしてるやつが思った、
間違ってるとこがあるかもしれない戯れ言

226:デフォルトの名無しさん
08/03/27 10:07:06
これ嫁
URLリンク(www.amazon.co.jp)

227:デフォルトの名無しさん
08/03/27 10:40:13
最終的にはGDI関係をDirectXの上に乗ったライブラリとして実装しようという流れは変わらないみたいだし
そうすると、セキュリティーの関係上DirectXがマネージドでないと都合が悪いので
どういう形になるにせよ、DirectXがマネージドになるのは時間の問題かと。
現在のDirectXがマネージドDirectXラッパーになるのでは。

228:デフォルトの名無しさん
08/03/27 11:10:35
C#の資格試験はどういうものがありますか

229:デフォルトの名無しさん
08/03/27 11:46:06
ToolStripMenuItemの1つ上にあるToolStripMenuItemはどうやったら調べられますか?

230:229
08/03/27 11:49:17
OwnerItemでした

231:デフォルトの名無しさん
08/03/27 13:37:42
>>228
MCTS,MCPD

232:デフォルトの名無しさん
08/03/27 13:56:33
掛け算の式を表示するプログラムを作ってみたのですが、まったく表示されません。なぜなのかおしえてください
using System;

class aaa
{
public static void Main()
{
for (int a = 1; a == 9; ++a)
{
for (int b = 1; b == 9; ++b)
{
Console.Write("{0}*{1}",a,b);
}
Console.Write("\n");
}
}
}

233:デフォルトの名無しさん
08/03/27 14:15:17
> for (int a = 1; a == 9; ++a)
a == 9 が true の間だけループを回す、って意味だが。

234:デフォルトの名無しさん
08/03/27 14:16:48
>>225
DInputゲームパッドから入力とるだけならC#+Marshalingで直さわりしても
正直一日仕事レベルなのだが意外に知られてないっつーか

キーマップやら無理ない設計やら面倒くさいもの(しかしあまり使われない)が
ややこしいのは確かなんだが

235:デフォルトの名無しさん
08/03/27 14:38:42
XNA使って箱で動かないものを書いてどうする

236:デフォルトの名無しさん
08/03/27 14:42:08
SlimDXおすすめ
プライベート配置できるし

237:デフォルトの名無しさん
08/03/27 14:42:11
>>227
そもそも、DirectX自体がWPFとXNAに二分されて
フェードアウトするんじゃないか?
DirectShowなんか、既にWindows SDKに移住したし。

238:デフォルトの名無しさん
08/03/27 15:04:57
>>235
んなもん #if で終了だろ

239:デフォルトの名無しさん
08/03/27 16:36:39
型の使い分けについて教えて下さい。
int やlongの場合、intを使わずに全てlongで良いような気がするのですが、なぜintが存在しているのでしょうか?
素人考えだと、intで良い物はむやみにlongにするより、処理が早くてすむ、メモリの節約になる。
などの理由があるのかなと予想しているのですが。

240:デフォルトの名無しさん
08/03/27 16:43:01
>>239
>処理が早くてすむ、メモリの節約になる。

正解。


241:デフォルトの名無しさん
08/03/27 16:44:58
そうだよ?
誰もA1ノートなんて買わないだろ?使わないんだから

242:デフォルトの名無しさん
08/03/27 16:53:21
longよりintが先に存在したから

243:デフォルトの名無しさん
08/03/27 17:09:39
>>240-242
ありがとうございます。すっきりしました。

244:デフォルトの名無しさん
08/03/27 17:12:31
>>237
Direct3Dに関しては、WPFのブラシの一つとして実装されるのが一番綺麗だろうな。
逆にDirect3DのテクスチャとしてWPFがまた利用可能で、無限入れ子になってくれば汎用性も高そうな気がする。
消滅に関しては今更感があるので難しいかと。

245:デフォルトの名無しさん
08/03/27 17:15:00
>>239
現状だとCPUが32ビットで、複数回に分けて計算されるので
long だと、マルチスレッドではいちいちlockしないといけないのが面倒くさいという実務上の都合もあるな。

246:デフォルトの名無しさん
08/03/27 17:15:14
WPFのもっと低レベルな描画方法は欲しい

247:デフォルトの名無しさん
08/03/27 18:39:55
>>245
thx 参考になります。

248:デフォルトの名無しさん
08/03/27 19:12:38
tryの中で冷害が起きるとFにみちりりんの中は実行されるですか?

249:デフォルトの名無しさん
08/03/27 19:15:42
それ面白いと思って書いてるのかな。
ちっとも面白くないが、君が「オカシイ」奴だということだけはよくわかるよ

250:デフォルトの名無しさん
08/03/27 19:33:52
オーバーロードがないと叱られるのですが、どうしたら良いですか?

ToolStripItem.MouseUp += new EventHandler(fff);

private void fff(object sender, MouseEventArgs e)
{

}

251:デフォルトの名無しさん
08/03/27 19:36:16
ToolStripItem.MouseUp += new MouseEventHandler(fff);
または
ToolStripItem.MouseUp += fff;

252:デフォルトの名無しさん
08/03/27 19:41:18
>>251
ありがとうございます。

EventHandlerで全て処理するのかと思い込んでいました。
指摘されて電気が走りました・・・。

253:デフォルトの名無しさん
08/03/27 21:05:38
foreachの中で要素を消すのは違法ですか?

254:デフォルトの名無しさん
08/03/27 21:11:05
ダメ。ゼッタイ。

255:デフォルトの名無しさん
08/03/27 21:13:35
消すのイクナイ。

256:デフォルトの名無しさん
08/03/27 21:32:27
てかコンパイルエラー吐くだろ。設定で無視できるのか?

257:デフォルトの名無しさん
08/03/27 23:07:13
SplitContainerでdockをfillにしてフォームのサイズを変更するとラインの位置が比率?で
変わりますがこれをどちらかだけ固定する方法はないのでしょうか?

258:257
08/03/27 23:08:40
ありました・・・
今度は30秒待ってから書きますorz

259:デフォルトの名無しさん
08/03/27 23:36:55
フォームが非アクティブの時にもキー入力を取得したいのですがどうしたらいいんでしょうか?

260:デフォルトの名無しさん
08/03/27 23:38:15
ほっく

261:デフォルトの名無しさん
08/03/28 00:01:05
URLリンク(homepage3.nifty.com)
ここの「ホットキーを登録する」をコピペしたら動きました。
これから理解したいと思います。

262:デフォルトの名無しさん
08/03/28 02:34:15
初心者で申し訳ないんですが、ジェネリックの使い方がいまいち分かっていないようです
以下のような、任意のデータ方を扱えるconsを作りたいのですが、うまくいきません。ご教鞭願いたいです

class Cons<T,U>
{
  private T left;
  private U right;

  public T car
  {
    get { return left; }
    set { left = value; }
  }

  public U cdr
  {
    get { return right; }
    set { right = value; }
  }

  public Cons(T a,U b)
  {
    this.left = a;
    this.right = b;
  }

263:つづき
08/03/28 02:34:53
  public override string ToString()
  {
    return "(" + left.ToString() + "." + right.ToString() + ")";
  }

  static void Main()
  {
    Cons a = new Cons(10, "a");
    Console.WriteLine(a.ToString());
  }
}

264:デフォルトの名無しさん
08/03/28 02:36:54
プラスとして、恐らく上のままでは一旦
Cons a = new Cons(10,"abc");
などとして作った後、
a.car="foo";
とするとエラーになると思うのですが、解決策はあるでしょうか?

265:デフォルトの名無しさん
08/03/28 02:46:24
>>264
この2つを直せば動く。
1. ジェネリッククラス内にエントリポイントMainは置けない。
2. ジェネリッククラスを使うときには、Cons<int, string>のように
ジェネリックの引数を指定しないといけない。


266:デフォルトの名無しさん
08/03/28 03:02:32
ちなみに、
型推論を働かせたい場合、コンストラクタでは無理。

static partial class New
{
 static Cons<T, U> Cons<T, U>(T left, U right) { return new Cons<T, U> (left, right); }
}
みたいな static メソッドを書けば、
C# 3.0 なら
var a = New.Cons(10, "abc");
で、Cons<int, string> が作られたりはする。

267:デフォルトの名無しさん
08/03/28 03:05:29
すみません、少し質問の仕方が悪かったですね。

・任意のデータ型を内包できるリスト構造を作れるか
・そのリストの要素をまた別の任意の型へ変換できるものが作れるか

この2点が知りたいです。
そんなに柔軟な型にこだわるならスクリプト言語でもいじってろと思うかもしれませんが・・・

268:デフォルトの名無しさん
08/03/28 03:07:09
>>266
なるほど、結構しんどくなってくるんですね・・・

269:デフォルトの名無しさん
08/03/28 03:22:08
自己解決しました。普通にobject型使えば一発でした。
吊ってきます。

270:デフォルトの名無しさん
08/03/28 06:42:43
>>268
横やりだけど、これって関数型言語のような事をしたいという意味に取れたのですが
もしそうだとしたら、プロパティーに set をつけること事態がよろしくないのでは?
と思ったりしたのですが・・・・
やるとすれば、たとえば string クラスや DateTime クラスのように
一回設定したら変更できないタイプのクラスに設計するのが美しいような予感がします。

271:デフォルトの名無しさん
08/03/28 07:11:04
自分が実装するなら・・・こうかな
public class Pair<T,U> {
 T left ;
 U right ;
 public T Left { return left ; }
 public U Right { return right ; }
 public Pair<T,U>(T l ,U r) { left = l ; right = r ; }
 public override string ToString() {
  return "(" + left.ToString() + "." + right.ToString() + ")";
 }
}
public static class Lisp {
 public static T Car<T,U>( this Pair<T,U> pair ) { return pair.left ; }
 public static U Cdr<T,U>( this Pair<T,U> pair ) { return pair.right ; }
 public static T SetCar<V,U>( this Pair<T,U> pair , V left ) { return new Pair<V,U>( left , pair.right ) ; }
 public static U SetCdr<T,V>( this Pair<T,U> pair , V right ) { return new Pair<T,V>( pair.left , right ) ; }
 public static Pair<T,U> Cons<T,U>( T left , U right ) { return new Pair<T,U>( left , right ) ; }
}
class MyClass {
 void Main() {
  var a = Lisp.Cons( 10 , "a" ).Car() ;
  var b = a.SetCar( "foo" ) ;
Console.WriteLine(a.ToString());
 }
}

272:デフォルトの名無しさん
08/03/28 07:26:52
まちがっている
 public static T SetCar<V,U>( this Pair<T,U> pair , V left ) { return new Pair<V,U>( left , pair.right ) ; }
 public static U SetCdr<T,V>( this Pair<T,U> pair , V right ) { return new Pair<T,V>( pair.left , right ) ; }
  ↓
 public static Pair<V,U> SetCar<T,U,V>( this Pair<T,U> pair , V left ) { return new Pair<V,U>( left , pair.right ) ; }
 public static Pair<T,V> SetCdr<T,U,V>( this Pair<T,U> pair , V right ) { return new Pair<T,V>( pair.left , right ) ; }
コンパイルしていないのでまだあるかも知れない。


273:デフォルトの名無しさん
08/03/28 08:27:11
public T Left { ... }

public T Left { get { ... } }

pair.left

pair.Left

あとはMainもおかしい
aはint

274:デフォルトの名無しさん
08/03/28 09:06:50
>>269
ジェネリックスはもともと関数型言語由来だから相性は悪くないはず
object などと妥協せずとことんやりこんでみる事をお勧めする。

275:デフォルトの名無しさん
08/03/28 10:39:38
lock(x)
{
}

を有効にするにはxオブジェクトを private static で修飾する、ということであってますか?

276:デフォルトの名無しさん
08/03/28 11:00:31
static が付くとは限らないんじゃないか
readonly をつけることは結構あるかも

277:デフォルトの名無しさん
08/03/28 12:31:07
>>275
日本語書け。

「有効にする」とはどういう意味?
あるいは、「有効にする」というからには「無効」という状態があるんだろうが
「lock(x)が無効」とは具体的にどんな事態のことを指してるの?

278:デフォルトの名無しさん
08/03/28 13:06:03
>>275
MSDNでlockのところ読んどけ

279:デフォルトの名無しさん
08/03/28 13:53:17
>>276
おぃ、なんちゅートンデモアドバイスを与えいるんだ?

280:デフォルトの名無しさん
08/03/28 19:04:42
Test

281:デフォルトの名無しさん
08/03/28 20:04:53
private string[] List_GetItem(string url)
{
foreach (string[] item in list_news) if (item[0] == url) return item;
return null;
}

こういう書き方ってきもいかな?

282:デフォルトの名無しさん
08/03/28 20:09:46
うん

283:デフォルトの名無しさん
08/03/28 20:12:14
foreachで回す必要なし

284:デフォルトの名無しさん
08/03/28 20:14:15
メソッド名がきもいです

285:デフォルトの名無しさん
08/03/28 20:19:08
つーか、メソッドにする必要なくね?

286:デフォルトの名無しさん
08/03/28 20:25:14
list_newsがList<string[]>なら、
list_news.Find(x => x[0] == url)
ですむんじゃまいか。

287:デフォルトの名無しさん
08/03/28 20:29:21
List_まではいいけど、GetItemがものすごく嫌だな
たぶん.NetFrameworkの上でなければ全然気にならないんだろうけどwww

288:デフォルトの名無しさん
08/03/28 20:36:40
TransparencyKeyで透過色を指定した後、
やっぱり透過をやめたい場合はどうすればいいんでしょうか??

289:281
08/03/28 21:11:32
みなさん、ありがとうございます
メソッド名がきもいのは許して・・・

>>286
こういう書き方ができるのですね
勉強になります

290:デフォルトの名無しさん
08/03/29 13:05:15
基底クラス内で宣言したクラスや構造体に
派生クラスからメンバを追加する方法ってありますか?

291:デフォルトの名無しさん
08/03/29 13:12:43
意味が分からん
具体的に何がしたい

292:デフォルトの名無しさん
08/03/29 13:13:08
class Base {
 //Nestedオブジェクトは常にこのメソッドを通して作ること!
 protected virtual Nested CreateNested() { return new Nested(); }
 protected class Nested { }
}
class Derived {
 protected override Nested CreateNested() { return new DerivedNested(); }
 class DerivedNested : Nested { public void NewMember() { } }
}
こういうことか?

293:デフォルトの名無しさん
08/03/29 14:13:59
たぶん例えばListViewItemを継承したクラスで、ListViewSubItemを継承したいとかそんなことだと予想。

最近何通りにも解釈できる短い日本語だけで、何も具体的に書かないのが多いな。
しかもそれに対して、こうでしたって書き込みがない。
釣りか?

294:デフォルトの名無しさん
08/03/29 14:26:27
釣りではないでしょ。
むしろこういうタイプの「彼」は、「俺様の意図が理解できないなら黙ってろよこの煽り厨房が」
ぐらいのことをリアルで思ってように感じられる。

295:デフォルトの名無しさん
08/03/29 14:28:16
お前ら偉そうだなっ!










これからも宜しくお願いしますm(_._)m

飛び入りです

296:デフォルトの名無しさん
08/03/29 14:38:30
お前ら偉そうだなっ!










これからも宜しくお願いしますm(_._)m

通りすがりです

297:デフォルトの名無しさん
08/03/29 14:55:22
若い人は特に言葉使いとか礼を述べる習慣がありませんからね
そういう教育をしてこなかった世代にも誤りがあります

298:デフォルトの名無しさん
08/03/29 15:05:13
>>297
礼儀の問題か。
説明能力の問題だろう。
まあ君の場合は理解力の問題でもある。

299:デフォルトの名無しさん
08/03/29 15:08:51
>>298
1から1000まで書かないと理解して貰えませんでしたか、とても残念です。

300:デフォルトの名無しさん
08/03/29 15:18:21
どんな幸せ回路内蔵してんだろコイツ

301:デフォルトの名無しさん
08/03/29 15:49:20
ただのバカですな、そのままの意味で理解するなら不可能とだけ答えて終わりにしておきませう。
きっと彼の想像するお望みの機能はあっさり実装できると思われますが。

302:デフォルトの名無しさん
08/03/29 16:09:21
ユーザーが指定した数だけ数字を入力できるプログラムを作りたいのですが、エラーが出て実効できません、どこがおかしいのかおしえてください
using System;

class aaa
{
public static void Main()
{
int a = int.Parse(Console.ReadLine());
int[] b= new int [a];
for(int c=0;c<=a;++c)
{
a[c] = int.Parse(Console.ReadLine());
}
}
}

303:デフォルトの名無しさん
08/03/29 16:12:04
c<=a  ←これがおかしい

304:デフォルトの名無しさん
08/03/29 16:24:42
なんでエラーメッセージを読みすらしないんだろう?

305:デフォルトの名無しさん
08/03/29 16:26:39
エラーメッセージよんでもわかりませんでした。
あと直す箇所はどうやってなおしたらいいかおしえてください

306:デフォルトの名無しさん
08/03/29 16:28:39
>>305
では、ここに来る前に入門書を購入してしばらくやってください。
ちょっと迷惑にもほどがありますね。

307:デフォルトの名無しさん
08/03/29 16:29:03
どう見てもs/a[c]/b[c]/だろ。
c=<aはおかしいがc<=aは正しい
aは配列じゃない云々言われたはずだが、どうして分からないとか言えるんだ?

308:デフォルトの名無しさん
08/03/29 16:31:13
すいません、もっとよく勉強してから来ます

309:デフォルトの名無しさん
08/03/29 16:32:32
DataSetを利用している人って多いい?

310:デフォルトの名無しさん
08/03/29 16:34:54
趣味の人は使わないと思うよ、実務系のひとなら大抵使っているかと。

311:デフォルトの名無しさん
08/03/29 17:18:12
TransparencyKeyで透過色を指定した後、
やっぱり透過をやめたい場合はどうすればいいんでしょうか??


312:デフォルトの名無しさん
08/03/29 17:56:25
C#で作成したアプリケーションをスタートアップに登録しても起動しないんですが、何が悪いんでしょうか?
OS起動後に実行すれば問題なく実行できます。
環境は
OS:WindowsXPSP2
IDE:Visualstudio2005pro
.netframework2
です。

313:デフォルトの名無しさん
08/03/29 18:05:51
>>312
当方まったく同じ環境ですが、問題なく起動しています。
別に原因があるんじゃないですかね?

314:デフォルトの名無しさん
08/03/29 18:07:40
他ユーザの場所に登録したんじゃないの?

315:デフォルトの名無しさん
08/03/29 18:12:23
>>311
Color.Empty でも指定すれば良いんじゃね

316:デフォルトの名無しさん
08/03/29 18:33:44
>>310
今までデータ管理は自分でやっていたから気にしてなかったのですがさっき自分が使いやすいように
固めて扱ってみたらわりと便利そうな感じです。これから設定などはこれを利用してみようと思います。

317:デフォルトの名無しさん
08/03/29 18:35:25
>>316
これからやるなら、せっかくだからLINQ攻めてみたらどうだい?

318:デフォルトの名無しさん
08/03/29 18:42:43
スレチすいません。
Visual Studio 2005のヘルプのようなヘルプを作りたいのですがどうすればいいのでしょう?

319:デフォルトの名無しさん
08/03/29 19:02:12
ウィンドウの最小サイズってどのくらいなんでしょう?
30*30に設定してもならないですし、
フォームにラベル貼ってAutoSizeで大きく表示したあと、そのラベルを30*30くらいまで下げると縦長のウィンドウになっちゃうし…。

320:デフォルトの名無しさん
08/03/29 19:11:13
>>316
sqlとの付き合いも長いからある程度は使えると思うのですがまだ利用のイメージが
わかないのです。あると便利なのはわかるのですがそれを有効に使うには結局、
メモリ以上に大量のデーターベースをおいて置かないといけないって事ですよね?。

321:デフォルトの名無しさん
08/03/29 19:25:40
>>319
SystemInformation.MinimizedWindowSize
SystemInformation.MinWindowTrackSize
この辺じゃね?


322:デフォルトの名無しさん
08/03/29 20:01:01
>>320
そんな激しいもんじゃないよ、テーブルの定義がclassのフィールドもしくはプロパティーになって
その配列(シーケンスとよばれている)がテーブル
それに対してクエリを発行しましょうという物。
その テーブルの定義 == class に Sql やら XML やら、自作DBを関連付けて統一的に取り扱えるようにしましょうという物。

323:デフォルトの名無しさん
08/03/29 20:01:18
>>321
てことは30*30とかには変更できないって事ですね。
でもラベルのAutoSizeに合わせるとバグるのはなんでなんだろ

324:デフォルトの名無しさん
08/03/29 22:24:58
>>318
NDocは更新が止まっていた気がするので今だとSandcastle?

325:デフォルトの名無しさん
08/03/29 22:38:15
>>318
どこかで見かけたなと思って、スタートメニューの中をのぞいていたら HTML Help Workshop というのがあって
ためしにチョコチョコっと作ったらできた。
初代VS,2002,2003,2005,2008のどれかについてきたものだと思う、調べてみるといいかも。

326:デフォルトの名無しさん
08/03/29 22:52:17
Officeについていたりもするよ

327:デフォルトの名無しさん
08/03/29 22:57:05
チェックボックスやラジオボタンの状態を保存するのってどうすればいいのでしょうか?
誰か、暇だったら教えて下さい><

328:デフォルトの名無しさん
08/03/29 22:58:04
>>327
プロパティー読み出して適当な変数に保存しておればいいかと。
Checkedという名前だった・・・はず

329:デフォルトの名無しさん
08/03/29 23:11:32
>>328
ありがとうございます。明日起きたらやってみますzzz

330:デフォルトの名無しさん
08/03/29 23:12:05
Sandcastleだな。

331:デフォルトの名無しさん
08/03/29 23:38:32
オブジェクトのプロパティの値を全てTextWriterに書き出す標準の方法ってある?
自分でリフレクション使ってやらないといけない?

332:デフォルトの名無しさん
08/03/29 23:45:33
プロパティの値といわれると制限が強いがXmlSerializer
フィールドならIFormatterだが直接TextWriterは無理か

333:デフォルトの名無しさん
08/03/29 23:47:46
>>331
シリアライザを使ったらいいと思うよ。

334:331
08/03/29 23:49:48
すみません デバッグ用に書き出したいだけなんです
イミディエイトウインドウなんかだと自動でやってくれるので,
もしかしたら標準的な方法が用意されてるのかなと

335:デフォルトの名無しさん
08/03/29 23:54:09
>>334
URLリンク(www.codeplex.com)
commonsと比べると微妙だった気がするが・・・

336:デフォルトの名無しさん
08/03/29 23:55:08
使ったことはないけど、デバッグ用のがあったな・・・
最近見かけておやっ、あとで調べとかなきゃとか思っていたんだが2008専用かもしれん。
今、手元にないので駄目だが、ツールボックスか、プロジェクトの追加の所を調べてみるといい、たしか有ったぞ。

337:デフォルトの名無しさん
08/03/30 09:05:33
>>336
Visualizer(デバッガ ビジュアライザ)の事?
あれはTextWriterに書き出すのとは用途が違うからなぁ・・

338:デフォルトの名無しさん
08/03/30 10:21:33
[]でアクセスするプロパティは作れますか?

339:デフォルトの名無しさん
08/03/30 10:24:20
うん

340:デフォルトの名無しさん
08/03/30 10:28:43
どうするの?

341:デフォルトの名無しさん
08/03/30 10:38:09
インデクサでぐぐれ

342:デフォルトの名無しさん
08/03/30 12:36:40
クラスのパブリックメンバ(プロパティ)で、
単に
public int Member1;
とするのと、get setを使用する
public int Member1()
{
get{return _member1;}
set{_member1 = value;}
}
とするのとは同じものと考えていいのでしょうか?

343:デフォルトの名無しさん
08/03/30 12:37:46
いいえ。
前者はフィールドで後者はプロパティです。

344:デフォルトの名無しさん
08/03/30 13:06:52
やることは一緒だろ

345:デフォルトの名無しさん
08/03/30 13:21:59
>>344
本格的に使ってみればわかる、全くの別物。

346:デフォルトの名無しさん
08/03/30 15:43:06
プロパティの方は、set時に値チェックをするもよし、内部状態を更新するもよし、get時に状況に応じて別のフィールドの値を返すもよし、例外を投げるもよし

347:デフォルトの名無しさん
08/03/30 16:01:42
自分で作っている範囲なら、その程度の範囲かもしれないしが
例えば DataGridView とかプロパティーのみを表示するクラスとか色々あるだろ
デザイナ上でのユーザーコントロールもそうだし
そういった所まで使い始めるとどちらで設計するかが使い勝手の良さを決定的に変える。

348:デフォルトの名無しさん
08/03/30 16:02:45
>>346
例外を投げるとは具体的にどのように?

349:デフォルトの名無しさん
08/03/30 16:04:04
>>348
346では無いが、そのぐらいは自分で考えてみたらどうだい?

350:デフォルトの名無しさん
08/03/30 16:10:36
Class1 c1 = new Class1();
c1.exceptionMessage = "";
if (c1.exceptionMessage != string.IsNullOrEmpty)
{
MessageBox.Show(c1.exceptionMessage);
c1.exceptionMessge = "";
}

351:デフォルトの名無しさん
08/03/30 16:18:06
>>350
C++上のメタプログラミングみたいだな、けど・・・でき悪い、キモイよ
使用したいなら更なる改善を要求する

352:デフォルトの名無しさん
08/03/30 17:35:21
NetworkStream.Flash()で強制送信だと思うのですがサーバー側はどうやって分けて受信したら
良いのでしょうか?

353:デフォルトの名無しさん
08/03/30 17:47:39
分けて受信とかTCPにそんな機能無いから

354:デフォルトの名無しさん
08/03/30 17:50:29
>>353
そうするとデータの最後に何らかの〆データを付加するしかないのですね

355:デフォルトの名無しさん
08/03/30 17:58:46
>>346
getで例外投げるのはガイドライン違反

356:デフォルトの名無しさん
08/03/30 18:06:21
Nullable<>.Valueとか普通に例外投げてくるけどね

357:デフォルトの名無しさん
08/03/30 18:11:57
それはキャッチされることを想定してないから問題ないんじゃないの
javaでいうところのチェック済み例外みたいなのをgetが投げちゃダメって意味だと思う

358:デフォルトの名無しさん
08/03/30 18:50:09
ref class Anime
{
  private Dictionary<Int32, String> titles;
}

こんなクラスで

Anime ccs = new Anime();
ccs.Title[0] = "さくらと不思議な本"

Console.WiteLine(ccs.Title[0]);

みたいに使えるプロパティを作るにはどうすればいいですか?
上記以外のコレクションへの直接操作は出来ない感じで。

359:デフォルトの名無しさん
08/03/30 18:53:15
>>358
>>341

360:デフォルトの名無しさん
08/03/30 18:58:46
>>358
まずC#に ref classはないだろ

class Anime
[
private Dictionary<int,string> titles;

public Dictionary<int,string> Titles{ get{ return titles; } }
}

これで出来る

361:デフォルトの名無しさん
08/03/30 18:59:01
>>358
public Dictionary<int, string> Titles { get{ return this.titles; } }

362:デフォルトの名無しさん
08/03/30 19:03:48
>上記以外のコレクションへの直接操作は出来ない感じで。
インデクサを通さないと他の操作やりたい放題だよ
public string this[int index] {
 get { return titles[index]; }
 set { if(titles.ContainsKey(index))titles[index]=value;else titles.Add(index,value); }
}

363:デフォルトの名無しさん
08/03/30 19:05:50
それだと構文が異なるだろ。

C#は名前つきインデクサ作れないから、プロキシオブジェクトを返さないと無理だ

364:デフォルトの名無しさん
08/03/30 19:08:21
iterindexコードスニペットを使えば幸せになれるかも
インデクサ自体の実装は>>362みたいな感じで

365:デフォルトの名無しさん
08/03/30 19:11:05
そもそもそれ関数じゃだめなのか?

366:デフォルトの名無しさん
08/03/30 19:50:51
DictionaryBaseでも継承したネストクラスを作って公開するのが普通だろ

367:デフォルトの名無しさん
08/03/30 19:56:42
今更非ジェネリックは無いわ

368:デフォルトの名無しさん
08/03/30 20:18:48
こうだろ

class Anime
{
Dictionary<string,int> titles;
TitlesIndexer indexer;

public Anime()
{
titles = new Dictionary<string,int>();
indexer = new TitlesIndexer(titles);
}

public TitlesIndexer Titles{ get{ return indexer; } }

public class TitlesIndexer
{
Dictionary<int,string> titles;

public TitlesIndexer(Dictionary<int,string> titles)
{
this.titles = titles;
}

public string this[int index]{ get{ return titles[index]} } }
}
}

369:デフォルトの名無しさん
08/03/30 20:21:36
358 じゃないですが、プロキシオブジェクトと聞いて・・・
以前からある System.Collections.ArrayList.ReadOnly や System.Collections.ArrayList.Synchronized
に対応する
ジェネリックス版は無いのでしょうか?
見つからなくてとりあえず自作してしまっているので、あれば交換しておきたい所。

370:デフォルトの名無しさん
08/03/30 20:22:31
>>365
そんな最低な仕様は嫌だろ、Linqも何も使えなくなっちまう。

371:デフォルトの名無しさん
08/03/30 20:24:49
>>369
ないよ。なくなっちゃった。

372:デフォルトの名無しさん
08/03/30 20:30:53
List<T>.AsReadOnlyはある

373:デフォルトの名無しさん
08/03/30 20:38:24
>>372
ども、Asが付いたのか
なんとも実装が中途半端だな、問題が見つかったのだろうか?


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

4343日前に更新/161 KB
担当:undef