トップページ⇒tech
1001コメント308KB

C♯, C#相談室 Part35

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/03(金) 03:07:45
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/

過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0592デフォルトの名無しさん2006/11/27(月) 00:03:17
>>588
デストラクタはObject.Finalizeのオーバーライドにコンパイルされる。
05934742006/11/27(月) 00:03:22
>583
レス、ありがとう。でも、12時過ぎて電源落とされたんで、タクシーで家に帰ることにしました。明日、朝一でまたクライアントのところへ出張いかないとです…なおんなくって怒られるのが目に見えてて鬱です…。
0594デフォルトの名無しさん2006/11/27(月) 00:03:26
その流れで、nullを代入した後だとあとかたもなくなった
この意味が理解できるか?ってか意味不明
0595デフォルトの名無しさん2006/11/27(月) 00:14:26
>>569
マネージドではどのリソースがどこのメモリ空間を占有しているって概念がないのよ。
fixedしないとポインタが使えないのも、勝手に整理されてメモリ上を動いてしまうから。
0596デフォルトの名無しさん2006/11/27(月) 00:35:53
Dispose()したオブジェクトは消滅していないのでしょうか?
0597デフォルトの名無しさん2006/11/27(月) 00:40:31
Dispose だろうがただのメソッドだ
0598デフォルトの名無しさん2006/11/27(月) 00:43:24
>>596
ならDispose()しないでいいじゃんってこと?
ばかん♪
0599デフォルトの名無しさん2006/11/27(月) 00:43:47
>>594
読解力ないんだよ。
0600デフォルトの名無しさん2006/11/27(月) 00:45:42
いやさ消滅させる処理書かないとと構文的にシンメトリーじゃないじゃん?
0601デフォルトの名無しさん2006/11/27(月) 00:48:15
>>596
Disposeはオブジェクトの持っているアンマネージドリソースを開放するメソッド
0602デフォルトの名無しさん2006/11/27(月) 00:49:41
>>600
そこまで気になるなら勝手にCでも使っててくれよ。
0603デフォルトの名無しさん2006/11/27(月) 00:50:01
リセットボタンおせば消滅するよ
0604デフォルトの名無しさん2006/11/27(月) 00:55:10
Cつかってもfreeが必要ないとか言い出すバカがいるわけで
0605デフォルトの名無しさん2006/11/27(月) 00:59:46
>>599
じゃ意味が通るように説明してみろ。

null代入したら普通はたどれる元がないんだから
そりゃメンバにはアクセスできんだろうが、
「それはあとかたなく開放されたからだ」
とでも言う気かよ。
GC起こるまで消えてないことには何のかわりもない。
なんらかの方法でメンバにアクセスしたら普通にアクセスできるわな。
0606デフォルトの名無しさん2006/11/27(月) 01:00:58
>>601
厳密に言えばSystem.Transactionsのような例外も出てきたから
そうではないのだけど、主目的なのは確かだな。

つか一回Disposeが必要なクラス、アンマネージラッパを書いて
みればとてもよくわかるんだけど、それなりに暗黒面なので難しい
のだろうなぁ。
0607デフォルトの名無しさん2006/11/27(月) 01:01:39
>>605
それってシュレディンガーの猫っぽいね
0608デフォルトの名無しさん2006/11/27(月) 01:15:38
>>607
ふふふ。覚えた言葉をうれしそうに遣いたがる。
0609デフォルトの名無しさん2006/11/27(月) 01:40:24
きもいよ
0610デフォルトの名無しさん2006/11/27(月) 01:56:09
>>605
オマイの日本語お勉強スレじゃねーんだよ
0611デフォルトの名無しさん2006/11/27(月) 01:56:43
いきなり横やりスマソ。

mobileでのwebアプリを作るにあたって、DBから値を引っ張ってきてそれを元にmobilelistitemを作成し、selectionlist.items.add(item)してるんだが、通常はこんなことしないんだろうか?

