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


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

C#, C♯, C#相談室 Part46



1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

前スレ
C#, C♯, C#相談室 Part45
pc11.2ch.net/test/read.cgi/tech/1200911737/

その他テンプレ>>2-5くらい

577 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:52:40 ]
WinFormsか・・・
WPF版がほしい。

578 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 22:24:21 ]
>>577
お前はこっち池カス

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
pc11.2ch.net/test/read.cgi/tech/1211453941/

579 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 05:22:08 ]
C#からWin32APIを使って子プロセスを起動し、
Win32APIのCreatePipe, WriteFile, ReadFileを用いてプロセス間通信をしようとしています

このとき、立ち上げた子プロセスはコマンドを標準入力から読み込みんで処理をし、
結果を標準出力へコマンドごとに出力し、入力にEOFが来たら終了、みたいなプログラムです

ここで、子プロセスがEOFを認識してくれず、子プロセスが終了してくれません
なにかいい方法があるのでしょうか?
それともWin32APIの質問ということでよその板の方がいいでしょうか?

やっていること:
ハンドルを用意
親プロセスが無名パイプを作成する
パイプの一端のハンドルAを継承可能にする
STARTUPINFO構造体のhStdInputに継承可能にしたパイプのハンドルAを指定
CreateProcess()
継承可能にしたパイプのハンドルAを閉じる
パイプの閉じていない方のハンドルBにWriteFile()
ハンドルBを閉じる ←ここで子プロセスに終了してもらいたい

よろしくお願いします



580 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:02:32 ]
そもそもWin32API使う意味がいったいどこに?

581 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:08:55 ]
C++でパイプを使った経験があったのでパイプをやろうとして、
C#でパイプをやるためにWin32APIを使うことにしました

582 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:18:59 ]
ProcessStartInfo.RedirectStandardInput
Process.StandardInput
この辺使う

583 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:59:47 ]
なるほど
他プロセスの標準入出力を通した通信は明示的なパイプ以外に用意されていたのですね
自分で調べてた限りでは見つかってなかった情報なのでとても助かりました
試してみます
ありがとうございました

584 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 10:37:20 ]
string str = File.GetLastWriteTime(Path).ToString();
このようにファイルの最終更新時間を取得すると、
そのファイルのプロセスが使用中のままになるのですが、
CloseやDisposeのようにすぐに開放させるにはどうすればいいのでしょうか?

585 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 11:06:44 ]
ならんが



586 名前:584 mailto:sage [2008/05/30(金) 11:10:07 ]
すみません。
File.GetLastWriteTimeのせいじゃありませんでした。
File.GetLastWriteTimeタンごめんんささい。

587 名前:File.GetLast mailto:sage [2008/05/30(金) 22:49:58 ]
んもー


588 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:36:30 ]
何言ってんだお前らは?釣りか?
|  問  1
|(ア) (イ) (ウ) (エ) (オ)
|D D D D D
|C C C C C
|B B B B B
|A A A A A
|@ @ @ @ @


589 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:37:34 ]
誤爆りました。スマソ

590 名前:579 mailto:sage [2008/05/31(土) 05:59:48 ]
アドバイスいただけた方法でうまくいったので(ありがとうございます)報告します
ちょっとはまった点としては、
改行コードをWriteしてもフラッシュされない
 →出力がほしい時はちゃんとフラッシュ
子プロセスのStdinに対するエンコーディングはProcessStartInfoから設定できない
 →StandardInput.BaseStreamを取得して新しくStreamWriterを作る
ぐらいでした
当初の問題だったEOF云々は、Process.StandardInputのストリームを閉じると
問題なく処理されました

求めていた処理を考えていたやりかたよりずっと簡単に得られたので大満足です

591 名前:デフォルトの名無しさん [2008/05/31(土) 17:29:19 ]
今、とあるゲームの画面の各部をキャプチャして画面を認識し、指定した部分をクリックしたり文字を送ったりするプログラムを作っています。

