1 名前:デフォルトの名無しさん [03/10/04 01:02] このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。 前スレッドはこちら pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4) pc2.2ch.net/test/read.cgi/tech/1047210828/l50 (Part3) pc2.2ch.net/test/read.cgi/tech/1035895873/l50 (Part2) pc2.2ch.net/test/read.cgi/tech/1023766485/l50
196 名前:デフォルトの名無しさん mailto:sage [04/07/27 20:31] どうでもいいがその例だとArgumentOutOfRangeExceptionの方が妥当だな。
197 名前:デフォルトの名無しさん mailto:sage [04/07/31 15:21] >>195 public int hoge { set { if (1 <= value && value <= 100) hoge = value; else throw new ArgumentOutOfRangeException(); } } ちょっと無理っぽいが、通るのか?
198 名前:デフォルトの名無しさん [04/07/31 18:44] GDI+はGDIより遅いって本当ですか?
199 名前:デフォルトの名無しさん mailto:sage [04/07/31 19:54] >>198 自分で作って確かめろ、タコ
200 名前:デフォルトの名無しさん mailto:sage [04/07/31 20:58] >ちょっと無理っぽいが、通るのか? なんで?
201 名前:198 [04/08/01 09:38] >199 GDIはBitbltで GDI+はGraphics.DrawImageで 確かめて良いですか?
202 名前:デフォルトの名無しさん mailto:sage [04/08/01 11:55] GDI+は長角まで待つべし
203 名前:デフォルトの名無しさん mailto:sage [04/08/01 12:31] リフレクションを使ってラムダ式を動的に作りたいのですが、 参考になるHPや良い方法があったら教えてください。 例えば、正規分布関数のクラスが、以下のように存在していて public class DistributionFunctions { public static dobule Normal( double x , double a , double v ) { return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ; } ... } やりたい事は、 delegate double DoubleToDoubleDelegate( double x ) ; public class DistributionDelegates { static DoubleToDoubleDelegate MakeNormal( double a , double v ) { ここに手際よく大量生産できるコード } } 使い方は void hogehogeMethod() { DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ; y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される }
204 名前:デフォルトの名無しさん mailto:sage [04/08/01 16:03] >>203 よくわからんけど、こんなこと↓がしたいの? using System; public class DistributionFunctions { double a; double v; public DistributionFunctions(double x, double y){ a = x; v = y; } public double Normal( double x ) { return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ; } } delegate double DoubleToDoubleDelegate( double x ); class Hoge { static DoubleToDoubleDelegate MakeNormal( double a , double v ) { //ここに手際よく大量生産できるコード DistributionFunctions f = new DistributionFunctions(a, v); return new DoubleToDoubleDelegate(f.Normal); } static void Main() { DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ; double y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される Console.WriteLine("y = {0}", y); } }
205 名前:204 mailto:sage [04/08/01 16:27] public class DistributionFunctions { の{の前に全角スペースが入ってた。。。鬱
206 名前:デフォルトの名無しさん mailto:sage [04/08/01 16:28] C#でGDIをつかうすべはあるのか?APIの直たたきならGDIをつかえる?
207 名前:デフォルトの名無しさん mailto:sage [04/08/01 18:33] >>204 方法は問わないんですが、そうです、そんな感じです。 そこで、関数の引数を確保するクラスを作る必要がありますよね。 関数の数が多くて、これを全部自動生成してしまいたいんです。
208 名前:204 mailto:sage [04/08/01 20:00] >>207 > そこで、関数の引数を確保するクラスを作る必要がありますよね。 > 関数の数が多くて、これを全部自動生成してしまいたいんです。 204の例を使っても、好きなだけ関数は作れるけど。。。↓こういうことではない? static void Main() { double d1 = 1.0; // 数字は適当 double d2 = 1.0; // 数字は適当 DoubleToDoubleDelegate[,] df = new DoubleToDoubleDelegate[10,10]; for(int i=0; i < 10; i++, d1 += 0.2){ for(int j=0; j < 10; j++, d2 += 0.2){ df[i,j] = MakeNormal( d1, d2); } } for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ double y = df[i,j]( 0.0 ) ; Console.WriteLine("y = {0}", y); } } }
209 名前:デフォルトの名無しさん mailto:sage [04/08/01 21:52] >>208 ども、お手数掛けてすみません。 対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、 今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え 第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。 しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、 色々探している内にリフレクションという物を使ってみようかと考えていました。 さっそく始めてみたのですが、これがチュートリアルの良いページがなかなか見つからなくて・・・・ ちなみに僕自身、ここに書き込む前に色々考えたのですが、 一般的なC#の構文を使った範囲内ではおそらく良い解決方法はないだろうというのが結論でした。
210 名前:デフォルトの名無しさん [04/08/01 22:20] はじめまして、 C#でデータベースに関することを勉強しています。 ボタンを押すとアクセスに「123」というデータを追加するプログラムを書いています。 壁にぶつかりましたので、ご指導していただけませんか。 odbcDataAdapter1などの設定し、以下のボタンの内容を書きました。 odbcConnection1.Open(); odbcDataAdapter1.InsertCommand.Parameters["@ab"].Value="123"; odbcDataAdapter1.InsertCommand.ExecuteNonQuery(); odbcDataAdapter1.Fill(dataSet11); odbcConnection1.Close(); すると 'System.IndexOutOfRangeException' のハンドルされていない例外が system.data.dll で発生しました。
211 名前:デフォルトの名無しさん mailto:sage [04/08/01 22:24] > 対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、 > 今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え > 第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。 これが結構まっとうな方法な気もしますが。。。 もしかして、パラメータが変わるだけではなく、どんな関数を作るかは あらかじめ決まってない、ってことですか? C++でいえば、boost::lambdaみたいなことをしたいのかなぁ? > しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、 > 色々探している内にリフレクションという物を使ってみようかと考えていました。 リフレクションで出来るかどうかはわかりませんが、一応参考に。 members.jcom.home.ne.jp/1213687801/cs/reflection/reflection4.html www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemreflectionemittypebuilderclasstopic.asp
212 名前:デフォルトの名無しさん mailto:sage [04/08/01 23:01] >>210 ここにある例が参考になりませんかね。 www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlclientsqldataadapterclassinsertcommandtopic.asp
213 名前:デフォルトの名無しさん mailto:sage [04/08/02 08:36] 普通に IDbCommand.ExecuteNonquery() はダメなの?
214 名前:デフォルトの名無しさん [04/08/03 21:03] プログラムの構造をどうしたらいいのかが分かりません。 例えば、オセロプログラムを考えるとします。 オセロのマスの部分にButtonから継承したクラスMasuを使います。 Masuを8*8個集めた配列をBoardとします。 オセロゲーム ━━ Board (集約する)━━ Masu という風になっていますが、 Masuがクリックされた時に 隣のマスをひっくり返すかどうか走査するとしても、 Masuからは隣のMasuなんて分かりませんよね? だからBoardに頼んで調べてもらいたいわけですが どうやったらそうできるのかがわからないです。どうしたらいいのですか?
215 名前:デフォルトの名無しさん mailto:sage [04/08/03 21:07] X 配列Board O クラスBoard でした
216 名前:デフォルトの名無しさん mailto:sage [04/08/03 21:43] >>214 Masu に必要な機能は、 ・そのマスの内容を保持 ・画面に描画する ・クリックされたことを、Board に通知する の3つでいいんじゃない? ひっくり返すのは、Board でやればいい。
217 名前:デフォルトの名無しさん [04/08/03 23:21] >>216 その三番目のboardに通知する方法が分からんですよ。
218 名前:デフォルトの名無しさん mailto:sage [04/08/03 23:32] >>217 Clickイベント。
219 名前:デフォルトの名無しさん mailto:sage [04/08/03 23:51] >>217 boardのメソッドの引数に自分を渡せばいい。
220 名前:デフォルトの名無しさん mailto:sage [04/08/04 00:18] >214 もっと PlayerとかTurnMasterとかJudgeとかつくれや。Masuはいらん
221 名前:デフォルトの名無しさん mailto:sage [04/08/04 00:53] >>220 高度すぎ。質問者をみて答えてやれよ。
222 名前:デフォルトの名無しさん mailto:sage [04/08/04 00:56] >221 書き込んだ後そう思った.すいません。 Masu作るときにボードを引数で渡してそれ使う.それかイベント
223 名前:デフォルトの名無しさん [04/08/04 23:39] こういうのってできるかな? void Hoge( params object [] arg ) の ref バージョンで void Hoge( ref object arg0 , ref object arg1 , ref object arg2 ... ) ; の様な物。 必要個数分オーバーロードするしかないかな?
224 名前:デフォルトの名無しさん [04/08/05 00:33] コントロールのクライアント領域について質問です。 以下のような Panel を継承したクラスをつくりました。 public class PanelEx : System.Windows.Forms.Panel { public PanelEx() { } protected override void OnPaint(PaintEventArgs e) { base.OnPaint (e); Pen p = new Pen(Color.Black, 1); e.Graphics.DrawRectangle(p, this.ClientRectangle); p.Dispose(); } } この PanelEX クラスのインスタンスを、普通に Form1 の コンストラクタ内で生成したところ、画面には PanelEx の 左側と上側にしか線がひかれません。 なぜでしょうか?また、どうすればちゃんと矩形が描かれますか?
225 名前:デフォルトの名無しさん mailto:sage [04/08/05 00:55] >>224 はみ出て見えないので矩形を小さく、例えば幅と高さを-1にしたりする。
226 名前:224 [04/08/05 01:29] >>225 ええええー。なぜそんな仕様になってるんでしょうか?
227 名前:デフォルトの名無しさん [04/08/05 02:00] >>226 厨避けの為。
228 名前:デフォルトの名無しさん mailto:sage [04/08/05 02:03] >>226 別におかしくないよ。 www.microsoft.com/japan/msdn/library/ja/jpdnprogwincsharp/htm/chapter15.asp?frame=true
229 名前:デフォルトの名無しさん mailto:sage [04/08/05 10:20] >>220 ウヒャー 220さんの高度な設計だと、どんな風になるんですか? コードをつけながら説明してほしい・・・
230 名前:デフォルトの名無しさん mailto:sage [04/08/05 19:29] >>229 高度 コード !?
231 名前:デフォルトの名無しさん [04/08/05 22:23] 超基本で悪いんだけど、 int i = Console.Read(); Console.WriteLine(i); これでたとえば「2」を入力すると出力が「50」なんてなるんですが、なぜなのでしょうか?
232 名前:デフォルトの名無しさん mailto:sage [04/08/05 22:31] >>231 コンピュータの中では、「文字」ってのは一定のルールで数字の列に変換されて扱われてます。 このルールのことをエンコーディング、数字(の列)のことを文字コードと呼んだりします。 んで、文字の "2" に対応するコードが 50 (16進数で 0x32) なわけです。 ファイルやネットワーク等での読み書きは、byte の列を使って行われるのが基本で、 .Net Framework で文字列からこのバイト列に(またはその逆に)変換するには、 Encoding クラス(のインスタンス)を用います。
233 名前:デフォルトの名無しさん mailto:sage [04/08/05 22:31] P.S. "2"という文字列から、数字の 2 に変換するには、Int32.Parse() などを使います。
234 名前:231 mailto:sage [04/08/05 22:36] >>232 文字コードを実数値にしないといけないんですね。 丁寧な即レスありがとうございます。
235 名前:デフォルトの名無しさん mailto:sage [04/08/06 00:26] 久しぶりにきたが、なんだかいいスレになってるじゃねーか!
236 名前:デフォルトの名無しさん mailto:sage [04/08/06 07:42] コンソールはほとんど勉強してなかったから試してみたんだけど char c = (char)Console.Read(); とすれば、そのまま表示できまっせ。MSDNだとintを返すことになってるから まぎわらしいんだけどね。
237 名前:デフォルトの名無しさん [04/08/06 07:43] こんにちは 今画像のサムネイル保存用に複数画像をまとめてひとつの ファイルにしようとしています。 Aファイルサイズ・Aファイル・Bファイルサイズ・Bファイル・・・ みたいな感じ合成し、インデックスで呼び出そうかと思っています。 で、ふと思ったのですが、そういう複数のファイルをまとめてしまう クラスって既にあったりするのでしょうか。 よろしければお教えください。よろしくお願いいたします。
238 名前:デフォルトの名無しさん mailto:sage [04/08/06 09:33] Bitmap imageA = new Bitmap("A.bmp"); Bitmap imageB = new Bitmap("B.bmp"); Bitmap imageC = new Bitmap("C.bmp"); Bitmap bmp = new Bitmap(300, 100); Graphics g = Graphics.FromImage(bmp); g.DrawImage(imageA, 0, 0); g.DrawImage(imageB, 100, 0); g.DrawImage(imageC, 200, 0); g.Dispose(); bmp.Save("ABC.bmp"); bmp.Dispose(); imageA.Dispose(); imageB.Dispose(); imageC.Dispose();
239 名前:デフォルトの名無しさん [04/08/06 10:42] そうきましたか・・・ Hash的に名前で簡単にストリームを取り出せるような 仕組みが既存クラスにないかなーとか思っていたのでした。 やはり頑張って自分で実装してみます。 ありがとうございました。
240 名前:デフォルトの名無しさん mailto:sage [04/08/06 11:04] 参照設定でvjslib.dll(Microsoft Visual J# .NET Class Library)を追加して、java.util.zipで
241 名前:デフォルトの名無しさん [04/08/06 11:42] !!! なるほど! 早速やってみます。 ありがとうございました!
242 名前:デフォルトの名無しさん [04/08/06 23:07] DirectX 9.0 SDK (Summer 2004)の日本語ドキュメントをインストールしたんだが、 VS.NET2003に反映されないのです。 なんでなんでしょう・・・そういう方他にいますか?
243 名前:最凶VB厨房 mailto:sage [04/08/06 23:20] まずは再起動
244 名前:242 mailto:sage [04/08/06 23:24] >>243 再起動もしたんですがダメでした。
245 名前:最凶VB厨房 mailto:sage [04/08/06 23:28] SDK本体は入れてるのよな? まっわからんけど
246 名前:デフォルトの名無しさん mailto:sage [04/08/06 23:32] >>242 フィルタか?
247 名前:242 mailto:sage [04/08/06 23:52] 英語版ヘルプははいってるんですが・・・ フィルタもなしになってます。 本来ならVS.NET起動時に「ヘルプを反映中・・」とかでますよね?
248 名前:242 mailto:sage [04/08/07 01:01] 連結ヘルプ コレクション マネージャで更新できました。 お騒がせしました。(・∀・)
249 名前:デフォルトの名無しさん mailto:sage [04/08/07 11:42] >>242 DirectX9 SDK Summer2004の日本語ドキュメントってもう出てたの?
250 名前:デフォルトの名無しさん mailto:sage [04/08/07 11:51] >>249 変な書き方しちゃいましたね。 2004入れてから日本語ドキュメント入れたら〜でした。スマソ
251 名前:デフォルトの名無しさん [04/08/07 13:25] 外部プロセスに確保した領域をPtrToStructureすると例外が発生するのは何故でしょうか。どうかご教授お願いします。 using HANDLE=System.IntPtr;using LPVOID=System.IntPtr;using SIZE_T=System.UInt32;using DWORD=System.UInt32; class CMyApp:System.Windows.Forms.Form { [System.Runtime.InteropServices.DllImportAttribute("kernel32")] static extern LPVOID VirtualAllocEx(HANDLE hProcess,LPVOID lpAddress,SIZE_T dwSize,DWORD flAllocationType,DWORD flProtect); DWORD PAGE_READWRITE=0x04; DWORD MEM_COMMIT= 0x1000; static void Main() { System.Windows.Forms.Application.Run(new CMyApp()); } CMyApp() { this.Click+=new System.EventHandler(OnClick); } void OnClick(object sender,System.EventArgs e) { LPVOID 自分側の領域=VirtualAllocEx(System.Diagnostics.Process.GetCurrentProcess().Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE); LPVOID 他人側の領域=new LPVOID(); foreach(System.Diagnostics.Process inc in System.Diagnostics.Process.GetProcesses()) if("Explorer"==inc.ProcessName) 他人側の領域=VirtualAllocEx(inc.Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE); System.Runtime.InteropServices.Marshal.PtrToStructure(自分側の領域,typeof(System.TimeSpan));//自分側の領域では例外は発生しない System.Windows.Forms.MessageBox.Show("次で例外発生"); System.Runtime.InteropServices.Marshal.PtrToStructure(他人側の領域,typeof(System.TimeSpan)); } }
252 名前:デフォルトの名無しさん mailto:sage [04/08/07 14:35] >>251 非Managedなプロセス空間にManagedな構造体を確保する意味がさっぱりわからないんだが。 ttp://dotnetjunkies.com/WebLog/chris.taylor/archive/2004/05/31/14828.aspx とりあえず外部プロセスへのちょっかいの参照。
253 名前:251 [04/08/07 15:56] 252さんアドバイスありがとうございます。 これをやりたい理由は、興味本位で出来るかどうか試したかっただけです。 とりあえず上のURLをよく読んで見ます。
254 名前:デフォルトの名無しさん mailto:sage [04/08/07 18:02] おまいら、コールバックにデリゲートとインターフェースの どっち使ってる? JavaのGUIのリスナーみたいなケースなら、デリゲートの 方が何もしないメソッドまで記述しなくて済むし効率いいかな。
255 名前:デフォルトの名無しさん mailto:sage [04/08/07 18:30] >>254 俺は Java 出身だから、ある程度一まとまりの処理をくっつけるならインターフェイス使っている デリゲートは纏まり間が無くて、単体なら遣いやすいけど微妙
256 名前:デフォルトの名無しさん mailto:sage [04/08/07 21:19] 俺はデリゲート派
257 名前:デフォルトの名無しさん mailto:sage [04/08/07 21:22] anonymous class は使えないが、anonymous delegate は使えるようになるので、 デリゲートにしておくのが無難なのでは。
258 名前:デフォルトの名無しさん mailto:sage [04/08/07 23:45] 非常に唐突な質問で申し訳ないが、C#で、というか.NET Frameworkで 各ドライブのボリュームラベルを取得するのってどうやるんだべさ? なんかAPI叩くしかなかったら非常に鬱なので教えてエロイ人!
259 名前:デフォルトの名無しさん mailto:sage [04/08/07 23:48] >>258 DriveInfo.VolumeLabel かな。 …… .NET Framework 2.0 だけど。
260 名前:デフォルトの名無しさん mailto:sage [04/08/08 00:00] 2.0で変更になったクラスの一覧ってないかな?
261 名前:デフォルトの名無しさん mailto:sage [04/08/08 00:06] >>259 やっぱ2.0になっちまうのか・・・。 何故こんな基本的なもんが実装されてないんだと小一(ry
262 名前:デフォルトの名無しさん mailto:sage [04/08/08 00:18] [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] extern static bool GetVolumeInformation( string RootPathName, StringBuilder VolumeNameBuffer, int VolumeNameSize, out uint VolumeSerialNumber, out uint MaximumComponentLength, out uint FileSystemFlags, StringBuilder FileSystemNameBuffer, int nFileSystemNameSize);
263 名前:デフォルトの名無しさん mailto:sage [04/08/08 00:20] >>262 トンクスエロイ人! やっぱこうやるか・・・。なんだかなぁ・・・
264 名前:デフォルトの名無しさん [04/08/08 02:15] Socket.Selectで64を超えるソケットリストを渡すと範囲外エラーになるのですが、 この64という制限は何によってかかっているでしょうか。 100に変更したりとかできないでしょうか。
265 名前:デフォルトの名無しさん [04/08/08 11:05] ボタンの配列(二次元)をクリックされた時に、何番のボタンがクリックされたかを調べるにはどうしたら良いですか? MyButtons[,] = new Button[3,5]; のように宣言されていて、forの二重ループの中で初期化して MyButtons[i,j].Click += new EventHandler(MyButtons_Click); みたいにしてみましたが、MyButtons_Clickの引数には別に「MyButtonsの何番目か」は渡されません。 どうしたらいいんですか
266 名前:デフォルトの名無しさん mailto:sage [04/08/08 11:11] >>265 ボタンの番号が固定のものなら、Button.Tag あたりに番号を押し込めておけば良いのでは?
267 名前:デフォルトの名無しさん mailto:sage [04/08/08 11:22] 自分が [2,1]だとしたら、[2,0]と[2,2]のボタンも操作したいんですよ。 なんとかなりませんかねえ
268 名前:デフォルトの名無しさん mailto:sage [04/08/08 11:28] >>267 ??? だからTagにint[]{2, 1}とかいれとけばいいんじゃないの? それがまずいというのならもっとわかりやすく説明してくれないと何がなにやら。
269 名前:デフォルトの名無しさん mailto:sage [04/08/08 11:34] >>268 あ、いま意味が分かりましたサンクス
270 名前:デフォルトの名無しさん mailto:sage [04/08/08 12:19] >>264 普通に1000とかできるじゃん……と思ったら.NET Framework2.0だった。 1.1の制限のようだ。
271 名前:デフォルトの名無しさん mailto:sage [04/08/08 12:27] >>264 OS の制限。WaitForMultipleObjects() できる最大数が64だから。 2.0 で表面的な制限は外れても、64を超えると効率は落ちる気がする。
272 名前:デフォルトの名無しさん mailto:sage [04/08/08 13:46] 簡単なベンチの結果、数が25以上になった辺りから緩やかに効率が落ちていった。 でも64周辺の境界は見あたらなかった。 ついでに1.0/1.1/2.0bも比較してみた。(スコアは低い方が優秀) 10でスコア 410 / 370 / 250 25でスコア 320 / 300 / 230 40でスコア 325 / 320 / 250 64でスコア 370 / 370 / 300 有意の差があるね。 1.1までとは違う機構を利用してたりするんじゃないかってくらい2.0は早い。 数が少ない時と多い時のスコアの分布とか。
273 名前:デフォルトの名無しさん [04/08/08 13:50] DataGridで ABC | DEF | GHI JKL | MNO | PQR STU | VWX | YZA BCD | EFG | HIJ こういう表の MNOとVWXだけ範囲指定させるみたいなことはできますか?
274 名前:264 mailto:sage [04/08/08 14:27] >>270-272 環境も書き忘れたのに本当にありがとうございます。 しかもWaitForMultipleObjectsとの関連、 ベンチまでしていただいてとても参考になりました。
275 名前:デフォルトの名無しさん mailto:sage [04/08/09 00:29] クラスのオブジェクトをコピーしたいんだけどよくわからんです。 AObject obj1 = obj2.Clone(); ってすればいいんだろうけど、 Cloneを書くときにCのmemcpyみたいなことってできないんでしょうか? それともいちいちフィールド一つずつ代入?
276 名前:デフォルトの名無しさん mailto:sage [04/08/09 00:38] Object.MemberwiseClone()
277 名前:275 mailto:sage [04/08/09 15:39] >>276 さんきゅ。 それつかってICloneableを実装するのが流儀なのだな。
278 名前:デフォルトの名無しさん mailto:sage [04/08/13 14:30] Point とかの Dispose できないヤツって、Dispose しなくていいの? Point aaa = new Point(0,0); aaa = new Point(1,1); aaa = new Point(2,2) とかしても大丈夫?
279 名前:デフォルトの名無しさん mailto:sage [04/08/13 15:17] >>278 int a = 0; a = 1; a = 2; とやることにためらいを覚える?
280 名前:デフォルトの名無しさん mailto:sage [04/08/14 04:46] char *p = malloc(100); p = malloc(100); p = malloc(100); とやることにはためらいを覚える。
281 名前:275 [04/08/15 15:23] Pointとかは構造体だからOKってことだよね。 正しいクラスはDisposeを持つべきってことか? 自前のやつも?
282 名前:デフォルトの名無しさん mailto:sage [04/08/15 15:30] >>281 もうちょっとGCを信用しようや。 Disposeが必要なのは基本的にUnmanagedなリソースを扱うクラスのみ。
283 名前:デフォルトの名無しさん mailto:sage [04/08/15 16:19] GCはいいんだけど、自分で自由に解放できないのがいまいち なんか「ゴミをゴミ箱に捨てると清掃員の仕事が減ってリストラされるから、ゴミは道に捨てるべき」とか言ってるみたい
284 名前:デフォルトの名無しさん mailto:sage [04/08/15 17:21] >>283 でも 道に捨てない −> 清掃員の仕事が減ってリストラ −> ごみを捨て忘れても綺麗にならない だから道に捨てるんだ。
285 名前:デフォルトの名無しさん [04/08/15 17:44] 環境はVS2003です。 ツール(T)→webページのビルドコメント(B) でドキュメントを作成したところ、「コード要素ページ operator + が不完全です。 」というエラーが取り除けなくて困っています。 だれか理由が分る人いますか? 以下問題のコードです。 /// <summary>テスト</summary> public class Test { /// <summary>足し算</summary> /// <param name="a">引数その1</param> /// <param name="b">引数その2</param> /// <returns>結果</returns> public static Test operator + ( Test a , Test b ) { return null ; } } >>282 Unmanagedというより、IO関連とかメモリーと連携するわけにはいかないオブジェクトが実装する必要があるのでは? OSのリソースはメモリーのようにいつでも解放できるリソースばかりではありませんから、そのようなリソースを握るオブジェクトには必然的に必要になります。 参照先がなくなった瞬間に即時開放されるタイプのクラスが定義できると、こんな面倒な事をしなくてすむんですが…… と、C++でスマートポインタを使っていると切に欲しくなる事があったりします。
286 名前:デフォルトの名無しさん mailto:sage [04/08/15 20:23] Disposeしたところでメモリに対しては何も出来ないんだから意味なし。 まあ、>>285 のように思う事はない事もない。
287 名前:デフォルトの名無しさん mailto:sage [04/08/15 20:29] 何らかのクリーンアップコードを実行したい場合なんかは、 Disposeを実装すべきである事が多い。 単に使用終了と言う意味合いだけなら、何もする必要なし。 ※Dispose実装したところでする事は何もない。 メモリに関しちゃほっとけばいいってのがGCのある環境での基本。
288 名前:デフォルトの名無しさん mailto:sage [04/08/15 20:30] using ステートメント(と IDisposable インタフェイス)ではどこがダメなの?
289 名前:デフォルトの名無しさん mailto:sage [04/08/15 20:47] 忘れる可能性があるから、強制できないから。 まあ、>>285 の言うようなスマートポインタみたいな物っていっても、 結局直接参照しか扱えないため、包含するクラスは全部そのタイプにしなけりゃ 意味がなかったりして、結局大げさになりすぎてうまくいかないかな。 GCとは相性が悪いね。
290 名前:デフォルトの名無しさん mailto:sage [04/08/17 19:02] MSNメッセンジャーでの「ほげほげがサインインしました」みたいなポップアップ ダイアログを作りたいのだが,ここにいる諸氏ならばどのようにして実現するか, 意見をお聞きしたい.
291 名前:デフォルトの名無しさん mailto:sage [04/08/17 19:45] 出来合いのコンポーネントを使う。
292 名前:デフォルトの名無しさん mailto:sage [04/08/17 20:47] >>290 他にもあるけど 窓の杜 - 【NEWS】米MS提供の.NET開発向けカスタムコントロール集「Visual Basic Power Pack」 www.forest.impress.co.jp/article/2004/06/24/vbpowerpack.html
293 名前:290 mailto:sage [04/08/17 21:46] >>292 激しく感謝.ありがとう.
294 名前:デフォルトの名無しさん [04/08/18 18:19] ファイルの末尾数バイトを削除する簡単な方法ってありますか? 一度全て読み込んだ後削除して上書きしか思いつかなくて。。。 消した後、そのファイルに追加を行うので、 消したい部分のみ上書きする方法でもいいのですが。。。
295 名前:デフォルトの名無しさん mailto:sage [04/08/18 18:37] 簡単……ねぇ? 上書きなら難しいことでもないけど。 int b = 5; FileStream fs = new FileStream("hoge.txt", FileMode.Open, FileAcceess.ReadWrite); fs.Position = fs.Length - b; StreamWriter sw = new StreamWriter(fs); 以下略
296 名前:294 mailto:sage [04/08/18 19:01] >>295 そっか TextWriter に、予め頭だししておいた Stream をぶち込めばよかったのか ありがとうございますそれでいけそうです