itemの横にcheckboxをつけてそこを選択してから確認ボタンを押すとチェックのついた項目だけ何か操作を行う、といったことがしたいんだが…。
selectionlistに動的にitemを加える作業をすると確認ボタンを押したときにエラーが起こる。indexが不正だというエラーが出る。なんでだろう?
0612デフォルトの名無しさん2006/11/27(月) 03:22:03
>>610
はん、おかしいことにおかしいといったら日本語云々だあ?
たく最近はこんなのばっかだな。
こっちはちゃんと説明してるってのにな。
それともこんな簡単な内容すら理解できん馬鹿だったか。
0613デフォルトの名無しさん2006/11/27(月) 03:24:16
>>611
簡潔におながいします
0614デフォルトの名無しさん2006/11/27(月) 06:29:56
>>612
まだこんなに煽りに過敏に反応する奴がいるのか。
まだまだ捨てたもんじゃないなwww
06154742006/11/27(月) 09:13:01
なおりました。
06164742006/11/27(月) 10:16:59
word2003の再インストールを2回、
word2003の修復を3回、
word2003の再インストール直後のofficeのアップデート1回

これで直りました。
特に、「word2003の再インストール直後のofficeのアップデート1回
」が決め手だったような気がしました。

みなさんも、僕と同じエラーが出たときには、
決して、OSの再インスコなどせずに、
word2003の再インスコなどを試してみてください。

それじゃ、さようなら、ごきげんよう、へけけのけ。
0617デフォルトの名無しさん2006/11/27(月) 11:00:43
>600

一つ質問だが、>600はintとかstringとかを使ってて
「滅させる処理書かないとと構文的にシンメトリーじゃないじゃん」とか
考えてる?
06186112006/11/27(月) 12:39:33
>>613
要するにmobile用のフォームでチェックボックスが使いたいんです。そこでselectionlistを使おうと思ったんだけど、普通これってすでに中に入るitemが決まってるもんじゃん?例えば男と女を選択させるみたいな。