VisualC#のデバッグモードで動かしていると、画面上の指定部分をキャプチャする関数の中で使っている、Graphics.GetHdc()の部分で、
「ArgumentExceptionはハンドルされませんでした。  使用されたパラメータが有効ではありません」
のメッセージがでて止まってしまいます。10回に1回くらいの頻度かな。
ローカル画面で変数の値をチェックしても、キャプチャ範囲に異常な値は無く(bmpのサイズなど正常)、何でこうなるのか心当たりがありましたら指摘してもらないでしょうか。
#複数の呼び出し元から、この関数が同時に呼び出されているときにこんなことおこるのかな・・・?

ちなみに、キャプチャやってる関数を下に貼り付けてみます。
-----------
public Bitmap CapturePartFromA(int[] capval)
{
//capval[] はキャプチャ範囲を収めた配列。ここでは[3]と[4]のみ利用
Bitmap bmp;
//座標系を変換する関数の戻り値保存用
int[] xxx = new int[4] { 0, 0, 0, 0 };
IntPtr hWnd = FindWindow("A Game", null);
RECT winRect2 = new RECT();
GetWindowRect(hWnd, ref winRect2);
//座標を変換する関数(クライアントの原点←→デスクトップの原点)
xxx = ConvertCoordinates(capval);
bmp = new Bitmap(capval[3], capval[4]);
Graphics g = Graphics.FromImage(bmp);
IntPtr hDC = g.GetHdc(); //←ここで 例外頻発
IntPtr winDC = GetDC(hWnd);
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, winDC, xxx[0], xxx[1], SRCCOPY);
g.ReleaseHdc(hDC);
g.Dispose();
ReleaseDC(hWnd, winDC);
return bmp;
}


592 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:44:08 ]
>>591
チートスレ池

593 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:41:13 ]
MMORPGの自動プログラムを作ってどうする、それほど他を出し抜きたいのか?
こんな所に来るな。

594 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:52:58 ]
C# = D♭

595 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 15:20:56 ]
>>591
評:もっとオブラートに包んだ質問のやりかたを覚えましょう。



596 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:22:52 ]
エロシーンまだ?

597 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:27:52 ]
せめて「GUIのテストを自動化したいです」位のうそをつく常識を持て

598 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:48:59 ]
HttpWebRequest使ってゆうちょダイレクトのサイトから振り込み状況を確認するアプリ作ってるんだけど、
誰かできた人いる?
UserAgentとかいじってもなぜかはじかれる。
同じアプリでほかのhttpsサイトとかはログインできるんだけどなぁ。

599 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 20:02:32 ]
いません

600 名前:591 [2008/06/01(日) 20:49:22 ]
ここで知恵ある人いるかと思ったのですが・・・残念。
自助努力するしかないですね。
どうもでした。


601 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 20:49:25 ]
なぜかって、なんのエラーで帰ってきてるの?

602 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:21:28 ]
UDP通信で、C#のクライアントにVC++のCプログラムからソケットでメッセージを送って表示
しているのですが。漢字が正しく表示できません。何かのコード指定だと思うのですが、
探してみたのですが見つからず。よろしければ教えてください。
C++の手順
WSAStartup(MAKEWORD(2,0), &wsaData);
sock = socket(AF_INET, SOCK_DGRAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(XXXXX); // 送信先のポート番号
addr.sin_addr.S_un.S_addr = inet_addr("XXXXXXXX"); // 送信先のIP
sendto(sock, str2.c_str(), str2.size(), 0, (struct sockaddr *)&addr, sizeof(addr));
closesocket(sock);
WSACleanup();
必要であればC#受け側も出します。
ちなみにc++側のプロジェクトの文字コードを有る分変えても変わりませんでした。

603 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:25:33 ]
C#側も書こう

604 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:26:42 ]
文字コード意識せずにネットワークとか

大方StreamReaderをEncoding未指定でnewしてんだろ

