ふらっとC#,C♯,C#(初心者用) Part37at TECH
ふらっとC#,C♯,C#(初心者用) Part37 - 暇つぶし2ch525:デフォルトの名無しさん
09/02/15 19:56:22
>>523
>>490です

526:デフォルトの名無しさん
09/02/15 19:59:01
>>525
それは終了らしいので、途中まで調べましたが止めておきます。

527:デフォルトの名無しさん
09/02/15 20:04:50
>>526
ではここに再開を宣言します。
どうぞよろしくお願いします

528:デフォルトの名無しさん
09/02/15 20:06:13
        iイ彡 _=三三三f           ヽ
        !イ 彡彡´_ -_=={    二三三ニニニニヽ
       fイ 彡彡ィ 彡イ/    ィ_‐- 、   ̄ ̄ ヽ     し  ま
       f彡イ彡彡ィ/     f _ ̄ ヾユ  fヱ‐ォ     て  る
       f/ミヽ======<|-'いシ lr=〈fラ/ !フ    い  で
       イイレ、´彡f        ヽ 二 _rソ  弋_ { .リ    な  成
       fノ /) 彡!               ィ     ノ ̄l      .い   長
       トヾ__ら 'イf     u    /_ヽ,,テtt,仏  !     :
       |l|ヽ ー  '/          rfイf〃イ川トリ /      .:
       r!lト、{'ー‐    ヽ      ´    ヾミ、  /       :
      / \ゞ    ヽ   ヽ               ヽ /
      ./    \    \   ヽ          /
   /〈     \                 ノ
-‐ ´ ヽ ヽ       \\     \        人


529:デフォルトの名無しさん
09/02/15 20:08:04
ほんとに今日だけはお願いしますOTZ

530:デフォルトの名無しさん
09/02/15 20:10:19
なんのためにそれが必要なのか、わかりやすく説明してみれ。

531:デフォルトの名無しさん
09/02/15 20:34:21
>>490のは、何に躓いたのかさっぱり分からないけど、普通にできたよ。
もちろん差し上げてもいいんだけど、

| このソフトはフリーソフトウェアです。
| 配布、転載は原則自由です。
| ただし、中身の一部もしくは全部を改変して配布、掲載をする事は禁止します。

って書いてあるので、作者の許諾を明示的に取ってきてください。
つーか、なぜ作者にくれと言わないのか?

532:デフォルトの名無しさん
09/02/15 20:38:52
>>506で作者が登場している!ちょうど良いぞ!w

533:デフォルトの名無しさん
09/02/15 20:46:39
最近仕事でC#を使うことになりました。
Webの開発です。
皆さんに聞きたいのですが、匿名メソッドというのは
どういうケースで使いますか?

URLリンク(www.atmarkit.co.jp)
↑@ITで匿名メソッドについて載っていますが、どういうものかは理解できました。
しかしこれってWebアプリの開発とかでどういうケースで使うのかなと。。
使用ケースが分かっていません。
あまり使うことが無いものなのでしょうか?

534:デフォルトの名無しさん
09/02/15 20:50:36
また、2ちゃんねるで宿題頼んでる奴がいるのかw

535:デフォルトの名無しさん
09/02/15 20:51:42
イベントハンドラーに適当なテスト用のメソッド入れたいときとか、
LINQ でとか。

536:デフォルトの名無しさん
09/02/15 21:07:21
最近仕事でC#使うことになったが、匿名メソッドやラムダ式は使いたい気持ちをぐっとこらえてる
ほかの人が見たときに読みづらいだろうからな

537:デフォルトの名無しさん
09/02/15 21:33:52
>>531
エラー出ましたよね?直したとこ教えてくだされば><
それだけでいいんです

538:デフォルトの名無しさん
09/02/15 21:35:31
どこでどういうエラーが出たか書けよ

539:デフォルトの名無しさん
09/02/15 21:41:33
とにかく、処理内容を指定して渡すという状況でのみ使用すべきで、メソッドに名前を付けて
定義する必要がなくなるズボラ推奨機能という考え方はすべきでない。具体的には、LINQと、
処理の流れの文脈的にそこに直書きされるべきコールバックとか。

LINQが一番重要。
例:
int a[]=new int[]{3,7,2,4,8,1,9};
int b=a.First(i=>i<3);
みたいな。これは匿名メソッドをラムダ式で書いているけれど、
int b=a.First(delegate(int i){return i<3});
も可。でも、LINQなら上の書き方に慣れるべき。iに対して型推論が効くからね。

後者は例えば、UIと別スレッドのメソッド中でUIスレッドで実行されるべき処理をInvokeに
渡す場合とか。あと、WaitHandle使って非同期でコールバックが呼ばれる処理を同期処理に
する場合にコーディング上も同期処理の如く書く事ができて見易い。こういった場合、
その記事に書いてある、ローカル変数に匿名メソッド内からアクセスできるというのは超重要な
ポイントになる。

最後に、UIのイベントハンドラをコードで追加する時、超短いコードの場合は
ズボラに匿名メソッドを使ったりするけれど、これは悪い例であまりやるべきではない。
例:this.Button1.CLICK+=delegate{MessageBox.Show("Clicked!!")};

540:デフォルトの名無しさん
09/02/15 21:42:10
自己解決しますた。

簡単じゃねーかよ、こんぐらいさっさと説明しやがれバカども

541:デフォルトの名無しさん
09/02/15 21:44:44
警告 1 デザイナは 247 行のコードを処理できません。

base.FormBorderStyle = FormBorderStyle.FixedDialog;

メソッド 'InitializeComponent' 以内のコードは、デザイナによって作成されたので手動では変更できません。
変更を削除して、デザイナを再度開いてください。 C:\Documents and Settings\●●●●●\My Documents\Reflector\Disassembler\AlarmTimer\AlarmTimer\FormMain.cs 248 0

警告 2 デザイナは 113 行のコードを処理できません。

base.FormBorderStyle = FormBorderStyle.FixedDialog;

メソッド 'InitializeComponent' 以内のコードは、デザイナによって作成されたので手動では変更できません。変更を削除して、デザイナを再度開いてください。
C:\Documents and Settings\●●●●●\My Documents\Reflector\Disassembler\AlarmTimer\AlarmTimer\FormOption.cs 114 0

エラー 3 型または名前空間名 'WsLib' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
C:\Documents and Settings\●●●●●\My Documents\Reflector\Disassembler\AlarmTimer\AlarmTimer\FormMain.cs 10 11 AlarmTimer

警告 4 この参照を解決できませんでした。アセンブリ "WsLib" が見つかりませんでした。アセンブリが間違いなくディスクに存在することを確認してください。
コードにこの参照が必要な場合、コンパイル エラーが発生する可能性があります。 AlarmTimer

警告 5 参照コンポーネント 'WsLib' が見つかりませんでした。


この5つっす

542:デフォルトの名無しさん
09/02/15 21:56:22
で、>>530 への回答は?

543:デフォルトの名無しさん
09/02/15 21:56:58
簡単だ。エラー3をよく読め。そして考えろ。

544:デフォルトの名無しさん
09/02/15 21:58:06
お前ら頭悪いよな

545:デフォルトの名無しさん
09/02/15 22:03:40
>>543
不足してるらしいです、でも意味わかりません

546:デフォルトの名無しさん
09/02/15 22:04:51
カワイソス(´・ω・)

547:デフォルトの名無しさん
09/02/15 22:07:57
頭が不足してるのか、かわいそうに

548:デフォルトの名無しさん
09/02/15 22:09:59
>>545
意味がわからなかったらググったりして調べればいいじゃないか

549:デフォルトの名無しさん
09/02/15 22:11:50
それがめんどくせーから聞いてるんだろうが! バカジャネーノ

550:デフォルトの名無しさん
09/02/15 22:18:13
dllがないってことかな

551:デフォルトの名無しさん
09/02/15 22:18:48
面白いからもっとやれwww

552:デフォルトの名無しさん
09/02/15 22:26:11
できました! ありがとうございました。
これで明日の課題提出に間に合います!

553:デフォルトの名無しさん
09/02/15 22:33:36
ソース盗用がバレて遡及的に単位取り消し/停学ですね、わかります

554:デフォルトの名無しさん
09/02/15 22:35:58
自分のおべんきょ用です

555:デフォルトの名無しさん
09/02/15 22:54:12
C#って初心者向けの言語ですか?

556:デフォルトの名無しさん
09/02/15 22:55:41
>>555
向け、かはわからないけど、初心者でも十分理解できると思います。

557:デフォルトの名無しさん
09/02/15 23:00:27
向けかといわれると確かにまぁ違うよな
向いているかといわれると大丈夫なんじゃないぐらいではある

558:デフォルトの名無しさん
09/02/15 23:01:13
実際に初心者が使えるかどうかはともかく,言語のスタンスとしては初心者向けではないな
どっちかというと既に他のが使える人が便利に使える言語というコンセプト

559:デフォルトの名無しさん
09/02/15 23:06:56
C#のstringには、MFCのCString::Right(n)のように、
末尾からのn文字を抽出するメソッドはないのでしょうか。
ない場合、全体の文字数を取得して、全文字数とnを使って、Substringするという回りくどいやり方しかないのでしょうか。

560:デフォルトの名無しさん
09/02/15 23:11:16
ない
回りくどいって言ってもstr.Substring(str.Length - n)とするだけのことだろ

561:デフォルトの名無しさん
09/02/15 23:11:40
ない
どうしても嫌なら拡張メソッド作ったら

562:559
09/02/15 23:15:36
ありがとう。
回りくどいとけなすつもりはなかった。
今は反省している

563:デフォルトの名無しさん
09/02/15 23:30:44
どうしても欲しければMicrosoft.VisualBasic.Strings.Right……。

564:デフォルトの名無しさん
09/02/15 23:33:59
C#のstringはLengthを取得するのにコストがかかるわけじゃないのでSubstringでの切り出しでいいんだよ。

565:デフォルトの名無しさん
09/02/16 01:21:10
Substringは範囲外の切り出しでエラーになる。
これを使いにくいと思ったことはあるな。

"abcde".Substring(3, 10) で "de"
"abcde".Substring(8, 2) で "" が欲しいケースは多いよ。


566:デフォルトの名無しさん
09/02/16 01:33:31
まぁはじめは実際なんでないんだろうなぁとは思った。
たぶん忘れたかなんか事情があったんだろうなと思って
おくことにした
Substring は境界絡んでくるとうざいんだよなー

567:デフォルトの名無しさん
09/02/16 01:38:13
>>565
2つ目の引数は文字数なのに結果の文字列に含まれる文字数がそれ以下だとおかしいだろ。

568:デフォルトの名無しさん
09/02/16 01:49:36
拡張メソッドが便利だな
public static string Subst(this string str, int start, int length) {
 if (str == null) return null;
 if (start < 0) { length -= start; start = 0; }
 if (start >= str.Length) return "";
 if (str.Length < length + start) length = str.Length - start;
 return str.Substring(start, length);
}
public static string Subst(this string str, int start) {
 if (str == null) return null;
 if (start < 0) start = 0;
 if (start >= str.Length) return "";
 return str.Substring(start);
}


569:デフォルトの名無しさん
09/02/16 15:38:09
イベントの質問です。

windowsフォームなどのボタンなどを付けて、ダブルクリックした場合、
イベントを自動生成して、 Windows フォーム デザイナで生成されたコードの中に
イベントを登録したり、処理(ハンドラ?)のプログラムを書く場所を作ってくれますが、
イベントの引数やインスタンスの定義はどこでしてくれてるのですか?


570:デフォルトの名無しさん
09/02/16 15:43:12
***.Designer.cs

***はフォーム名

571:デフォルトの名無しさん
09/02/16 19:07:05
@IT .Net Tipsの
リストビューに画像をサムネイルで表示するサンプルを使おうとしています。
URL (URLリンク(www.atmarkit.co.jp)

Formに直接リストビューを貼り付ければ、希望通りの動きをしました。
が、FormにTabControlを張り付けて、TabPageの2ページ目以降にリストビューを貼ると、
タブをクリックしてTabPageを表示しようとするとエラーが発生してフォームが終了し、
Program.csのApplication.Run(new Form1());でブレークしてしまいます。
エラーの内容は、
System.ArgumentException: 使用されたパラメータが有効ではありません。
   場所 System.Drawing.Image.get_Width()
   場所 System.Drawing.Image.get_Size()
   場所 System.Windows.Forms.ImageList.CreateBitmap(Original original, Boolean& ownsBitmap)
   場所 System.Windows.Forms.ImageList.CreateHandle()
 (以下略)
です。

タブページの1ページ目や、Formに直接だと表示されるしエラーもでないんですが、
これは何が原因なんでしょうか?

572:デフォルトの名無しさん
09/02/16 20:26:07
イベントハンドラの for の最後の

> thumbnail.Dispose();

これかな。消してみな。

573:571
09/02/16 20:49:54
>>572
ずばりでした! 動きました!
ありがとう。
ちょっとソース詳しく読んで、なぜだか考えてみます。

574:あ
09/02/16 21:00:20


575:デフォルトの名無しさん
09/02/16 21:05:46
>>573
これ読みながらやるような初心者にはわからん可能性が高い気がするけど
ヒントだけ。
ようするにTabPage2 に移動したことによってこのイベントが呼ばれる段階で
ハンドルが作られていない(可能性がある)のが問題。
その状況だと初期化が遅延されちゃうみたいだな。んで、表示されたときに
初期化が始まって、そのときに追加された Bitmap を参照しようとするけど
すでに破棄済みだからアウトになる、と。

576:デフォルトの名無しさん
09/02/16 21:41:34
もっと単純に言えば、使い終わっていないものをDisposeしちゃダメってことだ。

577:デフォルトの名無しさん
09/02/17 07:52:38
もっと単純に言えばDisposeは使うなってことだ

578:デフォルトの名無しさん
09/02/17 07:53:43
それ、違うから。

579:デフォルトの名無しさん
09/02/17 08:07:41
おいおい

580:デフォルトの名無しさん
09/02/17 13:31:01
HTTPのHEADメソッドを送信するにはどうすればいいでしょうか?
WebClientにもWebRequestクラスにもそれらしいメソッドはありませんでした。
もしかしてSocketクラス使わないとだめでつか?

581:デフォルトの名無しさん
09/02/17 13:39:14
HttpWebRequest.Methodプロパティ?

582:デフォルトの名無しさん
09/02/17 14:06:14
複数のフォルダに写真を整理していて、そのなかにある特定の日付(たとえば3月)の写真だけを抜き出したいと思っています。

string[] files = Directory.Getfiles("c:/photo", "*.jpg", SearchOption.AllDirectories);

string list = "";
foreach(string file in files) {list = list + file + "\r\n";}
MessageBox.Show(list);
とやって、いま、次のようなリストを入手しました。
このうち3月のみを取り出すのはどうしたらよいでしょう。
いちばん簡単なのは、*の部分に書くことかと思い、
string[] files = Directory.Getfiles("c:/photo", "200803*.jpg", SearchOption.AllDirectories);
としてみましたが、フォルダ名とファイル名にわかれていて結果は空になってしまいます。
あと、3月以前(01、02)とする方法もあわせて教えてください。

c:/photo/20080407eventname/photo.jpg
c:/photo/20080401eventname/photo.jpg
c:/photo/20080317eventname/photo.jpg
c:/photo/20080310eventname/photo.jpg
c:/photo/20080304eventname/photo.jpg
c:/photo/20080303eventname/photo.jpg
c:/photo/20080224eventname/photo.jpg
c:/photo/20080203eventname/photo.jpg
c:/photo/20080127eventname/photo.jpg


583:デフォルトの名無しさん
09/02/17 14:38:22
>>581
これでいけました。ありがとうございました

String url = "URLリンク(pc11.2ch.net)";
WebRequest webreq = HttpWebRequest.Create(url);
webreq.Method = "HEAD";
HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse();
WebHeaderCollection webheadcol = webres.Headers;
String ltime = webheadcol.Get("Last-Modified");
Console.WriteLine(ltime);


584:デフォルトの名無しさん
09/02/17 15:05:13
>>582
パス名の文字列を正規表現で分解して年と月を別々に取り出す
あとは大小比較で絞込み

Regex r;
r = new Regex(@"(\d{4})(\d{2})\d{2}eventname", RegexOptions.IgnoreCase);
Match m;
m = r.Match(@"c:/photo/20080407eventname/photo.jpg");
if (m.Success) {
String year = m.Groups[1].Value;
String month = m.Groups[2].Value;
Console.WriteLine("{0}年{1}月", year, month);
}


585:デフォルトの名無しさん
09/02/17 15:25:58
ファイル名の禁則文字を制御したいと思っています
やりたいことは「\/:*?"<>|」の文字があったら「""」で置き換えることです

Strings.Replaceでひとつひとつチェックすることぐらいしか思いつかないのですが
もう少しスマートな処理方法があれば教えて下さい

586:デフォルトの名無しさん
09/02/17 15:34:22
C# 2.0でDouble型のデータを文字列に変換するときの質問です。

通常
double a = 1.1;
a.ToString();
//結果="1.1"

のようになるのですが
以下の場合の解決を行いたいです。

double b = 0.000097;
b.ToString();
//結果="9.7E-05"  期待したい結果は "0.000097"

この結果を通常の10進数の表記を行いたいのですが
ToStringメソッドの引数に
"0.0000000"や "0.#############"
などを渡せば期待しているとおりの文字列を受け取ることができます。

しかし、小数点以下の部分が何桁になるかわからない場合、この表記であれば文字数を超えた部分が無効になると思います。
(例えば b.ToString("0.000")は"0.000"になる)

0.##...#を最大桁数分用意すればいいのかもしれませんが・・・・
何か綺麗な方法というのはないのでしょうか?

587:デフォルトの名無しさん
09/02/17 15:38:41
decimalにキャストするとか。

588:デフォルトの名無しさん
09/02/17 15:40:41
>>585
String.Replaceでなく、Regex.Replaceを使えば一度に変換できる


589:デフォルトの名無しさん
09/02/17 15:42:28
>>586
string.Format

590:デフォルトの名無しさん
09/02/17 15:43:33
>>588
調べてみます。ありがとうございましたー

591:586
09/02/17 15:58:27
レスサンクスです。

>>587
最悪その方法もありかなと考えているのですが・・・

>>589
型式指定子などヘルプ参考に使って試してみたんですが・・・
うまいこと行きませんでした…orz

型式指定子の横に数値をつければうまくはいくのですが、その横の数値に当たる部分が動的なため決められないのです。
(といっても結局Doubleの上限下限までではありますが・・・)

592:デフォルトの名無しさん
09/02/17 16:31:12
string型の変数で絶対パスを指定してプログラムで背景を変えたいのですが、どのように記述すればよいでしょうか?
参考ページが見つからず困っています。

593:デフォルトの名無しさん
09/02/17 16:32:39
>>592
背景って何だ?

594:デフォルトの名無しさん
09/02/17 16:40:23
BackGroundImageの事とかじゃね?
Formの背景とか??

595:デフォルトの名無しさん
09/02/17 16:41:03
datTable.Columns.Add("dat1", GetType(Int32));

のGetType(Int32)の箇所でコンパイルエラー('int' は '型' ですが、
'変数' のように使用されています)が出てしまいます。
構文が間違ってるでしょうか?
すみませんが、ご教授ください。

596:デフォルトの名無しさん
09/02/17 16:41:09
>>593
BackgroundImageのことです。
普段はフォームのほうでフォルダを指定して画像を指定していたのですが、
月ごとに画像を自動で変えるためプログラム内で処理しようかと思いまして。

597:デフォルトの名無しさん
09/02/17 16:43:47
>>596
BackgroundImage = new Bitmap(xxx);


598:デフォルトの名無しさん
09/02/17 16:48:15
string[] data= new string[12];

for (int i=0;i<12;i++)
{
string[i] = string.format("C:\Image\{0}.jpg", i.ToString() );
}

LOADトカの処理で

int index = DateTime.Now.Month - 1;
Hoge.BackgroundImage = Image.FromFile( data[index] );


こんなイメージなの・・・か?

599:デフォルトの名無しさん
09/02/17 16:49:38
全部ロードする必要なくないw

600:デフォルトの名無しさん
09/02/17 16:50:43
>>595
その場合、""でくくるかtypeof使うんじゃないの?

601:デフォルトの名無しさん
09/02/17 16:53:50
>>599
い・・・いらないねw orz

602:592
09/02/17 16:58:25
>>597さんのソースで無事表示できました。
皆さんありがとうございます。

603:デフォルトの名無しさん
09/02/17 17:01:07
>>600
レスどうも。
たしかに、Type.GetType("System.Int32")と書くとうまく行くんですが、
URLリンク(www.atmarkit.co.jp)
このページで、GetType演算子(URLリンク(msdn.microsoft.com)(VS.80).aspx)
を使う方がよいとあったのもので。書式はあってると思うんですが。


604:デフォルトの名無しさん
09/02/17 17:06:08
>>603
お前は何を言っているんだ・・・

605:デフォルトの名無しさん
09/02/17 17:07:58
それはVBの話で、C#での対応する演算子はtypofです。
Type.GetType(ほにゃらら)ってメソッドの書式でしょ?
あるいは、Int32.GetType()でも可、かな?

606:デフォルトの名無しさん
09/02/17 17:10:19
>C#での対応する演算子はtypofです。
typoだな

607:デフォルトの名無しさん
09/02/17 17:10:38
('A`)ワロス

608:デフォルトの名無しさん
09/02/17 17:12:03
>>604
すみませんw
Type.GetTypeメソッドとGetType演算子は別物ですよね。
んで、前者を使って文字列で型を指定するとうまく行くのですが、
後者をGetType(Int32)のように書いてもうまく行かなかった。という状況です。
ちなみに、>>600さんのご指摘通り、typeof(int)でうまくいきました。
ありがとうございました。

609:デフォルトの名無しさん
09/02/17 17:14:03
>>605
('A`)
VBでしたね。すいません。ありがとう。

610:605
09/02/17 17:22:58
まさにtypoだな。って何で俺が落ちをつけにゃならん。

611:デフォルトの名無しさん
09/02/17 17:25:02
>>584
早速ありがとうございます。
c:/photo/20080317eventname/photo.jpg
c:/photo/20080310eventname/photo.jpg
c:/photo/20080304eventname/photo.jpg
c:/photo/20080303eventname/photo.jpg
の行を抜き出したいのです。
そのためには、どう絞り込めばよいでしょう?


612:デフォルトの名無しさん
09/02/17 17:27:18
めんどくせえ
Regex.Match(path,"200803[0-9]{2}").Success
がTrueになるやつ

613:デフォルトの名無しさん
09/02/17 17:32:32
フォームの背景でなくて、デスクトップの背景だったら?


614:デフォルトの名無しさん
09/02/17 17:35:25
>>613
Win32APIのSystemParametersInfo使うだけじゃない?

615:580
09/02/17 18:15:57
using System;
using System.Net;

class Test
{
public static void Main()
{
for (int i=0;i<10;i++) {
String url = "URLリンク(pc11.2ch.net)";
WebRequest webreq = HttpWebRequest.Create(url);
webreq.Method = "HEAD";
HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse();
WebHeaderCollection webheadcol = webres.Headers;
String ltime = webheadcol.Get("Last-Modified");
Console.WriteLine(ltime);
}
}
}

これで二周回ったところでGetResponse()メソッドが返ってこなくなるんですが、何がいけないのでしょうか?
2chのサーバーの設定の問題でしょうか?

616:デフォルトの名無しさん
09/02/17 18:35:41
XmlSerializer.Deserialize で、<Version>1.003</Version> をデシリアライズして
あるクラスの Verion クラスのプロパティに入れたいと思っているのですが、
0.0 というバージョンが格納されてしまいます。
Version クラスはデシリアライズできないのでしょうか?

617:デフォルトの名無しさん
09/02/17 18:39:01
>>615
サーバ関係ないみたいよ。
うちでも同じようになったし、自宅鯖に向けてもおなじ。
3回目のリクエスト自体来ていない。

618:617
09/02/17 18:44:19
たぶん同時接続数の制限が別のとこにあるんだと思うよ。
ちゃんと終了処理すればいいんじゃないかな。
ためしに毎回Abortしたら止まらなくなった

619:デフォルトの名無しさん
09/02/17 18:46:58
>>615
HttpWebRequest..::.GetResponse メソッドの説明

Close メソッドを呼び出して、ストリームを閉じて接続を解放する必要があります。
この操作を行わないと、アプリケーションで接続が不足することがあります。


620:デフォルトの名無しさん
09/02/17 19:08:55
>>617
>>619
どうもありがとうございます。
リクエストのAbort()、レスポンスのClose()
どちらかを使えば、上手く動作するようになりました。
あと、デフォルトで2になっていた同時接続数の制限は
System.Net.ServicePointManager.DefaultConnectionLimitの
値を変えることで取り除くことができました




621:デフォルトの名無しさん
09/02/17 19:11:41
いやそれは変更するな

622:デフォルトの名無しさん
09/02/17 19:57:12
韓国は我ら優良種である日本国民に、管理運営され、はじめて未来を見ることができるのである。
その事実を無能なる韓国人どもに思い知らせ、我が日本領土である竹島を取り返すべくただいまより攻撃にでる

愚かなる韓国人に対し、再び裁きの鉄槌を振るう時が来た!
      /⌒ヽ
      ( ^ω^)/ ̄/ ̄/
      ( 二二つ / と)
      |   /  /  /
       |    ̄| ̄ ̄

攻撃:(p)URLリンク(dokdo.andu.hanafos.com)
サイトで右側を選択すれば竹島は日本の領土!

作戦指令本部:(p)スレリンク(news4vip板)

623:デフォルトの名無しさん
09/02/17 20:45:53
Microsoft.Samples名前空間って、自作アプリに自由に使って、配布してもライセンス違反になりませんか?

Microsoft.Samples.DirectX.UtilityToolkitとか
Microsoft.Samples.ServiceHosting.AspProvidersとか
Microsoft.Samples.Workflowとか

624:デフォルトの名無しさん
09/02/17 20:49:46
>>612
ありがとうございます。できました。


625:デフォルトの名無しさん
09/02/18 01:51:16
Image img;
using (WebClient wc = new WebClient())
using (Stream st = wc.OpenRead("適当な画像のURL"))
  img = Image.FromStream(st);
img.Save(@"z:\test.jpg");

Image img;
using (Stream st = new FileStream(@"適当な画像のパス", FileMode.Open))
  img = Image.FromStream(st);
img.Save(@"z:\test.jpg");
という2つのコードで、前者は正常に実行できるのに対し、後者は
System.Runtime.InteropServices.ExternalException(Message="GDI+ で汎用エラーが発生しました。")
という例外が発生します。
なぜ前者の場合は正常に実行出来るのでしょうか?

626:デフォルトの名無しさん
09/02/18 02:35:43
>>625
いろいろややこしいことがあるみたい
URLリンク(www.atmarkit.co.jp)

以下で回避が可能
Image img;
using (Stream st = new FileStream(@"inputFile.jpg", FileMode.Open)) {
  img = new Bitmap(Image.FromStream(st));
}
img.Save(@"outputFile.jpg");


627:デフォルトの名無しさん
09/02/18 03:01:42
>>926
レスありがとうございます。
対応策は検索して把握してはいたのですが、
先の2つのコードの根本的な違いが気になったのです。

628:デフォルトの名無しさん
09/02/18 04:35:45
>>627
このあたりかな
URLリンク(support.microsoft.com)

ファイル以外のストリームには言及がないのでなんともいえないけど
少なくともファイルは特別に意識していて、ファイルから生成した
ストリームについてはそれを破棄するとイメージにアクセスできなくなるのが
仕様みたい

629:デフォルトの名無しさん
09/02/18 04:45:29
Image も IDisposable だから

using (WebClient client = new WebClient())
using (Stream stream = client.OpenRead(uri))
using (Image image = Image.FromStream(stream))
{
image.Save(path);
}

の方が良くないか?

630:デフォルトの名無しさん
09/02/18 05:35:25
>>625
かなりヤケクソ気味の対処法。
class ForwordOnlyFileStream : FileStream {
  public ForwordOnlyFileStream(string filename, FileMode filemode)
     : base(filename, filemode) { }
  public override bool CanSeek { get { return false; } }
}

Image img; 
using (Stream st = new ForwordOnlyFileStream(@"適当な画像のパス", FileMode.Open)) 
  img = Image.FromStream(st); 
img.Save(@"z:\test.jpg"); 


631:デフォルトの名無しさん
09/02/18 09:27:28
>>630
素直に一旦MemoryStreamにコピーしろよって話だな

632:デフォルトの名無しさん
09/02/18 13:07:07
C#2.0で質問です。

継承元のpublic設定されたメソッドやプロパティを、
継承先のクラスで隠蔽して、利用させたくないんですが、
new privateしても表示されてしまうのですが、これを隠す方法はないですか?

633:デフォルトの名無しさん
09/02/18 13:12:12
ありません

634:デフォルトの名無しさん
09/02/18 13:27:06
そういう事をしたくなったってことは設計がおかしい証拠だぬ

635:デフォルトの名無しさん
09/02/18 13:27:21
(ω・ )ゝ なんだってー
継承元でprotectedにして、継承先でpublicにするとかするしかないのか・・
ありがとう

636:デフォルトの名無しさん
09/02/18 13:36:07
>>634
工エエェェ(´д`)ェェエエ工工
確かに無理矢理流用しているから、おかしくなってるきがする。
設計を見直してみるお
ありがとう

637:デフォルトの名無しさん
09/02/18 13:40:36
インターフェイスならメンバ隠して実装できるよ

638:デフォルトの名無しさん
09/02/18 13:42:37
正直いつも似たような機能作る時に
インターフェイス使うかベースクラス継承してオーバーライドで使うか迷ってる俺がいる


639:デフォルトの名無しさん
09/02/18 13:45:36
そこは普通に「似たような機能」クラスを作って包含するのが
一番素直で融通が利く

640:デフォルトの名無しさん
09/02/18 13:55:05
>>639
なる。
凝りすぎもダメなのか

641:デフォルトの名無しさん
09/02/18 14:07:11
>>637
ありがとう。

インターフェースでMethod()を定義して
public class MyBsdeClass : IInterface
 public void Method()
などでMethodの処理を書いた基底クラスを作って、
これをさらに継承するということですね。ちょっと試してみます。

ただ、異なる型にまたがって継承させて利用するメソッドではないので、
やはり設計を見直してみようと思います。

642:デフォルトの名無しさん
09/02/18 14:17:41
それじゃダメ
基底クラスでもMethodを明示的実装しないといけない

643:デフォルトの名無しさん
09/02/18 14:28:42
>>642
ありがとう
こんな感じでインターフェースを継承した基底クラスのメソッドに処理を書くってこと?

interface IInterface //■インターフェース
 void Method();

public class MyBaseClass : IInterface  //■基本的な処理を記述した基底クラス
 public void Method()
 {
  //処理を実装
 }

public class MyClass : MyBaseClass //■継承先



644:デフォルトの名無しさん
09/02/18 14:34:26
違うこうするんだよ
public class MyBaseClass : IInterface { void IInterface.Method() { ... } }
public class MyClass : MyBaseClass, IInterface { void IInterface.Method() { ... } }
これで基底クラスの実装は呼べなくなる

645:デフォルトの名無しさん
09/02/18 14:51:09
>>644
あんたすごいな
643じゃないけど少し知識増えたわ
おれもまだまだだな、、、

646:デフォルトの名無しさん
09/02/18 15:07:08
キャストすると呼べるけどね。
is-aの関係が壊れているならそこを修復するのが先な気がする。
implements ... の関係とis a ... の関係は全く別物なんだから、どこかで怪我しそう。

647:デフォルトの名無しさん
09/02/18 15:13:58
>>644
ありがとう。
試してみました。
確かにMyBassClassのMethod();でなく、MyClassのMethod()のほうが実行されますが、
Method();そのものが見えなくなるわけじゃないので、
自分の目的とはちょっと違う感じです。

実験した感じだと、動作としてはインターフェースにしなくともnew public void Method()すれば、
単純な基底クラスのメソッドの実装は呼ばれないと思うのですが、何か他の利点があるということですか?

648:デフォルトの名無しさん
09/02/18 15:23:05
単純にnewで隠した場合は基底クラスにキャストすれば基底クラスの実装を呼べる
>>644だとMyClassのインスタンスをMyBaseClass, IInterfaceどちらにキャストしても
MyBaseClassのMehodの実装は呼べないよ
もちろん((IInterface)(MyBaseClass)).Methodでも同じ

649:デフォルトの名無しさん
09/02/18 15:27:47
え、MyBaseClassにキャストしてからIInterfaceにキャストしても駄目なの?知らなかった・・・


650:デフォルトの名無しさん
09/02/18 15:27:51
>>648
ああ、なるほどそういうことか!!
確かにそういうのが必要なときには便利ですね!

私も設計を見直して、基底クラスをいじったら、いい感じになってきました。
ありがとー

651:デフォルトの名無しさん
09/02/18 15:35:37
あれ、そういう事なら、要はvirtualメソッド使えば良いって単純な話では?

652:デフォルトの名無しさん
09/02/18 15:40:15
Form1にあるチェックボックスとかのGUIを
Form1.cs以外のxxx.csとかから操作したいんだけど
どうすればいいんでしょうか?

653:デフォルトの名無しさん
09/02/18 15:44:24
コントロールのアクセスレベルを変えればできるけど褒められたやり方じゃないな
何の目的でそのチェックボックスがあるのか考えるんだ
その"目的"に対して,Form1にプロパティやメソッドを定義するべき
基本的にコントロールは外に出さない

654:デフォルトの名無しさん
09/02/18 16:15:52
ループ内でCheckBoxで選択された機能だけを使いたいのですが、今はこんな形で処理しているんですけど、
for(){
  if(A) A();
  if(B) B();
  if(C) C();
  if(D) D();
}

ABCが30くらいに増えて遅くなってので、最初にチェック判別して必要な機能だけループ内で使用できるよう、

if(A)
if(B)
if(C)
if(D)
for(){
  B();
  D();
}

の形にしたいのですがどうすればいいの?

655:デフォルトの名無しさん
09/02/18 16:24:26
>>654
それは単純に処理が多くなって遅くなってるのでは?
if文処理がどのくらいの比重を占めてるのかは分からんが。

処理を委譲してチェック外したらヌルオブジェクトに切り替えるとか

656:デフォルトの名無しさん
09/02/18 16:28:27
速い遅いの問題なら
bool a = Aの式; bool b = Bの式; //c,d同様
for() { if (a) A(); if (b) B(); //c,d同様
が速いと思う
forの中を綺麗にしたいなら
var list = new List<Action>();
if (A) list.Add(メソッドAの名前); if (B) list.Add(メソッドBの名前);
for() { foreach (var action in list) action(); }
とか考えられなくはないけど

657:デフォルトの名無しさん
09/02/18 16:53:05
           _
        ∠_)
   ∧_∧.  /
  ( ・∀・) /
 ⊂    つ
   人  Y  ∧_∧∩ ・・・
  し (_)  ( ´∀`)/
             /←>>655


658:デフォルトの名無しさん
09/02/18 16:59:04
>>628
リンクありがとうございます。
取りあえず仕様でどうしようも無いという事ですか。
でもなんでこんな仕様なんだろ。
>>630
なるほど、CanSeekをfalseに固定するだけでも解決出来るんですね。
もしかしてWebClientが大丈夫なのはそれがあるのかな。

659:デフォルトの名無しさん
09/02/18 17:14:20
なんでかって言われたらメモリ節約するためって答えになる
631で言われてる通りシークできないストリームなら内部でMemoryStreamに一旦コピーする

660:デフォルトの名無しさん
09/02/18 17:59:44
>>651
そうなんです
それでいいんだけど、設計見直したらすっきりして、逆に実装が難しいと思ってた機能を
うまく盛り込むことができますた おまいらありがとう

661:デフォルトの名無しさん
09/02/18 20:34:41
Visual C#でログイン認証が通らず、クッキーが取れないサイトがあったのでいろいろ
調べているのですが、Perlでは認証が通ったのでクッキーを見てみると"httponly"という
のがありました。これが原因だとするとVisual C#ではお手上げなんでしょうか?


662:デフォルトの名無しさん
09/02/18 20:37:33
通信プロトコルの勉強をしろ

663:デフォルトの名無しさん
09/02/18 20:42:43
>>661
ワロタ

664:デフォルトの名無しさん
09/02/18 20:46:49
>>661
問題なし

665:デフォルトの名無しさん
09/02/19 11:38:07
C# 2.0Winアプリで質問です。

マルチスレッドでの変数のロック処理について教えてください。

メインスレッドと別のスレッドで処理を行って、
別スレッドで受けたデータをメインスレッドで画面に表示せています。
その時、Listオブジェクト変数を使用してデータを処理しようとしているのですが
このような感じのいいのかが不安なので質問させていただきました。

現在やっている処理は

1.メインスレッドでList変数初期化
2.別スレッドを開始

3.別スレッドでデータをList変数にデータを入れる。(ひたすらスレッドタイマ内でADDし続ける)

5.メインスレッドで一定時間ごとにのデータを画面に表示させる。
6.メインスレッドでListのデータをクリアし、一定時間が経過するのを待つ。(5に戻る)

上記の処理だけを考えた場合、このときList変数をLockしようとしているのですが、ロックするタイミングは

3のデータを入れる時
6のデータをクリアするとき

でよいのでしょうか?

それとも

5のデータを表示させる時(5~6の間)もロックをする必要があるのでしょうか?

よろしくお願いいたします。

666:デフォルトの名無しさん
09/02/19 12:01:49
後者

667:デフォルトの名無しさん
09/02/19 13:21:46
>>666
ありがとうございます。

ということはとにかく 別スレッドで操作される可能性のある変数を使う場合必ずロックする感じですか…
ありがとうございました。

668:デフォルトの名無しさん
09/02/19 20:54:04
時間のかかる処理のところで
Application.DoEvents();
をはさんで処理してるんですけど、
たまにこの命令で応答なしになってずっとかえってこなくなります。

回避方法や代替方法などありませんでしょうか?


669:デフォルトの名無しさん
09/02/19 20:54:59
BackgroundWorker使う

670:668
09/02/19 20:55:01
VisualStudio2008をつかってます。

671:669
09/02/19 20:56:06
既に回答しました

672:デフォルトの名無しさん
09/02/19 20:57:05
>>669
ありがとうございます。
それでやってみます。


673:デフォルトの名無しさん
09/02/19 22:10:30
.NET Framework 3.5 Service Pack 1

インストールしようとしたら、

「この製品はWindows2000にはインストールできません。
どうしてもインストールしたかったら、XP以上にアップグレードしてください」

ってメッセージが出てきたんだが、どうすればいい?

674:デフォルトの名無しさん
09/02/19 22:12:08
もう答えを知ってるじゃないか

675:デフォルトの名無しさん
09/02/19 22:13:02
どうしたい?
1. XP入れる。
2. .NET Framework 2.0 SP2でお茶を濁す。

676:デフォルトの名無しさん
09/02/19 22:15:36
>>673
C#3.0やLinqを使いたいだけなら、MONOという手もなくはない

677:デフォルトの名無しさん
09/02/19 22:18:05
3.C#を諦める。GAME OVER

678:デフォルトの名無しさん
09/02/19 22:19:07
ゲームだったのかぁぁ

679:デフォルトの名無しさん
09/02/19 22:34:13
small basicというものを入れようとしたら、

「.NETを入れてください」

というメッセージが出てきて、それをいれようとしたら
2000ではダメだ、といわれた。

small basicは2.0 SP2でも動くのかなぁ?

680:デフォルトの名無しさん
09/02/19 22:37:36
MS製の教育用のやつ?
Small BasicはWPF使いまくってるから古い.NETやMONOでは絶対動きません

681:デフォルトの名無しさん
09/02/19 22:43:12
>>680
そしたらXP購入コースかなぁ

682:デフォルトの名無しさん
09/02/19 22:53:08
WPFはVistaにしとけ
Vista動かないならWPFなんかどうせまともに動かん
Small Basicにはそんな価値は全く無いけど
C#使うならXP以降でないと話にならない

683:デフォルトの名無しさん
09/02/20 00:48:53
「部長!うちのVB6製品もそろそろ.NETに移植しないとやばいです」
「そうだな。だがうちの製品の顧客はNT4と2000もいるから、.NETとやらは平気なのか?」
「そんなやつらは旧バージョンを引き続き保守してお使いいただきましょうよ」
「じゃあお前2本分働け」
がーん。

684:デフォルトの名無しさん
09/02/20 01:14:55
Visual C# 2008について質問です。
メーラーを作っています。
設定を簡単にするために、Outlook Expressのsmtpサーバー、Port、ID、Passwordの4項目を引き継ぎたいです。
どこに格納されていて、どう読めばいいか、教えてください。


685:デフォルトの名無しさん
09/02/20 01:21:02
世のメーラーでOutlookの設定を自動で使える奴ってあるの?

686:デフォルトの名無しさん
09/02/20 01:26:51
Thunderbirdのソース読めばいいよ

687:デフォルトの名無しさん
09/02/20 01:29:50
無理だろ
そんなのが取得できたら勝手にメール読み放題ウイルスとか作れちゃうじゃん

688:デフォルトの名無しさん
09/02/20 01:36:05
いやいや
他のマシンの設定情報読んだり書き換えたりするわけじゃないんだから

689:デフォルトの名無しさん
09/02/20 01:39:34
女子高生エロエロ動画.avi                                         .exe
とか実行しちゃったらやばいんじゃん?

690:デフォルトの名無しさん
09/02/20 02:10:45
パスワードデコードできたらヤバイねw

691:デフォルトの名無しさん
09/02/20 02:37:41
アセンブリのあるディレクトリのURI形式じゃない普通のパスを取得する標準的な方法ってありますか?
とりあえず、文字列処理で
System.Reflection.Assembly.GetExecutingAssembly().CodeBase.Substring(8).Replace('/','\\').Replace("WMPEmitMiku.DLL","");
ってやってるんですが、何ともダーティーで。

692:デフォルトの名無しさん
09/02/20 03:14:08
  string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
  string dirpath = new FileInfo(path).DirectoryName;
  Console.WriteLine(path);
  Console.WriteLine(dirpath);


693:デフォルトの名無しさん
09/02/20 06:21:11
Outlook Express 使ってないから知らんけど、Protected Storage に入ってるんじゃね?

URLリンク(codezine.jp)

smtp とかその辺は、レジストリにありそう。

694:691
09/02/20 09:08:44
>692
LocationプロパティはMSDNにマニフェストがどうちゃらと書いてあって良く分からなかったのですが
UNCパスが取れるのですね。助かりました。ありがとうございます。

695:デフォルトの名無しさん
09/02/20 11:04:15
C#2.0で Socket.BeginConnect メソッドを使ってサーバに接続しています。

上記メソッドを使う時にタイムアウトの時間を指定とかできないんでしょうか?
接続に失敗したとき AsyncCallback で指定した部分に来るのが遅すぎるのでちょっと困っているのですが・・・

補足:
System.Net.Sockets.SocketException:
接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
または接続済みのホストが応答しなかったため、確立された接続は失敗しました。

この情報を早く取得してタイムアウトエラーを出したいのです。

696:デフォルトの名無しさん
09/02/20 12:29:53
みなさんありがとうございました。
リンク先をたどってHideSeek(シェアウェア)を試して、パスワードを含むOutlookExpressの設定データを読めることはわかりました。読めるだけでテキスト書き出しはできないです。
フリーでは、Protected Storage PassViewというのがあるらしい。そのひとつのmailpv.exeを使ったら、簡単にテキスト書き出しもできるので、これを使ってProcess(mailpv.exe)とかもありかもなと思いました。
気軽に「こんなソフトありませんか?」ならこれで終了です。

おっしゃるとおり、Protected Storageに入っているようです。
これは既存のプログラムやC++なのですが、C#の方法は?
C++だと、
PStoreCreateInstance = (TPStoreCreateInstance)
GetProcAddress(hDll,"PStoreCreateInstance");
と書くところを、C#で書ければいいのかなと思うのですが、で、どう書きゃいいんでしょう?

まずは、Windows\System32\Pstorec.dllを参照に追加して。
としようとしたら、「C:\Windows\System32\Pstorec.dllへの参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください」とかいわれてます。


697:デフォルトの名無しさん
09/02/20 12:35:36
アンマネージDLLの呼び出しで検索したらヒントになるかも

698:デフォルトの名無しさん
09/02/20 12:49:16
URLリンク(pinvoke.net)
こういうサイトがあってPstorec.dllもリストされているんだけど、そのAPIは検索しても出てこないね。
まだ完全網羅はされていないのかな。

699:デフォルトの名無しさん
09/02/20 13:52:01
コードでリソースに新規文字列と値を追加、削除、編集するような処理はないでしょうか?
作成したSQLServerへの接続文字列を追加し、グローバル的に使いたいのですが・・

もしくは他にいい方法があるようでしたら教えて下さい


700:デフォルトの名無しさん
09/02/20 15:30:47
class グローバル変数{
  public String 接続文字列1 = null;
  public String 接続文字列2 = null;
  …
  public String 接続文字列100 = null;
}

701:デフォルトの名無しさん
09/02/20 15:32:02
修正
public static String 接続文字列1 = null;
おれとしたことが

702:デフォルトの名無しさん
09/02/20 16:01:44
>>700
クラスですか
ちょっとそっちでやってみます

ありがとうございました

703:デフォルトの名無しさん
09/02/20 16:24:36
スタックオーバーフロー起こすのでスタックサイズを大きくしたいのですがどうすればできますか?

704:デフォルトの名無しさん
09/02/20 16:26:02
>>703
プログラムを書き換える

705:デフォルトの名無しさん
09/02/20 16:28:13
>>699
リソースは知らんけど、設定なら簡単に編集できるんだけどなぁ。2008でね。
追加、削除はしらない。

706:デフォルトの名無しさん
09/02/20 16:42:16
>>699
接続文字列程度なら暗号化して適当な設定ファイルにでも書き込むってのは?
ウチは大体XMLでやってるけど

707:デフォルトの名無しさん
09/02/20 16:43:01
Byte配列の中身を検索したいんだけど便利な関数ってありますか?

708:デフォルトの名無しさん
09/02/20 16:45:12
どう検索したいんだ…
普通にループで見て回るとかじゃなくって?

709:デフォルトの名無しさん
09/02/20 17:16:42
文字列で"テキスト"を検索するみたいに、
16進の"0x01 0x02 0x03 0x04"をまとめて検索できないかと思って・・・

710:デフォルトの名無しさん
09/02/20 19:43:15
前スレで見事に同じ質問を見たな


711:デフォルトの名無しさん
09/02/20 19:51:37
VisualStudio2008でApplication.DoEvents();を使うと応答ナシになって帰ってこない時が
あるので、使わない方法を調べてるんですけど、以下のようなコードだと実行すらされて
いない感じなんですけど、原因わかりますでしょうか?


private IEnumerable<int> SiteCheck(WebBrowser webBrowser, string url)
{
webBrowser.Navigate(url);

while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
yield return 100;
// Application.DoEvents();
// ThreadSleep(100);
// これとおなじ
}
}


712:デフォルトの名無しさん
09/02/20 20:00:06
yieldはforeachをサポートするために使うもの。DoEventsの代わりではない。
タイマイベントでforeach (var dummy in SiteCheck(browser, url)) ;
とかしたら動くかもしれないけどかなり変態的な手法なのでお勧めできない。

713:712
09/02/20 20:04:00
訂正
タイマイベントでforeachはおかしいな
IEnumerator<int> state;
void Start() { state = SiteCheck(browser, url); timer.Start(); timer.Interval = 100; timer.Tick += timer_Tick; }
void timer_Tick() { state.MoveNext(); }
あえてやるならこんな感じかな

714:デフォルトの名無しさん
09/02/20 20:18:21
その昔、yield という API があってな・・・ Win16 の頃か・・・

715:デフォルトの名無しさん
09/02/20 21:16:26
DBにあるCLOB型カラムのデータをoledbを使用してstringで取得したいと考えていますが、
「データ型はサポートされていません」とのエラーがでて上手くいきません。
oledbではCLOB型の取得を行えないのでしょうか。
----環境----
DB:Olacle10g
.NET:3.5
----ソース----
OleDbCommand command = new OleDbCommand("select clobColmun from clobtable", connection, transaction);
OleDbDataReader dr = command.ExecuteReader();
if(dr.Read())
・・・


716:デフォルトの名無しさん
09/02/20 21:19:58
ODP.NET 使え

717:デフォルトの名無しさん
09/02/20 21:22:49
oledb clobでググれば情報はいくらでも見つかる

oledbでclobが扱えないんじゃなくて、
select使ってstringでとろうとするのが無理

718:デフォルトの名無しさん
09/02/20 21:24:23
>>716
現状システム全体がOLE DBで動いているため、
この部分のみODP.NETを使うというのは厳しい状況です・・・

719:デフォルトの名無しさん
09/02/20 21:33:16
>>717
if文以降でOleDbDataReader#GetBytes()でバイト配列を取得→stringへ変換という処理を想定していたのですが、
例外は以下の行で発生しているため、原因が特定できずに困っています。
OleDbDataReader dr = command.ExecuteReader();

>select使ってstringでとろうとするのが無理
という事は
OleDbCommand command = new OleDbCommand("select clobColmun from clobtable", connection, transaction);
の行自体に問題があるのでしょうか。

先ほどからググり続けているのですが、ピンとくるヒントが中々見つかりません・・・



720:デフォルトの名無しさん
09/02/20 22:16:00
OracleならSQL内でTO_CHARできないの?

721:デフォルトの名無しさん
09/02/20 22:44:44
>>719
検索すると似たような質問があるね。BLOBの質問だけど
URLリンク(202.218.219.160)

結局
>BLOB 型だと PL/SQLパッケージを使用する以外に方法が無かったかも知れません。
とかいってて、うまく解決できてないみたい

722:デフォルトの名無しさん
09/02/21 03:15:09
ググったり色々試してみましたが現時点では出来ないに近い判断を下すしかないようです
一部できそうな内容も見つかりましたが、現状の問題の解決には至りませんでした
ありがとうございました


723:デフォルトの名無しさん
09/02/21 03:34:45
>>695
基本的にできないよ

724:デフォルトの名無しさん
09/02/21 06:07:34
System.Diagnostics.FileVersionInfo.GetVersionInfo で取得出来ないバージョン情報はどうやって取得すればいいんでしょうか?
例えば、火狐のBuildIDとかです
WinAPIなら取得出来るんですけど・・・

725:デフォルトの名無しさん
09/02/21 11:23:00
>>724
ならAPI使えばいんジャマイか

726:デフォルトの名無しさん
09/02/21 12:21:39
int a = new int();
a.ToString;

(new int()).ToString;
とかくことはできますか?

727:デフォルトの名無しさん
09/02/21 12:25:31
何故自分で試してみない

728:デフォルトの名無しさん
09/02/21 12:25:46
できるけど0.ToString();と同じだよ

729:デフォルトの名無しさん
09/02/21 12:26:24
書ける

730:デフォルトの名無しさん
09/02/21 12:29:43
この場合どうやってインスタンスにアクセスするんですか?
デリゲートがなければ行方不明になる書き方のようなきがするんですが

731:デフォルトの名無しさん
09/02/21 12:31:24
usingは名前空間を省略するできるようにするためにあるんですよね?
Dispose() メソッドが呼び出されるように書く為とはどういうことですか?

732:デフォルトの名無しさん
09/02/21 12:37:24
>>730
アクセスできない
実際行方不明になる
>>731
using (Bitmap bmp = new Bitmap(width, height)) { bmpに対する処理 }
と書くとスコープを抜けたときに自動的にbmpがDisposeされる
たまたま同じusingキーワードを使ってるだけで全くの別物

733:デフォルトの名無しさん
09/02/21 12:38:01
名前空間省略に使うusingとDisposeの方は全く別物
URLリンク(msdn.microsoft.com)(VS.80).aspx

using(obj)
{
ウントカカントカ
}

って書くとスコープを抜けるときにDisposeを呼ぶ。
ダック…ではなかったような気がする。

734:デフォルトの名無しさん
09/02/21 12:44:59
ありがとうです。
それってDisposeを呼べば済むことじゃないんですか?
わざわざ紛らわしい名前を付けてまで自動的に呼ばれるようにする理由はなんですか?

735:デフォルトの名無しさん
09/02/21 12:46:16
>>733
thx読んできます

736:デフォルトの名無しさん
09/02/21 12:46:58
Disposeって書きたくないから
スコープを分離するため

737:デフォルトの名無しさん
09/02/21 12:48:12
>>734
Disposeを呼ぶときはかならずこういう風に書く必要がある
try { objを使う } finally { obj.Dispose(); }
こうしないと例外が発生したときにDisposeが呼ばれない
毎回こんなの書くのは面倒だから

738:デフォルトの名無しさん
09/02/21 12:49:01
しかしまあ確かに別の機能をなんで同じ名前にしたのかは謎だわな・・・

739:デフォルトの名無しさん
09/02/21 12:51:25
>>737
なるほど、deleteをデストラクタに書くようなものですね。
理解できましたありがとうございました。

740:デフォルトの名無しさん
09/02/21 13:16:54
C++って例外の時デストラクタ呼ばれたか?

741:デフォルトの名無しさん
09/02/21 13:25:04
その点については、C++/CLIはとっても楽。

742:デフォルトの名無しさん
09/02/21 13:45:00
>>725
API使おうと思ってググってみると頭おかしいんじゃないかって人のページに当たるので躊躇ってました
昨日からC#触り始めましたがC++先にやったからなのか痒いところに手が届かないことがしばしばありますね
C#はもうちょっと時間が経ったあとにやってみます
ありがとうございました

743:デフォルトの名無しさん
09/02/21 14:38:53
>>740
れる。

744:デフォルトの名無しさん
09/02/21 16:18:42
というか finally が仕様にないので呼んでくれないと
駄目という大前提が


745:デフォルトの名無しさん
09/02/21 16:20:22
finallyも必ず呼ばれる保証は無かったりする

746:デフォルトの名無しさん
09/02/21 16:24:55
public bool this[int cols, int rows] { get; set; }
このthisはどういう意味なんですか?
bool型変数thisの動的配列ってことですか?
動的でいいんでしょうか?

747:デフォルトの名無しさん
09/02/21 16:26:30
>>746
indexer

748:デフォルトの名無しさん
09/02/21 16:26:49
それはインデクサ

get;set;ってあるとこからプロパティだと推測しろ

749:デフォルトの名無しさん
09/02/21 16:27:57
>>745
StackOverflowExceptionがそうなのだけど、
CLR2.0からはcatchも出来なくなったからもうどうでもいい。

750:デフォルトの名無しさん
09/02/21 16:31:29
CriticalFinalizerObject使うのが確実らしいよ

751:デフォルトの名無しさん
09/02/21 16:45:46
まあ、例外処理は、正規のロジックを分離するのが本分であって、予想外の事態に対処するってのは
使い方が違うからねえ。

752:デフォルトの名無しさん
09/02/21 17:11:22
WebClientクラスのUploadFileメソッドはファイルのみFTPに転送できて、フォルダは転送できないのでしょうか?
フォルダを転送するにはどんな命令を使えばいいですか?

753:デフォルトの名無しさん
09/02/21 17:13:43
UploadFolder

754:デフォルトの名無しさん
09/02/21 17:20:49
ありがとう
インデクサわかりました
クラス = {1,2}
としてあればインデクサで指定してある方法で代入とかできるんですね
でもフィールドが2つあったらどっちに代入されるんですか?

755:デフォルトの名無しさん
09/02/21 17:26:08
それはコレクション初期化子といって,インデクサとは関係ない
var list = new List<int> { 1, 2 }; は
var list = new List<ind>(); list.Add(1); list.Add(2);と同じ

756:デフォルトの名無しさん
09/02/21 17:27:04
だから、thisという特別な名前しかインデクサには使えないのさ。

757:デフォルトの名無しさん
09/02/21 17:33:05
わかりました。インデクサって中でフィールドに代入する実装を書かなきゃいけないんですね
一番上のフィールドに自動的に入るとかかと思いました。ありがとうございました

758:デフォルトの名無しさん
09/02/21 17:43:42
>>757
ひょっとして、プロパティに関して自動プロパティしか知らない?
堅気のプロパティを知ってから自動プロパティを使った方が良いよ。
public int A{get; set;}
みたいなのしか書いた事ないなら、
private int a;
public int A{get{return a;} set{a=Value;}}
をまず知っておくべき。

759:デフォルトの名無しさん
09/02/21 18:02:08
>>753
WebClient wc = new WebClient();
wc.UploadFolder(?);
としようにもUploadFolder自体がWebClientの定義に含まれていないとエラーが出たんですが、どういうことですか?

760:デフォルトの名無しさん
09/02/21 18:05:17
フォルダはアップロードとかいう類のもんじゃない
FTPならMKDコマンドか、WebClientで使えるのかな

761:デフォルトの名無しさん
09/02/21 21:08:28
環境はVisualStudio2005です。
ジェネリックコンテナのListやDictionaryで、
C++のstlにあるfront()やback(),
リバースイタレータの機能ってどうやって使うのでしょうか。

762:デフォルトの名無しさん
09/02/21 21:13:52
Dictionaryには順番という概念がないので無意味
リンクリストはLinkedList<T>
逆順に列挙するにはforeach (var item in ((IEnumerable)list).Reverse())のようにする(LINQ)

763:デフォルトの名無しさん
09/02/21 21:23:22
ふむふむ。Dictionaryてハッシュなのですね。
C#で二分木に相当するコンテナってのはあるんでしょうか。

764:デフォルトの名無しさん
09/02/21 21:24:51
iterableじゃなくてenumerableで、概念上はforeachの中身は各要素に対して一回だけ
実行されて順番は未定義、foreachの中身は可換な操作のみ可、であるはずなのに、
何故かEnumerable.Reverse()がある不思議。実用上は仕方がない事とは言え。

俺としては、本当に順番は未定義にして、foreachの中身が可換な操作の場合のみ結果が
定義されるとした上で、並列実行なんかをサポートしてくれた方が嬉しいんだが・・・

まあ、内部的にIEnumeratorのMoveNext()使っている限りはどうしようもない望みなわけだが。

765:デフォルトの名無しさん
09/02/21 21:37:50
SortedDictionaryとかは内部的に二分木のはず。


766:デフォルトの名無しさん
09/02/21 21:46:12
>765
おお、ありがとうございます。
でも、先頭要素や末尾要素の取得が出来ません。
MSDNみてるとExtensionのメソッドというので取得できるみたいですが・・・
URLリンク(msdn.microsoft.com)

このExtensionのメソッドってどうやれば使えるのでしょうか。
インテリセンスでは出てこないので、何かしなきゃいけないみたいで・・・。

767:764
09/02/21 21:48:25
そういえば、Enumerable.Reverse()の実装をリフレクタで見てみたら、一度全部列挙して
配列にコピーする鬼実装になっていたような気がする。LinkedListが泣いている・・・


768:デフォルトの名無しさん
09/02/21 21:48:56
SortedListはインデックスで要素取得できるからそんなのいらない
Reverseなどはusing System.Linq;をファイルの先頭に追加すると使えるようになる

769:デフォルトの名無しさん
09/02/21 21:51:26
>767-768
(;´Д`)もしかして、stl使ったほうがよさげ?

770:764
09/02/21 21:59:10
>766
「拡張メソッド」の訳をさぼったっぽい。
System.Linq.Enumerableクラスの一連のメソッドは第一引数が
this IEnumerable foo
ってなっていて、実際にはIEnumerableを実装しているクラスノインスタンスメソッドのように
使える。C++のSTLで言う「アルゴリズム」みたいなもの。IEnumerableを実装していればみんな
同じ事ができる。ただし、内部的にIEnumeratorを使った列挙にまで落とし込まれるので、
>>767
に書いたみたいに順序付けられて先頭と末尾を持つコンテナの特性は活かされない。

>>768
SortedListはインデックスがある分、要素の追加がO(n)かかる。

実は、本当の意味での二分木ってないんだよね。

SortedDictionary:内部構造は二分木なのにバイナリサーチがない(あれば先頭、末尾を
取得するメソッドがなくても最悪O(logN)で先頭、末尾に辿り着ける)
List, SortedList:バイナリサーチあり。ただしインデックスを持っているので追加、削除
にO(N)かかる。

orz

俺は、スキップリストを自分で実装して二分木の代わりに使っている。確率的アルゴリズムで
もって局所的な操作を行っても平衡二分木状である事が保障され続けるナイスなデータ構造。

771:デフォルトの名無しさん
09/02/21 22:15:06
Microsofot公式の本でも紹介されていたけど、
WintellectがいろいろSTL風のコレクションを作っているらしい。
URLリンク(d.hatena.ne.jp)

772:デフォルトの名無しさん
09/02/21 22:17:51
あ、SortedDictionaryのバイナリサーチがないってのは、IEnumerableに対する
System.Linq.Enumerable.First拡張メソッドを使っても二分木構造が活かされないって意味ね。
キーが既に含まれているかどうかのバイナリサーチは(拡張メソッドじゃなくて)クラスのメソッド
として実装されている。でも、それじゃ役に立たない場面が多い。


773:763=766=769
09/02/21 22:27:41
皆さんありがとうごさいます。
拡張メソッドも、STLもC#2.0では使えないようなので、
今ある機能で間に合わせることにしました。
先頭要素の取得は↓のような感じで。

SortedDictionary<Key, Value>.Enumerator e = contaner.GetEnumerator();
e.MoveNext();
return e.Value;

でも、なんかもやもやする・・・

774:デフォルトの名無しさん
09/02/21 22:32:56
あ、SortedList.Enumeratorの実装次第では、System.Linq.Enumerableクラスが
拡張メソッドとして提供するFirstメソッドは高速(少なくともO(log N)、最初のノードを
内部で保持していればO(1))である可能性があるね。その代わりLastは内部で全部列挙
しやがるんだろうなあorz

775:デフォルトの名無しさん
09/02/21 22:35:03
>>773
大丈夫、拡張メソッドFirstの内部実装はそれだ。で、Lastの内部実装は>>774だ。
でも、そんなにSTLやアルゴリズムが好きなら、LINQ to Object(さんざん出ている
System.Linq.Enumerableクラスが提供する拡張メソッドのことね)は確実に
気に入ると思うよ。まだまだ足りない物は確かに多いんだけど。

776:デフォルトの名無しさん
09/02/21 22:52:57
LINQ to Objectは気にいりそうな気がしますが
VS2008からみたいなので諦めます。

でもListの末尾要素を順序探査して拾うってのは、
ちょっとひどいような(;'A`)

将来的には改善されるとは思うので、
LinqがあるVS買ったら書き換えるようにします。

777:デフォルトの名無しさん
09/02/21 23:09:02
>>773
ねえ、それで、「順序に関する」最初の要素ってちゃんと取得できてる?
気になってリフレクタでSortedDictionaryの実装を見てみたんだけど、
内部でTreeSet<T>っていうinternalクラスを使っているのね(赤黒平衡木っぽい)。
で、GetEnumeratorするとこのTreeSetのGetEnumeratorに丸投げされて、
ResetしてMoveNextしてCurrentを参照するとルートノードが返される実装になって
いるっぽいんだが。

このTreeSet<T>をpublicにしてくれれば>>773のもやもやも解消するだろうになあ。
これはモノホンの平衡二分木になっている。それで、
InOrderTreeWalk(TreeWalkAction<T> action)
ってメソッドがあって、どうやら、条件式によって[a,∞)の形の区間を指定してその区間
に含まれる最初のノードを探索してくれるみたい。ただし、結局逆順の探索は実装されて
ない。orz.

>>776
Express Editionは無料ですよ。確か2005と共存もできるし。とりあえず入れて見たら?
業務での開発?

778:777
09/02/21 23:11:09
あ、問題ないみたいだ。ごめん。左に左にと進みながらスタックにpushしている。

779:デフォルトの名無しさん
09/02/21 23:18:51
>777
趣味の開発なのですが、Expressエディションだと
クラスデザイナが使えないようなので手をだしてません。
リファクタ機能とクラスデザイナの使い心地試すのを
第一優先でC#に手をだしてるものでして・・・。


780:デフォルトの名無しさん
09/02/21 23:42:46
Expressにリファクタ機能ないんだ!!

781:デフォルトの名無しさん
09/02/21 23:49:43
あるよ

782:デフォルトの名無しさん
09/02/22 01:18:03
手元のC#2008EEだと、
リファクタ(R) → 名前の変更, メソッドの抽出
しかないな。
インテリセンスはちゃんと効くけど

783:デフォルトの名無しさん
09/02/22 01:27:48
Enumerableの実装がどうこうとか言っている暇があったら、
自分で(拡張メソッドを)オーバーロードすればいいのに

まあ、これくらい標準で用意してくれという意見なら賛成するが

public static ListEx {
  public static T First<T>(this IList<T> list) { return list[0]; }
  public static T Last<T>(this IList<T> list) { return list[list.Count - 1]; }
  public static IEnumerable<T> Reverse<T>(this IList<T> list) {
    for(int i = list.Count - 1; i >= 0; i--) yield return list[i];
  }
}

784:デフォルトの名無しさん
09/02/22 01:32:56
拡張メソッド使えるなら、全部あるよ。
URLリンク(msdn.microsoft.com)(VS.95).aspx

785:デフォルトの名無しさん
09/02/22 01:43:57
>>782
それだけあれば十分じゃね?
つか、それしか使ったことない気がする

786:デフォルトの名無しさん
09/02/22 01:51:09
>>784
そうじゃなくて、IEnumerable<T>を想定した(汎用的で効率の悪い)実装ではなく、
IList<T>、etc. 専用に効率の良い(かもしれない)実装**も**用意してくれという話

てか、最初の単語くらいは見てくれよw

787:デフォルトの名無しさん
09/02/22 06:25:47
>>783
もちろんそれで良いんだけど、まさに、「標準で用意してくれ」って意見なんだよね。
それと、SortedDictionaryだと>>773みたいに列挙の必要はないのにEnumerator
をとることになって格好悪い。

具体的には、IEnumealeは順序を保証しない列挙に特化(Reverse, First, Lastなし, その代わり
foreachの並列実行サポート)して、IOrderedEnumerableみたいなインタフェースを追加する。

こいつには順序に従った区間(-∞,a]と等価なbool値デリゲートおよび探索開始ノードを取るLast,
順序に従った区間[a,+∞)に等価なbool値デリゲートおよび探索開始ノードを取るFirst, 及び順序に
従って前方、後方に移動できるIOrderedEnumeratorを与えるGetOrderedEnumeratorメソッドが
あって、順序があって先頭・末尾があるコレクションはこいつで表現される。そんでもって標準で
拡張メソッドで``アルゴリズム''を提供する。これが一番みんなが幸せになれるんじゃないかな。
LINQに慣れると、標準での汎用的なインタフェースへの拡張メソッドの提供という事の便利さが
身に染みる。

>>771も気になるけれど、IEnumerable<T>, IList<T>, ICollection<T>インタフェースへの
拡張メソッドによる実装なので、ツリー状の構造を活かしたバイナリサーtはなくって、IList<T>
のインデックスベースのバイナイサーチしかないみたい。それはそもそもList, SortedListにはある
以上魅力に乏しいよなあ。


788:デフォルトの名無しさん
09/02/22 06:48:47
ああ、IOrderedEnumeratorなんて作らなくても、ノードを与えて、前方、後方のノードを取得する
forward, BackメソッドをIOrderedEnumerableに含めれば良いのか。ますますSTLっぽくなってきた。

インタフェースの設計って難しいなあ。だから標準で(略)

789:デフォルトの名無しさん
09/02/22 11:15:26
実際FirstとかElementAtとかToArrayなんかはIList<T>の場合は特別扱いされるから
余計な心配はいらないよ
ソース読めばわかる

790:デフォルトの名無しさん
09/02/22 11:25:41
各要素の値を見る必要のないメソッドはすべてIList<T>に対して特別に最適化されてるみたい

791:787
09/02/22 12:52:08
どうにかして欲しいのはSortedDictionaryやLinkedListなんだ~~~。
と叫んでみる。順序と特別な探索の方法を持つデータ構造を活かす汎用的な
(C++の``アルゴリズム''的な)方法がないんだよ。
 
IList, IList<T>だったらそりゃ特別扱いもされているし、>>783のコードでも、
>>771のライブラリでも良い。
 
ただ、>>773のFirst()のコードは>>778によって、ルートからの探索でO(logN)で先頭ノードに
辿り着くので二分木の構造は結局活かされるみたいね。これはLINQの実装そのものだからLINQ
でも同じ。

792:デフォルトの名無しさん
09/02/22 13:32:49
いまcsvを読んでDataGridViewに表示しています。
さらに、csvのある項目から文字列を複数個生成し、それをArrayListに入れています。
そのArrayListをさらにFormのメンバ変数のArrayListに入れています。

「DataGridViewの1行のデータ」を使用するときは、表示されている情報のほかに、
上記のArrayListの文字列も使いたいのです。
今は選択された行のindexから、メンバ変数のArrayListからその行のArrayListを取り出して使っています。

これで動いているのでいいんですが、
たとえばDataGridViewの1行に直接不可視のカラムでArrayListを追加できれば、メンバ変数で別途管理しなくてもすむと思うんですが、
DataTableのColumnのAdd()で指定するDataTypeにはArrayListがありません。

こんなように、DataGridViewには非表示で、1レコードに紐付けて管理したいListやCollection等があった場合、
みなさんどう管理しますか?

793:デフォルトの名無しさん
09/02/22 16:19:20
Tag

794:デフォルトの名無しさん
09/02/22 16:54:16
PropertyGridと同じように普通にBrowsableAttributeが使えると思うんだけど、
そういうことじゃないのかね。

ほとんどDataGridView使ったことないもんで勘違いだったらすまんが。。

795:デフォルトの名無しさん
09/02/22 19:00:45
Visual C# Expressをインストールしました。
MS-DOSで.csファイルをコンパイルしようとしたけど出来ませんでした。
Pathが通っていないからだと思い、csc.exeを探したのですが見当たりませんでした。

796:デフォルトの名無しさん
09/02/22 19:03:37
それなら多分 .NET Framework を入れるだけでよかったのかも
PATH は \WINDOWS\Microsoft.NET\Framework\v2.0.50727

797:デフォルトの名無しさん
09/02/22 19:06:42
Visual Studio Toolsのコマンドプロンプトからやってみて

798:デフォルトの名無しさん
09/02/22 19:08:50
>>795
%frameworkdir%\%frameworkversion%にある
そんな環境変数見当たらなければ、%windir%\Microsoft.NET\Framework\v2.0.50727

799:デフォルトの名無しさん
09/02/22 20:26:57
XMLで出力されるドキュメントコメントをHTML形式とかで見るいいツール知らないでしょうか。
ndocとかいうのがぐぐるとひっかかったのですが、 2008では使えないみたいで。


800:デフォルトの名無しさん
09/02/22 20:32:56
Sandcastleとか

801:デフォルトの名無しさん
09/02/22 20:32:59
オナこいてる方も、女とやってる方も教えてくんろ

他アプリケーションのコントロールのハンドルを取得して、
そいつにPostMessageなんぞ使って、
要するにそのアプリをコントロールしたいんだわ

ところが、
SunAwtFrame
ってウインドウクラスのコントロール達の
ハンドルが取得できないどころか探せすらできない。
Spy++で見ても親ウインドウしか見つからない・・・。
これってJavaのクラス?
なんか良い方法はないでしょうか?

802:デフォルトの名無しさん
09/02/22 20:34:40
ほぼsandcastle一択。
素のままで使うのは大変なのでsandcastle help file builderをフロントエンドとして使うのが良い。

803:デフォルトの名無しさん
09/02/22 20:37:03
javaのコントロールってウィンドウハンドル持ってないんだっけ?
それならウインドウの中身を一枚の絵として描いてるだけなんだからどうしようもない

804:デフォルトの名無しさん
09/02/22 20:39:30
同じようなもので、IE のウィンドウがある。あれも一枚絵。

だけど、IE のウィンドウについては IHtmlDocument インターフェイスが用意されてる。
Java(Awt) に同じようなものがあるかは知らん。

805:デフォルトの名無しさん
09/02/22 21:23:46
>>798
というか今いれてという話なら 2008 じゃないかって気がするから
v3.5 の下だと思う > csc.exe

806:797
09/02/22 21:25:33
無視すんなコラ

807:デフォルトの名無しさん
09/02/22 21:25:46
よくわかってない人が来ました。

808:デフォルトの名無しさん
09/02/22 21:30:55
>>806
たしかVC++以外のエクスプレスには無かったはず。

809:デフォルトの名無しさん
09/02/22 21:34:33
>>803,804

おまえらありがと
ちょっくら違う手を考えてみる

810:デフォルトの名無しさん
09/02/22 22:14:59
>>802
質問者じゃないけど、これ知らなかった
今インストールして試してみたが、便利だな
利用させてもらうよ

811:デフォルトの名無しさん
09/02/22 22:25:01
>>810
コンソール版も同梱されているので、VisualStudioの外部ツールに
タイトル:Sandcastle Help File Builder
コマンド:C:\Program Files\EWSoftware\Sandcastle Help File Builder\SandcastleBuilderConsole.exe
引数:$(ProjectDir)$(TargetName).shfb
"出力ウィンドウを使用"にチェック
"起動時に引数を入力"にチェック
って感じで登録しておくと便利。

812:デフォルトの名無しさん
09/02/22 22:27:43
すげえええええええ

813:799
09/02/22 22:54:53
>>800, >>802
sandcastle使ってみました。
感動した。

ありがとうございます。


814:デフォルトの名無しさん
09/02/22 22:59:13
SandCastle使うと自分が適当に作ったライブラリが標準のライブラリと対等に見える不思議。
PresentationStyleはvs2005にするとMSDNと似たフォーマットになるよ。


815:デフォルトの名無しさん
09/02/23 00:22:45
C#2.0で質問です
親 ClassA→ClassB→ClassC 子
とクラスを継承していて、ClassCはインスタンスも生成でき、ClassCからの継承も可させたいけど、
ClassBやAから継承したクラスを作らせたくないようにしたり、直接、ClassBやAのインスタンスを
生成させたくない場合はどうすればいいですか?

クラスライブラリとして公開したいので、ClassCは自由に利用してもらいたいのですが、
ClassBとClassAは非公開にしておきたいのですが、どうすればいいでしょうか。



816:デフォルトの名無しさん
09/02/23 00:27:14
AとBをinternalにして、C をpublicにすればいいんじゃね?

817:デフォルトの名無しさん
09/02/23 00:29:31
そう思ったんだけど、
アクセシビリティに一貫性がありません。基本クラス 'ClassA' のアクセシビリティはクラス 'ClassB' よりも低く設定されています。
ってエラーで弾かれるのです(´;ω;`)ブワッ



818:デフォルトの名無しさん
09/02/23 00:32:03
AやB自体のアクセスレベルはpublicのままで
コンストラクタをinternalにする
.NET Frameworkのクラスでは多用されてるやり方

819:デフォルトの名無しさん
09/02/23 00:51:58
なるほど、そんなやり方があったんですね
ただ、それだとインスタンスが生成できないというだけで、
継承はできるので、継承元クラスのProtectedのメソッドが見えてしまったり、
インテリセンス(?)にIDE上ででてきてしまったりしますよね。
なるべく余計な情報を出したくないんですが、無理なら仕方ないのかな。

820:デフォルトの名無しさん
09/02/23 01:05:20
>>819
そもそも、それならClassAもClassBも必要ないはずだと思うんだけど。
全部ClassCに書けばいいじゃん。
派生できないベースクラスなど何の意味があるの?

ClassCという型の存在を隠したまま、そのインスタンスをClassAとして使わせたい、
ってのならよくわかるし方法もあると思うんだけど。

821:デフォルトの名無しさん
09/02/23 01:10:17
共通して利用する処理を基底クラスに書いておくってのは普通にないか?
クラスライブラリごとに開発チームが違うような場合
最も表面的なところしか見せたくない場合もあると思うんだが

822:デフォルトの名無しさん
09/02/23 01:19:29
うんだから派生クラスを隠したいというのなら話はわかるけど……、
と言ってるんですが。

823:デフォルトの名無しさん
09/02/23 01:30:17
継承を使わないで、委譲させればいいんじゃないかな?

824:デフォルトの名無しさん
09/02/23 01:36:23
いや基底クラスの関数群はそのチームでしか必要ないクラスだから
派生クラスだけ公開したいという場合もあるんじゃないか?

825:デフォルトの名無しさん
09/02/23 04:08:32
ドスプロントでコンパイルしようと思って、Path通そうとしたら、
C:\Program Filesの中にcsc.exeが見当たらなくて焦った。
C:\WINDOWSの中にあったのね。

826:デフォルトの名無しさん
09/02/23 07:51:09
ドスプロントとかいつの時代だよ

827:デフォルトの名無しさん
09/02/23 07:52:34
Win7にも絶賛登載中ですが

828:デフォルトの名無しさん
09/02/23 07:53:08
>>821
そういう場合、お作法としては、移譲、
要するに、ちょっと面倒だけどメンバーとして持って、
ClassA a;
void Foo() { a.Foo(); }
とする方がいいということになってる。


829:デフォルトの名無しさん
09/02/23 07:55:26
>>826
PowerShell が .NET に依存してて、
.NET が GUI 機能に依存してるから外すに外せないらしいね。
.NET Framework の GUI 外したバージョンも作って欲しいんだけどなぁ。

830:デフォルトの名無しさん
09/02/23 08:12:22
コマンドプロンプト仕えよ

831:デフォルトの名無しさん
09/02/23 08:17:41
このスレ的にMonoってどうなの

832:デフォルトの名無しさん
09/02/23 08:22:54
スレちがい

833:デフォルトの名無しさん
09/02/23 09:47:12
.NET Framework単体での質問スレが見つからなかったのでこちらに質問させて下さい。

.NET Framework Version 3.5 の新機能
URLリンク(msdn.microsoft.com)

にある

> Socket 名前空間に対する機能強化の一環として、一連のクラスが新たに追加されました。

とは具体的にどのクラスを差すのでしょうか?

834:デフォルトの名無しさん
09/02/23 13:37:43
C#でWiiリモコンの制御ってどうやるんですか?
参考になるサイトなどお教えください


835:デフォルトの名無しさん
09/02/23 17:30:24
>>834
まずはリモコンの素材について学んで来い
そしたら教えてやる

836:デフォルトの名無しさん
09/02/23 22:38:58
新しいものに対する拒否反応以上ではないような気がするな。
一度XAMLなしで簡単なプログラムを書いてみるといいよ。
やってる途中でバカバカしくなるから。

837:デフォルトの名無しさん
09/02/23 22:39:45
>>836
すまん、誤爆

838:デフォルトの名無しさん
09/02/23 22:49:42
気にするな
理解した
向こうにレスする必要なし

839:デフォルトの名無しさん
09/02/23 23:31:13
>>834
Managed Library for Nintendo's Wiimote でぐぐれ。

840:デフォルトの名無しさん
09/02/23 23:38:38
DataGridViewにて困っております。
バインドしたDatatableのデータを更新すると、
グリッドの方にも反映されますよね?
その時のセルを取得したいのですが、
CellValueChangedイベントで拾えませんでした。
何か方法よいありますでしょうか?

841:デフォルトの名無しさん
09/02/23 23:44:39
>>839
ジョークだと思ったら本当にあるのなw

842:デフォルトの名無しさん
09/02/23 23:59:13
>>840
rowdataboundイベントでe.rows.cellsとかで取得できないの?

843:デフォルトの名無しさん
09/02/24 00:09:52
>>841
日本だとMS製品と水と油な感じの派閥でも、
海外では.NETに前向きな雰囲気。
Wiimote以外にも、iPhoneで.NET(Mono)使うとか普通にやられてる。


844:デフォルトの名無しさん
09/02/24 00:11:24
>>842
DataGridViewには該当するイベントはないですね。
似たイベントを探しましたが、見あたりませんでしたorz

845:デフォルトの名無しさん
09/02/24 00:14:15
BindingSource_EndEdit()

CurrentCell

この辺

846:デフォルトの名無しさん
09/02/24 00:19:20
>>845
確認してみます。

847:デフォルトの名無しさん
09/02/24 00:22:15
> 834
このページにのってる
URLリンク(www.kosaka-lab.com)

質問する前にググれよ


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