でも今回はそうじゃなくてDBからとってきたものにチェックボックスをつけて選択させたいのよ。
0619デフォルトの名無しさん2006/11/27(月) 15:44:02
Listviewのスクロール位置を取得する事は可能でしょうか?
具体的に言えば、リストを二つ並べて、右側のリストをスクロールさせた際に、
左側のリストも連動してスクロールするようなプログラムを作りたいのですが…
WndProcからスクロールイベントを取得する事はできたのですが、そこで行き詰ってしまいましたm(_ _)m
0620デフォルトの名無しさん2006/11/27(月) 16:37:07
C#3.0は来年末以降らしい(´・ω・`)
0621デフォルトの名無しさん2006/11/27(月) 16:47:20
>>619
ListView.TopItem
0622デフォルトの名無しさん2006/11/27(月) 21:38:56
>>619
インデックス取るだけならLVM_GETTOPINDEX投げるほうが速いかもね。
0623デフォルトの名無しさん2006/11/27(月) 22:44:35
SortedDictionary<string,int> m_dic;
でKeyの長さでソートするようにSortedDictionary<string,int>のコンストラクタに指定したいんですけど
どうすればいいですか?
0624デフォルトの名無しさん2006/11/27(月) 22:52:12
m_
なんてVC++を使っているように思えるが、そんな人にする質問にはとても
思えん
0625デフォルトの名無しさん2006/11/27(月) 23:13:25
IComparer<string> を実装させたクラスを定義すれば良いんだよ
0626デフォルトの名無しさん2006/11/28(火) 00:49:03
ラクダ式ってどうなったの?
0627デフォルトの名無しさん2006/11/28(火) 01:00:29
普通にメソッドのパラメータとかで使われてるぞ
後は private なインスタンスフィールド辺りだな
0628デフォルトの名無しさん2006/11/28(火) 01:01:10
どうなったって訊かれてもなあ。
CLRはフィールドとメソッドの引数が小ラクダ式で、その他は大ラクダ式になってるが。
0629デフォルトの名無しさん2006/11/28(火) 01:13:50
おれマルボロのほうが好きだぜ?
0630デフォルトの名無しさん2006/11/28(火) 01:16:55
俺は巨乳好き
0631デフォルトの名無しさん2006/11/28(火) 01:27:07
>>626
http://www.atmarkit.co.jp/fdotnet/special/pdc2005_02/pdc2005_02_02.html
0632デフォルトの名無しさん2006/11/28(火) 10:22:35
System.Net.Mail.SmtpClientのSendAsyncメソッドなのですが、ヘルプを読むと、
>SmtpException
>SMTP サーバーへの接続に失敗しました。
>または
>認証に失敗しました。
>または
>操作がタイムアウトしました。
とあります。
認証失敗等はともかく、このメソッドでタイムアウトが原因でこの例外が発生することはあり得るのでしょうか?
0633デフォルトの名無しさん2006/11/28(火) 10:41:41
Windows Formsのボタンからバッチ処理を別スレッドで走らせるんですが、
別スレッドで起きた冷害はボタン(元スレ)のcatchでは処理できないですよね。
別スレッドの例外をフォーム側で処理したい(メッセージボックスを出すとか)
のですが、どうしたらいいですか?
0634デフォルトの名無しさん2006/11/28(火) 10:43:35
>>633
Application.ThreadException
0635デフォルトの名無しさん2006/11/28(火) 14:26:36
VisualStudioのようなインテリセンスを持つエディタを実装したいのですが
これを容易にするコントロールなどは標準で提供されているのでしょうか?
0636デフォルトの名無しさん2006/11/28(火) 14:31:30
>>634
なんでもそれで対応出来ると思ってんのか?
0637デフォルトの名無しさん2006/11/28(火) 14:43:38
>>633
スレッド内で発生した例外はそのスレッドでcatchする。
必要なら UI スレッド側のフォームのメソッドをinvokeするとかしてユーザに通知する。
処理完了の通知と何ら変わるトコないですよ。
0638デフォルトの名無しさん2006/11/28(火) 16:09:32
bool受け取るDisposeは不要だと思うのですが
0639デフォルトの名無しさん2006/11/28(火) 16:31:39
>>638
ユーザはtrueを渡して、ランタイムライブラリはfalseを渡すことになっている。
0640デフォルトの名無しさん2006/11/28(火) 16:43:30
Il offre sa confiance et son amour.
0641デフォルトの名無しさん2006/11/28(火) 17:40:35
AxWebBrowserのBeforeNavigate2でpostデータ取得したいんだけど
postDataってどーやれば文字列型に変換できますか?
0642デフォルトの名無しさん2006/11/28(火) 18:03:51
string s = null;
if(e.postData != null)
{
s = System.Text.Encoding.ASCII.GetString((byte[])e.postData);
}
てな具合で文字列に変換できる
0643デフォルトの名無しさん2006/11/28(火) 18:07:07
>>641
642に加えてmime-encodingかURLEncodeかされてると思うんで、
そいつをdecodeして素のbyte[]にしたうえで、適切なencodingで
GetStringする。
0644デフォルトの名無しさん2006/11/28(火) 18:11:32
>>642,643
641です
ありがとうございます
今のところ、アルファベットと数字だけなので642の方法でうまくいきました
日本語使うようになったら643の方法にトライします
0645デフォルトの名無しさん2006/11/28(火) 21:36:37
すいません、デザインパターンの実装例を探していて見つけたのですが、
文中でカタログの例と言っている彼の論理C#コード(脳内コード)をどなたか補完して頂けないでしょうか。
(できれば次のイベントを使った例まで行きたいのですがここでつまづいています)

ttp://vsug.jp/tabid/63/forumid/51/postid/3057/view/topic/Default.aspx
0646デフォルトの名無しさん2006/11/28(火) 22:26:11
>>645
俺はこういう風に理解した。
----

interface IHogeFactory
{
    IHoge CreateInstance();
}