605 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:32:39 ]
技術ある人はゆうちょダイレクトにログインするプログラムをC#でHttpWebRequestつかって組んでみてほしい。
思いのほかはまるよ。



606 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:33:57 ]
>>601
サーバー側のエラーで帰ってきてログイン不可能。
エラーコードが書いてあるけど、意味がわからないので対応が難航してる。



607 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:36:26 ]
>>606(=605)
そのエラーコードを書けってことじゃないのか?
イミが分からないとか、技術ある人は作ってみ?とか
根本的にダメダメwww

608 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:38:18 ]
サーバー側(cgi)のエラーコードなんてC#とまったく関係ないから書かなかっただけだが。

609 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:40:27 ]
>>608
オマエには無理って事で終了

610 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:42:59 ]
TP1/Webのエラーコードっぽいけどな。
マニュアルある人ならわかるかもしれん。
今ゆうちょダイレクトメンテ中でエラーコード再取得できなかった。

611 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:43:26 ]
>>609
お前には聞いてないってw

612 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:45:14 ]
>>603  >>604の指摘でC#側を見て下記の点ではないかと思い
enc = System.Text.Encoding.UTF8;
// enc = System.Text.Encoding.Unicode;
// enc = System.Text.Encoding.BigEndianUnicode;
localPort = XXXXX;
udp = new System.Net.Sockets.UdpClient(localPort);

コメント部分を追加してみましたが変えましたが、半角英数もまともに表示できなかったです。
元々はUTF8でした。 何がいけないのだろう?

613 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:45:51 ]
逆ギレw

614 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:47:03 ]
技術もないのにあおるだけのアホは放って置いてできる人よろしく!

615 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:50:06 ]
>>614
ここで聞く前に、先ず質問の仕方を勉強してきてね



616 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:51:20 ]
だなw

617 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:52:55 ]
>>615,616
キメェw

618 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:55:16 ]
ゆうちょダイレクトは特に妙なところはなかったように記憶しているけど、
どこでひっかかってるの?
今確認しようとしたら、ちょうどサービス停止中だな。

619 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:03:10 ]
C# 側のコードです。 どのコードを指定しても正しく表示されなかった。orz
System.Net.Sockets.UdpClient udp;
private Button button1;
System.Text.Encoding enc;

enc = System.Text.Encoding.UTF8;
// enc = System.Text.Encoding.UTF7;
// enc = System.Text.Encoding.ASCII;
// enc = System.Text.Encoding.Unicode;
// enc = System.Text.Encoding.BigEndianUnicode;
localPort = XXXXXX;
udp = new System.Net.Sockets.Udp

System.Net.IPEndPoint remoteEP = null;
byte[] rcvBytes = udp.Receive(ref remoteEP);
string rcvMsg = enc.GetString(rcvBytes);

udp.Close();

バッファーを見たら、シフトJISが送られてくるようでした。
わからない…orz


620 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:05:29 ]
一部切れていました。
udp = new System.Net.Sockets.UdpClient(localPort);


621 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:08:29 ]
Shift_JISで送られてきてるのにUTF-8でデコードとかおかしいと思わないか?

622 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:11:50 ]
思わないでーす

623 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:17:29 ]
なんか、荒らされてるな。
IDない板だから、釣りや煽りに反応するのはやめましょう。
質問者の暴言は、たいてい騙り。
もちろん、ときどきとんでもない質問者もいるが、いずれにせよ放置で。

624 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:19:15 ]
技術ある人に作れって時点でネタだろ

625 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:23:40 ]
>>620
すみません、どの記号がどの文字コードかの知識が不足しています。orz



626 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:55:12 ]
とりあえず、ゆうちょに不正アクセスしてる奴がいると通報しとくか。
3人くらいで通報すれば目付けられるから

627 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 01:27:36 ]
何が不正?

628 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 06:31:07 ]
.Text.Encoding.GetEncoding(932)