static class HogeCatalog
{
    private static Dictonary<Type, IHogeFactory> catalog = new Dictonary<Type, IHogeFactory>();
    public static IHoge CreateInstance( Type type )
    {
        return catalog[type].CreateInstance();
    }
    public static void Regitster( Type type, IHogeFactory factory ) {
        catalog[type] = factory;
    }
}

class HogeA: IHoge { }

class HogeFactoryA : IHogeFactory
{
    public static HogeFactoryA() { HogeCatalog.Register( typeof(HogeA), new HogeFactoryA(); }
    public IHoge CreateInstance() { return new HogeA(); }
}
0647デフォルトの名無しさん2006/11/28(火) 22:40:43
>>638
ファイナライザでは実行順序が不定のため他のマネージ参照に
触ってはいけないから、ユーザーコードから呼び出されたDisposeと
ファイナライザから呼び出されたDipsoseで処理を分ける必要がある。

C++/CLIでもデストラクタ、ファイナライザはこのパターンを利用して
ILを生成している。雑談だが。
0648デフォルトの名無しさん2006/11/28(火) 22:41:15
最近、C#をはじめたのですが困っています。

一つのFormで2つのBackgroundWorkerをつかっているのですが、
Formでの処理が重ならないように、どこかで同期させたいのですが、
タイミングは手動でとるしかないのでしょうか?

手動でとるにはどのような方法がありますか?
ManualResetEvent などをうまく使うのでしょうか?

どなたか教えてもらえませんか?

0649デフォルトの名無しさん2006/11/28(火) 22:42:31
>>646
その程度ならこれくらいでいいんじゃねーかな。

IHoge CreateInstance<T>() where T : IHoge, new()
{
return new T();
}
0650デフォルトの名無しさん2006/11/28(火) 22:47:01
>>648
Invokeじゃだめなん?
0651デフォルトの名無しさん2006/11/28(火) 22:50:36
>>649
Tをハードコーディングできるなら、直接newするだろ
0652デフォルトの名無しさん2006/11/28(火) 23:07:57
>>649
わろた。
newって書くのとかわんねー
ちなみに
Activator.CteateInstance<T>()
てのが標準であるぞw

0653デフォルトの名無しさん2006/11/28(火) 23:08:35
そもそも BackgroundWorker の(GUI に触れる)イベントでは
処理はメインスレッドで行われるので同時にってことはあり得ない
0654デフォルトの名無しさん2006/11/28(火) 23:16:57
インターフェイスはなんに使うですぅ?
0655デフォルトの名無しさん2006/11/28(火) 23:27:35
インターフェイスに使う
0656デフォルトの名無しさん2006/11/28(火) 23:28:32
C#でメモリマップト(File Mappingモード)は使えますか?
使えるならその方法を教えてください
0657デフォルトの名無しさん2006/11/28(火) 23:30:34
>>654
翡翠石よ

クラスを継承させたりした場合で、必ず呼び出してほしい
メソッドがある場合に、インターフェースを入れると、
コンパイラが警告を入れてくれる。
0658デフォルトの名無しさん2006/11/28(火) 23:31:04
ピンボケ
0659デフォルトの名無しさん2006/11/28(火) 23:36:31
>>657
そんな事初めて聞いたわ
0660デフォルトの名無しさん2006/11/28(火) 23:45:14
warota
0661デフォルトの名無しさん2006/11/29(水) 00:41:14
>>655

多重継承の代わりじゃないのかな?くるみちゃん
0662デフォルトの名無しさん2006/11/29(水) 00:43:50
>>656
Microsoft.Win32.NativeMethods.CreateFileMappingを参考に自前でDllImport汁
0663デフォルトの名無しさん2006/11/29(水) 01:19:39
>>635
やめておけ

エディタって何の編集するするものか知らんが
テキストエディタは相当難しい。
3Dグラフィックのほうがはるかに簡単。
つか、.NETで実用的なテキストエディタを作ることは不可能と思って
間違いない。
0664デフォルトの名無しさん2006/11/29(水) 01:31:33
user.confing の保存場所なんなんだよーう、ちくしょう
SettingProvider から継承して作れって・・・
LocalFileSettingsProvider のタコ!!!

・・・愚痴でした。

みんなは、どうやってる?
アプリケーションの設定保存
0665デフォルトの名無しさん2006/11/29(水) 01:40:37
レジストリ
0666デフォルトの名無しさん2006/11/29(水) 01:47:57
当然脳ミソ
0667デフォルトの名無しさん2006/11/29(水) 07:19:29
>>663 んなこたーない。
0668デフォルトの名無しさん2006/11/29(水) 12:21:17
>>666
壊れたらどうするのよ
0669デフォルトの名無しさん2006/11/29(水) 15:51:22
>>668
サルベージする
0670デフォルトの名無しさん2006/11/29(水) 15:53:34
アプリケーションの設定を保存する
http://dobon.net/vb/dotnet/programing/storeappsettings.html

上のサイトで紹介されているアプリケーションの設定を保持するクラスを、”俺”ライブラリに追加しようとして難儀しています。
各々の静的メソッドとシングルトンであることを基本クラスで定義しておき、これを継承するクラスでシリアライズするプロパティを追加したいのです。
試行錯誤してみましたが、「静的メソッドとシングルトンであること」を基本クラスでうまく定義できなくて行き詰っています。
最近ようやくOOPを意識しはじめたので的外れな質問かもしれませんが、指針についてアドバイス頂ければと思います。
0671デフォルトの名無しさん2006/11/29(水) 16:37:53
つーかシングルトンクラスを継承だと?
その時点で破綻してないか?
0672デフォルトの名無しさん2006/11/29(水) 17:07:36
>>671
Orz
恥の書き捨てで伺いますが、それなら継承後のクラスをシングルトンにするのは如何なものなのでしょうか。
でも、それだと当初の目論見から外れてめんどうになりそうだなぁ。
0673デフォルトの名無しさん2006/11/29(水) 17:14:28
>>672
その程度のシングルトンなら
class MyClass {
 static MyClass _cur = new MyClass();
 static public MyClass Current {
  get { return _cur; }
 }
}
でいいんじゃないか?
何のためにがやりたいのか日本語で普通に説明してみて。
0674デフォルトの名無しさん2006/11/29(水) 17:27:33
>>673
>>670のURLを参考に、「アプリの設定を保持するためのクラス」を作りました。
シリアライズしたいオブジェクトをプロパティに持たせて使います。
シングルトンなのは「設定が複数できるとマズいから」です。

それを使ってみて便利だったので、シリアライズ用のメソッドと、保存する値を書き込むプロパティを別個のクラスにしたいなと思いました。
ここまで書いておもったのだけど、シリアライズ用のメソッドがstaticである必要は特に無いのかもしれません。
派生したオブジェクトについてはインスタンスが複数できるとマズいけど、>>673で頂いたような手法で良いのかも…。
検討してみまふ。どうもありがとうございました。
0675デフォルトの名無しさん2006/11/29(水) 17:42:30
こういうとき、C#3.0ならExtension Methodを使うようになるんだろうな。
0676デフォルトの名無しさん2006/11/29(水) 18:53:41
VSからrichTextBoxにコピペして気付いたけど
VSってRTFでコピーできるんだね。
色がついてて驚いた。
06776642006/11/29(水) 20:46:21
ちなみに俺は670ではありません。

今まで俺Setting的 Singleton 使ってたけど、
.NET Framework 2.0 での System.Configuration.ApplicationSetting が用意されてるから
わざわざ自分でつくるのは、すでに「車輪の再発明」的かな、と思ったです。

Settings.cs のコンストラクタに、this.Upgrade() 入れておけば
バージョンアップの際、結構自動で管理してくれるみたいだし。

ただ、デフォルトの LocalFileSettingsProvider がタコだなーと
バージョンアップした時の、以前の user.config の扱い次第では
自分で Provider 実装か、LocalFileSettingProvider か、
そこまではよくわかってません。

ttp://msdn2.microsoft.com/ja-jp/library/ms181001(vs.80).aspx


# Mono を意識するなら、現時点では
# 俺Setting になるから、これがベストかどうかはわからない
06786562006/11/29(水) 21:00:40
>>662
ありがとう。やっぱりWin32API使うしかないんですかー。
その方法使います。どもども
06796452006/11/29(水) 21:17:51
>>646
レスが遅れて申し訳ありません。補完して頂き大変参考になりました。m(_ _)m
自分は2003なので、多少修正したのと返すクラスがシングルトンでもOKなように
改造しました。一応載せますです。

   public interface IHoge
   {
      void ShowMessage(string str);
   }

   public interface IHogeFactory
   {
      IHoge CreateInstance();
   }

   public sealed class HogeCatalog
   {
      private static Hashtable catalog = new Hashtable();

      public static IHoge CreateInstance( string key )
      {
         return ((IHogeFactory)catalog[key]).CreateInstance();
      }
      public static void Register( string key, IHogeFactory factory )
      {
         catalog[key] = factory;
      }
      private HogeCatalog(){}
   }

0680645(続き)2006/11/29(水) 21:18:15
   public sealed class HogeFactoryA : IHogeFactory
   {
      public static void Register() { HogeCatalog.Register( "A", new HogeFactoryA()); }
      public IHoge CreateInstance() { return HogeA.CreateInstance(); }
      private HogeFactoryA(){}
   }

   sealed class HogeA: IHoge
   {
      private static HogeA myclass = new HogeA();
      public void ShowMessage(string str)
      {
         Console.WriteLine(str);
      }
      public static HogeA CreateInstance()
      {
         return myclass;
      }
      private HogeA(){}
   }

   [STAThread]
   static void Main()
   {

     HogeFactoryA.Register();

     IHoge hoge = HogeCatalog.CreateInstance("A");

     hoge.ShowMessage("ぬるぽ");
         
   }
0681デフォルトの名無しさん2006/11/30(木) 00:37:44
Visual C# 2005のフリー版をつかってるんですが、
これってEclipseのような自動インポート機能ってないのでしょうか?
いちいち
using
を自分で書いていかなきゃだめっすか?
0682デフォルトの名無しさん2006/11/30(木) 00:54:32
スマートタグで using を追加してくれるでしょ
0683デフォルトの名無しさん2006/11/30(木) 00:54:54
自分で発見shift+alt+F10ですか。
0684デフォルトの名無しさん2006/11/30(木) 01:18:32
>>681
Ctrl+スペース
0685デフォルトの名無しさん2006/11/30(木) 01:23:01
>>684
それだと
using
追加知れくれませんでした。
eclipseなら追加してくれるんだけど・・。
0686デフォルトの名無しさん2006/11/30(木) 01:34:43
eclipseにしとけ
0687デフォルトの名無しさん2006/11/30(木) 02:00:34
VSは最初にusingを記述するスタイルじゃなくて、
最初に使うときに型名を明示的に書かせてusingに追加させるスタイルなんだね
0688デフォルトの名無しさん2006/11/30(木) 08:44:20
パスで指定された形にたいしてぼかした影のようなものをつけたいんですがいまいちわかりません。
パスから鋭角を丸める→パスグラディエントブラシ?
0689デフォルトの名無しさん2006/11/30(木) 10:28:28
>>685
ReSharperっつーアドオンいれるとQuickFixでusingの追加できる。
けど、アドオンってことでVS2005 Expressだと無理で、ReShaperも有料だ。
ReSharperいれると、リファクタリングもeclipseレベルにまで拡張される。
0690デフォルトの名無しさん2006/11/30(木) 17:37:21
ソース今印刷したんだけど、印刷のときは表示のときのカラー設定とか一切無視するのね・・・




なんつーか( ゚Д゚)<氏ね!
0691デフォルトの名無しさん2006/11/30(木) 17:53:21
>>690
印刷と表示と色の設定で別々になってるよ
0692デフォルトの名無しさん2006/11/30(木) 18:10:16
>>691
それ設計思想が間違ってるだろう。
■ このスレッドは過去ログ倉庫に格納されています