629 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 06:59:26 ]
>>628
出来ましたありがとうございます。

630 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:16:51 ]
とりあえず、ゆうちょにログインも出来ないアホはほっとけよ

631 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 12:59:43 ]
ゆうちょの件一晩頭冷やして考えたらできました。
お騒がせしました。

632 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:09:14 ]
>>631
>>615

633 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:35:31 ]
結局何がまずかったの?

634 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:39:21 ]
態度

635 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 15:04:41 ]
>>634
いや、頭だろ・・・



636 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:46:07 ]
そもそも質問してないだろ
意外とはまるからやってみぐらいの勢いだったんだが。
それを勘違いしたこまったちゃんが質問の仕方が悪いだの、態度が悪いだのってこんな匿名掲示板で言われてもなw

637 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:48:37 ]
>>636
ヨチヨチwww

638 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:51:25 ]
>>636
明らかに誰か作って教えてくれってスタンスだったけどなw

ヨチヨチwww

639 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:55:30 ]
それはそうと、ゆうちょ興味あったら挑戦してみ。
興味なかったらいいけど。

640 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:57:56 ]
ゆうちょダイレクトのアカウントなんて普通持っとらんがな(´・ω・`)
嵌るとかは単純に質問者の技術力不足だと思う

641 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:16:54 ]
そうだね。
俺はそもそも技術者じゃないから技術力不足は認めるよ。
ネットショップを経営しててそれに必要な入金チェックをちょっと作ってみようかなって思っただけだし。

642 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:24:42 ]
つ Python
無理にC#を使う必要性はない。

643 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:32:46 ]
PythonってWinアプリ簡単に作れるの?

644 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:35:08 ]
うん。GUIを扱うライブラリがあるし、IronPythonを使えば.netも使える

645 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:36:30 ]
ゆうちょ房のスレ荒らしw



646 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:47:33 ]
なるほど。
Python調べてみよう。Excelファイルいじくれるライブラリもあるといいけど。
C#始めて1ヶ月だけどフリーで開発環境まで全部まとめてインストールできるのが楽ではじめたんだよね。
今度は今手作業で集計してるバイトの勤怠管理でも作ってみるか。

647 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:08:48 ]
ゆうちょが出てきてからスレの雰囲気がすごく悪くなった

648 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:21:13 ]
過去スレ読んだが同じようなもんだぞ
ゆうちょに粘着している奴が悪くしてんじゃね?

649 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:14:43 ]
>>648
ヨチヨチwww

650 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:21:49 ]
なんかヨチヨチレスしかできないかわいそうなやついるな

651 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:52:27 ]
なんで技術者、学生以外でこんな板見てんだか・・・

652 名前:デフォルトの名無しさん [2008/06/03(火) 02:16:25 ]
初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
ListViewのdetail表示時に行間を広くするにはどうしたらいいのでしょうか?

653 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:42:12 ]
ListViewItemのStyleあたりで設定できなかったっけ?
出来なかったらごめん。

654 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 09:19:23 ]
ImageList使う

655 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 12:20:34 ]
お前には無理だからさっさと諦めろ。



656 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 13:35:14 ]
>>652
>初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
馬鹿じゃないの?
まじめな話。


657 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 14:07:08 ]
UserControlを継承したクラスを作って
クリックされた箇所に丸印を描画するようなプログラムを作るとしたとき。
Click()イベントで、クリックされた箇所を記憶し
Invalidate()でPaint()イベントを呼び出してクリックされた箇所を描画する。
という動きになるのでしょうか?


658 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 15:01:12 ]
はい

659 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 15:19:56 ]
フォームエディタで上にコントロールを乗せないなら、
UserControlじゃなくて、ただのControlからの継承でいい。

660 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 17:57:36 ]
>>658
>>659
どうもありがとうです。

ところで、趣旨が変わるんですが
折れ線(複数)グラフを書きたいのです。
ひとつの表示窓に複数のラインを書きたいのです。
そのライン単位でオブジェクトにしたいのですが、
(1)そのラインオブジェクトはControlから派生させて自分でライノブジェクト自身で描画させるべきでしょうか。
(2)それとも単なる(Control派生ではなく)オブジェクト化して、親表示窓Controlに個別に描画ルーチンを呼ぶ形にするべきでしょうか?
一般的にどうなのかなと思いまして。

(1)だったら、表示窓側の親オブジェクトは特に何も考えずに子が思いのままに描画する。
と思っていたのですが、背景処理が手間かと思えてきました。
子に当たるラインオブジェクトを描画すると親部分を上書きするからです。
リージョンを切れば親の描画部分を塗りつぶさなくても描けそうですが、折れ線なのでPATHが複雑になりすぎるかと思います。

(2)だったら特に背景塗りつぶし過ぎに関しては何も考えなくてよいのですが、
Paintルーチンで子オブジェクトにGrapicsオブジェクトを渡すサブルーチンコール形式になると思うのですが、なんだか嫌なのです。
一般的にこういうことをやりたい場合にはどうしますか?
変なことを言っているようだったら指摘してください。

661 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 18:02:28 ]
拡張性を考えれば当然後者だろ

662 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 19:57:03 ]
WPFなら前者だね

663 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:56:09 ]
Excel使え

664 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:37:46 ]
どこかにチャートコントロールあったはず

665 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:39:16 ]
ZedGraphとか



666 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:37:23 ]
ZenGraphってスクロール機能つけられる?

667 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:45:33 ]
便乗で質問なんですが
ZedGraphとかNplotを仕事(商用)として使ってる人いますか?


668 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:25:12 ]
ListViewの編集はなんで先頭のカラムしかダメなの?
面倒だね。

669 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 00:59:59 ]
WPFなら自由自在

670 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:18:50 ]
いやそういう話じゃなくて。

671 名前:660 mailto:sage [2008/06/04(水) 10:13:48 ]
皆さま。
ZenGraphとかNplotとかあるんですね。
これらを使うかどうかはともかく、これらの実装を参考にさせてもらいます。
どうもありがとう。


672 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:17:36 ]
Personクラスの派生クラスとして
Man,Woman,Noneを考えます。
Man,Woman,NoneはPersonクラスのstaticなメソッドを介して生成されるものとします。
Man,Woman,Noneのコンストラクタのアクセシビリティをそれぞれ
public,protected,privateにしております。
publicなManは生成されます。
protectedなWoman,privateなNoneは生成できません。
こういうときはコンストラクタのアクセシビリティをinternalにすればいいようです。
こういうinternalの使い方は正しいでしょうか?


673 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:20:56 ]
クラスライブラリを作ってるなら全然アリ
単一プロジェクトなら無意味

674 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:29:34 ]
他のアセンブリに公開するつもりがないならinternalでいいんじゃね

675 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:49:20 ]
Man,Woman,Noneクラスは外部に見せる必要がないならこういう手もある。
やりたいこととは違うと思うがクラス自体を見えなくすればコンストラクタの隠蔽は不要になる。
public enum PersonType { Man, Woman, None };

public class Person {
 public static Person GetInstance(PersonType x) {
  switch (x) {
   case PersonType.Man: return new Man();
   case PersonType.Woman: return new Woman();
   default: return new None();
  }
 }
 private class Man : Person { public Man() {} }
 private class Woman : Person { public Woman() {} }
 private class None : Person { public None() {} }
}

class Startup {
 static void Main() {
   Person man = Person.GetInstance(PersonType.Man);
   Person woman = Person.GetInstance(PersonType.Woman);
   Person none = Person.GetInstance(PersonType.None);
 }
}




676 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:53:36 ]
C++から入ると、friendが無いのがちょっと不便に感じるね。

677 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:56:41 ]
friendは邪悪だからなくていいよ。






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

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

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