ふらっとC#,C♯,C#(初心者用) Part39
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part38
http://pc11.2ch.net/test/read.cgi/tech/1235864730/
いちおつ
4 :
デフォルトの名無しさん :2009/03/15(日) 02:26:04
前スレ
>>995 でも2〜3秒待たされますよ?フリーズしたような気分になります。
普通のソフトならほぼ一瞬なのですが。
前スレ
>>996 しばらくはいいのですが、時間が経つとメモリから消えてしまうのか、
再び起動が遅くなります。
1Z。 前スレ最後はキナ臭かったが、まったりと頼むよ。
2〜3秒待てないって完全にマジキチだろw
>>4 ああ、それならそのPCがどこかおかしいわ
俺のP8600の非力なノートで起動は1秒もかからないよ
一度他人のPCで起動してみたら?
.NETを疑うよりより統合失調症を疑った方が良いんじゃないか。
9 :
デフォルトの名無しさん :2009/03/15(日) 02:30:10
>>6 2〜3秒かかることが問題というか、非.NETアプリに比べて起動が圧倒的に遅いのが気になるんです。
実際これは自分だけじゃなくて、2chやどっかのブログでもよく言われていることだと思います。
結構大きな問題だと思うのですが…。
>>9 俺のP8600の非力なノートで起動は1秒もかからないよ
煽りが増えてきました。 どっから沸いてきてんだよ。
12 :
デフォルトの名無しさん :2009/03/15(日) 02:33:12
2〜3秒起動が遅れることで1万円の損失でも発生してるとかいうのなら問題かもしれん。 でもそういうわけじゃないだろ。 深呼吸でもすれば起動してるんだから。
大きな問題って何よ。 お前は「気になる」としか言ってないだろ。
>>12 誰も遅くないなんていってないよ
2〜3秒もかかるほど遅くないっていってんの
そんだけかかるってことは、そのソフトが何かおかしいか、あなたのPC環境がおかしい
だって俺のP8600の非力なノートでは1秒もかからないで起動するもの
16 :
デフォルトの名無しさん :2009/03/15(日) 02:36:40
>>13 いや、一回起動しておしまいならそれでいいんです。
でもメモ帳のように、起動と終了を気軽に繰り返すには気になる、ということです。
一度起動するとしばらくは再起動も速いですけど、しばらくすると元に戻ってしまいますし。
で、2秒間の損失はおいくらですか?
>>15 俺のPCでも2秒くらいかかるが。
VistaだったらOSロード時にコンポーネントを同時起動するから速いらしい。
アプリの中身にもよるだろうなあ
起動時にコードを山ほど詰め込んであれば当然遅くなるわけだし
>>18 SuperFetchってやつだっけ
そもそも起動と終了を頻繁に繰り返すような構造なら常駐させるべきだと思うけど。 前提からしておかしい。
>>18 E7200のXPだが一瞬だぜ
そのソフトだけじゃないの?
質問者は「どんな小さなアプリでも」だぜ?
Vista だとそこそこデスクトップでよく使うソフトは大体一瞬に なってしまうね。今試したら VS 2008 で一回目が 2-3 秒ぐら い、2回目だと 1秒ぐらいな感じだった。
>>20 それはないわ。
画像ビューアやテキストエディタまで常駐させろってか?
なんか伸びてると思ったら何だこれは・・・
頻繁だったら常駐でいいんじゃないか? 俺はテキストエディタを常駐させてるぞ
特定の使い方をすると重くなるって言うのもなんか外してる気がしないでもないなあ。
アンチウィルスで、いちいちスキャンする奴は起動が遅くなるときあるよな あと他のリソースがHDDを動作させてるとき これと別になんか起動が遅くなったなぁと思うときは、HDDの故障の前触れ
>>23 そういう使い方を前提としたソフトをC#で書くなら
考慮した書き方はいくらでもあるだろと言いたいのよ
真意が伝わりにくかった事は詫びよう
んで、起動は別にc++でもmfc使ってる限りは、.netとそんなにかわらない? それでも.netのほうが多少は遅いの?
30 :
デフォルトの名無しさん :2009/03/15(日) 02:53:52
>>26 そんなに特別な話ではないと思います。
関連付けてエクスプローラからカチカチするようなアプリだと、よくある使い方です。
そろそろめんどくさくなってきたな。 不満ならお前が使わなければいい。 使ってくれと土下座されてるわけでもないだろ。
ケチ付けたいだけみたいだからもう良いよ
javaアプリのほうがもっと遅いよな そう考えるとネイティブコンパイルできるC++かDelphiしか解決法はないということか。
APIスレに沸く.NET厨も酷いがこれも酷いなw 結局「気になる」以上の不満は無いんだろ。
煽ってる奴も大概だと思う。
で、遅いの?遅くないの?
遅いよ。超遅い。デラ遅い。 だから素人は使わないで。
遅いの定義次第だな 何を持って遅いとするのか
知らないならレスしないで下さい。ウザイだけです。
↓今日一番非生産的なレス 知らないならレスしないで下さい。ウザイだけです。
じゃあそのレスもらいます
ウザイと思う奴はウザイという書込をみてウザイと思わないのかね
OKWAVEでやれ
結局、具体的になんの.NETアプリが遅いのか教えてよ。
>>29 起動ってのが例えばウインドウが表示されるまでだとしたら、
ウインドウを表示するコードもJITコンパイルされるので.netの方が遅いよ。
つーかね、そんな事気にしてたらこの先Windows使えないっすよ。
>>45 起動を別にって言ってるのにそういう例を提示するということは、
一つのアプリがフォームを新たに表示しようとするたびにコンパイルされて
表示が遅いということだな?
プロジェクトが2つあって一つがクラスライブラリなんですが クラスライブラリの出力タイプを持つプロジェクトを直接起動することはできませんとでて実行できません F5押したときにもう一方のプロジェクトだけ起動するようにするにはどうすればいいんですか?
ソリューションのプロパティスタートアッププロジェクトの設定で解決しました
ファイルは必ずnamespaceのなかにクラス作らなきゃいけないんですか?
スレッド セーフってなんですか?
"必ず"ではない。 だが、たいていの人は名前空間を必ず指定する。
ユーザから見たら起動が遅いってのはストレスだからなぁ。 個人的には解決したい事項の1つ。ngenはあまり効果ないみたいだし。 exeがクリックされたら、アンマネージでスプラッシュWindow出しつつ 裏で.NET起動とか、なんか体感速度的にでもごまかす方法ないかなぁ。 あ、でも、頻繁に起動するアプリでスプラッシュWindowは返ってウザイか。 Windowの閉じるボタン押されたらとりあえず非表示にして、 裏でタイマー回して1時間後に終了とか。
仕組みがよくわからないんですが、namespaceは同じで2つのファイルにクラスをそれぞれ作った場合 同じプロジェクト内の第3者ファイルで使う場合はusingで名前を指定しなくても2クラスとも使えるようになりますよね 最初にusingでいっぱい指定してある奴ってどこにあるプロジェクトなんですか? 同じソリューションで2つプロジェクトを作って、片方のプロジェクトからもう一方のプロジェクトのクラスが見えないんですけど usingしてから使おうとしても現在のコンテキスト内に存在しませんといわれるんですが、どういうことですか?
.NETアプリってなんで起動読み込み時にマウスカーソルの砂時計状態が普通のカーソルに戻るんだろ? それのおかげで起動したのか、ダブルクリック失敗したのか迷うことがある
単語をクリックしたときにダイナミックヘルプにいろいろ出てきますが、 これの項目が2重にダブってて、中をよく比べたら .NET Framework クラス ライブラリ Silverlight 用 .NET Framework クラス ライブラリ の2つが同時に表示されてるんですが、Silverlight 用だけ表示させないようにするにはどうすればいいんでしょうか
プロジェクトのConsoleApplication1を プロジェクトのConsoleApplication2の参照に追加できましたが、 using ConsoleApplication1; と書いてもConsoleApplication1の中のクラスが使えるようになりません。あとどうすればいいですか?
クラスをpublicにすればいい
できました。ありがとうございました
public class Class1 { int a = 1; public void num() { int b = new int(); b = 2; int c = 3; } public void test() { Console.Write(a); Console.Write(b); Console.Write(c); String name = Console.ReadLine(); } } これの Console.Write(b); Console.Write(c); のbとcで、コンテキスト内に存在しませんとエラーが出るんですが どうすれば他のメソッドの変数が使えるようになりますか?
なりません
メソッドから出せ public class Class1 { int a = 1; int b; int c; public void num() { b = 2; c = 3; } public void test() { Console.Write(a); Console.Write(b); Console.Write(c); String name = Console.ReadLine(); } }
なんという初心者らしい質問 おじさんの髪の毛に希望ができたよ
なごむ(´ω`)
メソッドの変数は外と連絡とれないんですね。 ということはnewは省略可能なだけってことなんですねありがとうございました。 public class Class1 { public int b = new int(); public Class1() { b = 1; } public void num() { b = 2; } } class Program2 { static void Main(string[] args) { String name; Class1 cls = new Class1(); using (Class1 cls2 = new Class1()) { cls2 = cls; cls.num(); Console.Write(cls2.b); } cls2.num(); Console.Write(cls2.b); name = Console.ReadLine(); } } これのusingでエラーがでるんですが、IDisposeへの変換が可能でなければならないってどういうことですか?
すいませんIDisposableの派生クラスにしたらできました。
何の本見て勉強したんだか分からんが、 new int()とか、何も分かってないのにIDisposeだの 基礎がガタガタなので、何か本買って勉強し直すといいよ。
new int() これコンパイル通るのか?
通るよ
using (Class1 cls2 = new Class1()) ……何がやりたいのかさっぱり分からない。
何のためにusingしてるのか良く分からん
72 :
デフォルトの名無しさん :2009/03/15(日) 17:30:01
Linux上でもMonoのAOTコンパイラを使うとネイティブコードが作れると聞きましたが VM上のJITコンパイラやC++と比較してパフォーマンスはどの程度期待できるでしょうか
値型と参照型の違いが分かってないとか? new int()なんて通すなよ
そんな責めるなよw
別にSystem.Int32のコンストラクタ呼んだっていいじゃん。 値型はコンストラクタ呼べないとでも思ってるのか? Point p = new Point(); 全然おかしくない。
75はC++/CLIをやると、愕然とすると思う。
C++ は new の有無で値型か参照型(ヒープにメモリアロケート)か区別するけど、 其の文化が C# にはないからなぁ。
78 :
デフォルトの名無しさん :2009/03/15(日) 21:32:44
C#スレを見ると当たり前のようにラムダ式とかFuncとか使ってるけど、 .NET3.0以上を入れないとそのアプリを利用できないことはスルー? 特定の人向けの場合は別として、そのためだけに新しく.NETを入れさせるのってどうなのよ? 一般向けのフリーソフトを作りたい場合はせめて2.0までの構文で抑えるべきだと思うんだが。
これはひどい 昨日のネタはいいところを突いてきたと思ったんだが
Vista なら、3.0 は最初っから入ってるし・・・
81 :
デフォルトの名無しさん :2009/03/15(日) 21:45:31
まだXPの人も多いでしょ。 実際、「動作には.NET2.0以上が必要です」って書いてあるだけで興味失う人も多いようだが? そろそろ普及してきた感のある2.0ですらそうなんだから、3.0とかありえないレベルだろ。 自動アップデートじゃ入らないんだから、入れてない人もかなりいるはずだし。
言わんとすることは理解できる。が、ここは「C#でフリーソフトを作ろう」スレじゃないしな・・・ 使える範囲で使えばいいだけだろ。 それを踏まえると、質問するのにあたって、「C# 2.0 で」って指定はありだろうね。
83 :
デフォルトの名無しさん :2009/03/15(日) 21:49:23
実際にやってみてから言え、クソが
Windows 7 だと 3.5SP1 かな。 個人的にゃそんなこと気にするやつなら初めから C++ で作るので どうでもいいが。 もっというとどうせインストーラ作らなきゃいけなくてそこで入れるだけ だからさらにどうでもいいが。
.net3.0インストールしたくないなら.net3.0アプリ使わなきゃいいんだし。 .net3.0アプリ使いたければ.net3.0インストールすればいいんだし。 使うかどうかは自由じゃないか?
.NETまで勝手に入れるインストーラとかウザすぎだわ
Microsoftに聞いてください
あと.NET 2.0対象でもコンパイラで完結する機能は使用可能なことをお忘れ無きよう。
WinForms ボタンを押したらアニメーションを再生/一時停止するような プログラムを作るにはどうすればいいですか?
ASP.NET ボタンを押したら牛丼が出来上がるよな プログラムを作るにはどうすればいいですか?
91 :
デフォルトの名無しさん :2009/03/15(日) 22:40:38
自動アップデートで3.5入ってるだろ
C++で作ったクラスやlibファイルはC#で使えるの?
93 :
89 :2009/03/15(日) 22:42:41
×WinForms ○WinFormsで //Form1.Desginer.cs this.Click += new System.EventHandler(this.Play_Clicked); //Form1.cs private void Play_Clicked(object sender, EventArgs e) { } ↑この関数の中でどうやってアニメーションを開始すれば?
>>89 マネージドなコントロールはないと思うんで、Media Player を埋め込みで。
>>92 無理
>>46 違います。初めて実行する処理が遅いだけです。
フォームの表示であれば、違うフォームでも表示するコードは内部で共通なので2枚目以降はそれほど遅くないでしょう。
それと、なぜmfc使ってる場合と比較したがるのかよく分からないのですが。
>>96 Vistaなら早いよ(^O^)
まぁそういう事なんでしょう…
>>96 遅いです。問題視しました。これでいいのか?
どういう方向に話しを持って行きたいのかさっぱりわからない。
>>96 C++でMFC使わずWinAPI直に使うとか・・生産性悪すぎて話しにならん
同等の機能を実現するのにC#とは比べ物にならんくらいの時間と労力がいる。
ここはプログラムを"作る人"のための板なわけだが、お前さんは作った事あるのか?
ソフトウェア板にでも行った方が良くないか?
質問です。 VS2008 .NET3.5でWebClietnを使ってます。 WebClientはDownloadData()と DownloadFile()の二つのメソッドを実行します。 DownloadDataは問題ないのですが アプリをWindowsVistaからproxyサーバを介して DownloadFileを実行すると 「サーバーによってプロトコル違反が発生しました。 Section=ResponseStatusLine」 という例外が発生します。 WindowsXPでは発生しません。 proxyサーバはubuntu8でsquidを使用しています。 WebClientからこれを回避する方法をどなたかご教授ください。 よろしくお願いします。
>>98 >遅いです。問題視しました。これでいいのか?
何がですか?あなたの話こそ意味が分かりません。
あなたはどのレスした人ですか?
>>99 >C++でMFC使わずWinAPI直に使うとか・・生産性悪すぎて話しにならん
>同等の機能を実現するのにC#とは比べ物にならんくらいの時間と労力がいる。
飛躍しすぎてると言うか、そんな話は誰もしてないです。
前スレ
>>989 で
>c++もmfc使っていれば、.netと同じでdll経由してるから、同じようなもんじゃいの?
と言っていたので、dllの初回ロードと.netの初回実行時コンパイルは、最初に実行されるってことでは同じだけど、違う性質の処理です。
それなのになぜあなたはMFCのdll呼び出しとの比較にこだわるんですか。
ということを質問しただけです。
>>101 お前は何が言いたいんだ?叩きたいだけなのか?
満足できないなら自分でC++使って作ればいいじゃないか。
C#質問スレなんだからC#の話しようぜ!
起動が遅いとか欠点があるのは承知で使っている。 それよりも得られる利点のほうが多いと踏んで。
何度いってもわからないやつは馬鹿もしくは池沼
>>102 C#を叩いているつもりは毛頭無いし、むしろC#好きです。
ただMFCのdll呼び出しと比較するようなもんじゃないよということを言いたかっただけ。
スレ的に邪魔そうなんでもう消えます。
Vistaなら…
>>106 は最初に起動が遅いのが云々言っていた輩とは別とおも。
ところで、C#2005のソースはSHIFT-JISで保存されているんだけど
これってデフォルトだっけ?出来ればUTF-8に変えたいんだけど。
>Shift-JIS うん >UTF-8 BOM付ければ勝手に認識したと思う だめなら codepage オプションかなんかだったかと
>>108 テンプレートを UTF-8 版に(手動で)変更する、とかしないとダメだったかと。
112 :
デフォルトの名無しさん :2009/03/16(月) 10:49:23
初回コンパイルが気になるなら インストール後にngenするようにインストーラに書いときゃいいだろ
IntPtr pt = Marshal.AllocHGlobal(1228800); ImageBuf = new Bitmap(640, 480, 2560, System.Drawing.Imaging.PixelFormat.Format32bppArgb, pt); こういうコード書いた場合 ガーベジ働いたら,ptが勝手に解放されたりとか Bitmap内の画像メモリバッファが動いたりして 軽くヤバイんでしょうか? 現状,ptに対して,Marshal.Copy()にて画像コピーしまくっています
アンマネージドメモリにGCは干渉できない
メソッドとフィールを書く順番って決まってるんですか?どっちが上か下かとか
namespaceの名前の付け方なんですが これ複数のプロジェクトから少しづつ使えそうなコード持ってきて 新たにプロジェクトで使うときのusingがめんどくさいし、統一できてないんですが これ名前の付け方ってデフォルトだとプロジェクト名じゃないですか namespaceの存在理由が他のnamespaceと区別を付ける目的だとしたら 自分が使うプロジェクトはすべて同じnamespaceに書き換えるのはありですか? この辺どうやってますか?
クラス名 インスタンス名; クラス名 インスタンス名 = new クラス名(); この2つの違いがわかりません newしなくても同じように使えてる気がするんですが、何がちがうんでしょうか
同じように使えてませんよ
>>117 List<string> list1;
List<string> list2 = new List<string>();
list1.add("test"); //こっちは実行時エラーになる、当然コンパイルは通る
list2.add("test");
>>114 ってことは,ガーベジにてBitmapオブジェクト内の
画像バッファのアドレスは,絶対動かないってことですね
サンクスです
>>115 自由
プロジェクトで規約が示されたりするかもしれないけどな
>>116 基本はこれ
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
そもそも
> これ複数のプロジェクトから少しづつ使えそうなコード持ってきて新たにプロジェクトで使う
てのが好ましくない
モジュール化を進めてDLLとして再利用できる形にしたほうがいいと思う
ガーベジとか中途半端な略し方はやめて それじゃただのゴミだ
>>119 >>121 thx
newしなくても使えたような気がしたんだけど気のせいかな・・・
あともうひとつ教えてください
一つのファイルに100行ぐらいしかなくてファイル数ばっかり大量にあるんですが
これっておかしいですか?なんか一つのファイルに2つ以上クラスがあるとすごい見ずらいんで細かく分けるようにしたんですが
で、usingの部分をいつも追加するのがいやになりました。まとめてusingだけのファイルから参照するとかはできないですか?
>>123 newしなくても使えてるのは値型。値型と参照型があるんで調べてみ。
C#で書いたclassは全て参照型。
>newしなくても使えてるのは値型 ブブー
>>123 別に同一プロジェクト内で"クラスの追加"をしていった場合、
usingを追加する作業は要らないと思うんだけど
>>125 フィールドの値型なら暗黙に初期化されるから強ち間違いではない……とか
// 苦しい弁護だな
>>126 そうなんですか?
using System;
using System.Collections.Generic;
using System.Linq;
クラスファイルを追加するとこれしかなくて
全体に追加したいusingを毎回手動追加してるんですが
>>92 libをDLLにすればそれを呼び出せるよ。
>>130 値型でもローカル変数なら明示的な初期化が必要だぜ
// 配列の要素なら暗黙に初期化されるから……うん、やっぱり苦しいな
newと初期化が関係あるのかと
133 :
デフォルトの名無しさん :2009/03/16(月) 15:55:23
newとかusingとか、同じキーワードを全然違う意味のところに使いまわすのは どういうセンスなんだぜ?
VBの惨状を回避するため
>134 詳しく
136 :
130 :2009/03/16(月) 17:23:46
>>131 はnew と初期化をごっちゃにして
無駄なインスタンスnewしまくってるやつに思えてならない。
あと何言ってるのかさっぱりわからない。
素人な質問でスイマセンが教えてください。 TextBoxを派生させてOnPaintをオーバーライドしているのですが、 文字入力中だけ背景色や文字のサイズなどが変わってしまいます。 (OnPaintが呼ばれてない?) 文字入力中も見た目を制御するにはどうすればいいのでしょうか?
入力中じゃなくても常にTextBoxのOnPaint/Paintは呼ばれなかったと思うけど。 RichTextBox使うんじゃ駄目?
139 :
137 :2009/03/16(月) 23:44:18
確かにデフォルトでは、OnPaintは呼ばれませんでしたが、 SetStyle(ControlStyles.UserPaint, true); にしてやると、文字入力のとき以外は呼ばれるようになりました。 RichTextBoxは全然使ったことなかったです。 とりあえずRichTextBoxでできるところまで試してみます。 また頭が死にそうになったら質問するかもしれないですが、 そのときはよろしくお願いいたします。 ありがとうございました。
メソッドから抜けても値を保持していて、 再びメソッドが呼び出された時に使えるローカル変数って作れないんでつか? タイマーイベントをカウントしたい時とか、グローバルっぽい変数作ると混乱してくるけど 上手い方法が分からないのでこんな感じですが↓もっといい方法やってる人いますか? public class Form1 : System.Windows.Forms.Form { int YaranaikaCount = 0; (・・・略・・・) private void timer1_Tick(object sender, EventArgs e) { YaranaikaCount++; if (YaranaikaCount > 4) { YaranaikaCount = 0; Ahhhhh(); } else { UhoUho(); } } }
作れません なぜならそういうのはローカル変数とは言わないので
な、なんか崩れてしまいましたので再送します… : public class Form1 : System.Windows.Forms.Form : { : int YaranaikaCount = 0; : (・・・略・・・) : private void timer1_Tick(object sender, EventArgs e) : { : YaranaikaCount++; : if (YaranaikaCount > 4) : { : YaranaikaCount = 0; : Ahhhhh(); : } : else : { : UhoUho(); : } : } : }
Cのstaticみたいな物はないので、フィールドで代用する。
メソッドに引数にメンバの中身を渡すのではなくて、メンバを渡すにはどうすればいいんですか? どのメンバかを判断したあと、そのメンバの中を参照したいんです。
そのオブジェクトのインスタンスを渡せばいいんでないの?
変数を変えると一括変換のアイコンが出てくるじゃないですか あれ変更したくない時マーク消す方法はありませんか?
日本語でおk
>>140 そういうのは普通メンバ変数で管理するもんだろjk
150 :
デフォルトの名無しさん :2009/03/17(火) 20:31:35
ある条件が通ったときに、ボタンを押したと同じ意味になるプログラムってどういう風に書けばいいでしょうか ただ、ボタンのメソッドというか処理とかはないです。IDだけで。 なぜなら、CollapsiblePanelていうので、プロパティとして?使ってるからなんじゃないかと思います。 なんでCollapsiblePanelに開いた状態のプロパティがないんだろう・・・初期状態の開閉プロパティはあるのに。 意味がわからない;;助けてください
151 :
デフォルトの名無しさん :2009/03/17(火) 20:34:11
日本語でおk
読んでると脳内がごちゃごちゃしてくる文章だなあ
153 :
デフォルトの名無しさん :2009/03/17(火) 20:43:29
一個ずつ解決しようとするなら、 まず if(i=1) { ボタンAをクリック } という処理はかけますか?
CollapsiblePanelはとりあえず置いとこうぜ
155 :
デフォルトの名無しさん :2009/03/17(火) 21:36:31
無理かな? if(i=1) { CollapsiblePanelがパカっと開く } これでも考えてるのだけど
WPFならRaiseEventとかあったと思う。
自分用の2ch専ブラウザを作っているのですが htmlテキストの取得まではできたのですが 書き込みはどのようにするといいんでしょうか? テキストセットしてボタンを自動で押させるのだと思うんですが
>>157 WebBrowser でやるならそんな感じ。リクエストを投げるなら、
HttpWebRequest で Post。
さっそくどうも う〜ん難しそうですね よく読んでみます
クラスAで初期化(インスタンス?)したクラスBの プロパティをクラスCから読み書きしたい場合は クラスAのインスタンスをPublicにしてアクセスするもの なんでしょうか。定石があれば教えて下さい。
よくわからんけどこんな感じのことを言ってる? public ClassA{ public ClassB b = new ClassB(); } public ClassB{ public string s = "test"; } ClassC { public ClassC() { ClassA a = new ClassA(); Console.WriteLine(a.b.s); } }
正にそう言うことです。 そういうアクセスの仕方が一般的なのかと思いまして。
プロパティはどこに行ったんだ
直接フィールド公開するのは論外として、 ClassAがstring型プロパティとして公開するか直接ClassBを公開するかは場合による
166 :
161 :2009/03/18(水) 17:46:13
>>165 今回の場合、以下のような構成になっています。
・クラスA(メインフォーム。起動時に各種設定値を読み込みクラスBに格納)
・クラスB(設定値を保持する為のクラス。プロパティやフィールドのみ)
・クラスC(クラスAから開かれるオプション画面)
クラスAからクラスCを開いたときに既に読み込まれたクラスBの設定値を
読み込みクラスCの各種コントロールに反映したいのですが、クラスCで
クラスBを初期化すると値まで初期化されてしまい困っています。
こういう場合はどのようにするのが定石でしょうか。
>>161 ,163は携帯からだったので端折ってしまってすいません。
ClassCもフォームなんだよね? そういう場合はClassAの側でClassCのプロパティを設定してやる方がいいんじゃないかな ClassCのコンストラクタにClassBの参照渡すとかね
168 :
161 :2009/03/18(水) 18:17:10
>>167 フォームです。ClassCでプロパティを作成するのは面倒なので
後者の方法についてどのようにするか色々調べてみます。
有り難う御座いました。
IEnumerableをシリアル化するには、どのような方法を利用すればいいですか?
ToArray
フォームを最大化する時にその中のコンポーネントも連動して 同じ比率で大きくしたいんですけどどうすればいいですか? 最大化する時に一々それぞれのサイズをいじるしかない?
>>171 Control.Anchorプロパティとかで解決できるかな?
>>171 普通はSplitContainerを使う
変数の型で同じバイト数のものならやっぱり 少数型より整数型のほうが速いですか?
>少数型 そんなものはありません
失礼 小数
初めから答える気のない奴が 揚げ足を取るだけのためにレスしてるだけだから気にすんな
自己紹介するスレじゃないよ
速いかどうかは環境依存
お前も自己紹介してるやないけ
くやしかったかい?
はい くやしかったです
最後までレスし続けたほうが勝ちかい?
そう思います
いや君の勝ちでいいよ?
じゃあ俺の勝ちだろ お前ら弱すぎワロタ
これだから理系は困る
理系って?文系って?なに?説明してくれない?
189 :
デフォルトの名無しさん :2009/03/18(水) 23:10:12
175 名前: デフォルトの名無しさん [sage] 投稿日: 2009/03/18(水) 22:56:02 >少数型 そんなものはありません とりあえずさらしage
中卒には関係ないよ 区別があるのは高校からですよ
必死だな
>>174 とりあえずint(System.Int32)で扱えば一番良いはず。
理系とか文系という言葉に強烈に反応するのが約一名いるのは仕様ですか?
おまえら#regionで畳んどけよ
変換ミスぐらい許容できないバカがいるから荒れるんだよな
いやその後の方が問題だ
197 :
174 :2009/03/18(水) 23:15:23
>>192 どうも
できるだけ32bitのものを使おうとおもってますが
最近はjavaとかも64bit版あったりするんでどんなもんかなと思いまして
基本クラスのメソッドに含まれるメンバ変数の値を 派生クラス側で変更して、そのメソッドを使いたいんですが どうしたらいいのでしょうか?
>>197 実際のところ64bit整数は32bitと同じかそれ未満の速度になるよ
>メソッドに含まれるメンバ変数 とは何だ?
>>198 やりたい事をそれっぽいコードで示してみ
203 :
174 :2009/03/18(水) 23:24:26
そうですか これらの速度をベンチマークで比較してるとこがあればいいんですけどねえ
virtual?
きっと斜め上の回答が来る筈。 って事で、メソッド内のローカル変数だと予想
結局どれなんだよ・・・
>>202 こういう感じです
派生クラスでメソッドを書き直すしかないですか?
public class A{
int x = 10;
public MethodA(){
Console.WriteLine("ここに表示される値を変えたい→ " + x);
}
}
public class B : A{
new int x = 20;
}
public class DEMO{
public static void Main(){
B b = new B();
b.MethodA(); //ここで20と表示したい
}
}
>>208 これでどうだ
public class A
{
protected int x = 10;
public void MethodA()
{
Console.WriteLine("ここに表示される値を変えたい→ " + x);
}
}
public class B : A
{
public B()
{
this.x = 20;
}
}
public class DEMO
{
public static void Main()
{
B b = new B();
b.MethodA(); //ここで20と表示したい
}
}
選択した文字列を引数としてプログラムを起動するにはどうしたらいいですか?
213 :
137 :2009/03/19(木) 00:55:19
ごばorz
どこの誤爆だよwww
現在アクティブになっている他アプリのウィンドウ名を取得することはできますか? 出来るのであればご教授お願いします。
218 :
217 :2009/03/19(木) 03:20:26
言い方が悪かった static void Main(string[] args) こういう感じね 後選択した文字列ってのが意味解らない
user32.dllのGetForegroundWindowとGetWindowTextをDllImportして使う。 HWNDにIntPtr、LPTSTRにStringBuilderを使っとけばおk 詳しいやりかたはぐぐれ
>>211 System.Diagnostics.Process.Start("app.exe", "args");
こういう事をしたいのか?
>>219 ありがとうございます。
そのヒントを元に検索し、緑のバイクさんのところのコードを参考にして解決しました。
>>211 Processじゃないの?
文字列で思い出したのでついでに質問
ブラウザなどで範囲選択している文字列をコピーすることはできないでしょうか?
SendKeyで Ctrl+Cを送ると、なぜかブラウザ名と開いてるページが帰ってきてしまいます。
何かいい方法無いですか?
一番汎用的なのがSendKeysなのは間違いない Ctrl+Insertの方が安定してるかも 対象限定ならともかく完全にどんなのでも使えるやりかたってのは存在しない
変数名を変えると一括で変換してくれるマークが出てくるじゃないですか あれを出ないようにしたくはないんですが、他は変更しない時マークを消したいんですが マークを押した時に出てくる2つの選択肢どっちを選んでも思い通りになりません教えてくだしあ
2次配列の宣言で int[][] da = new int[8][]; として後で da[0] = new int[8]; da[1] = new int[8]; …としていくとできますが for (i = 0; i < 8; i++) da[i] = new int[8]; こうするとビルドは出来ますが実行で赤Xがでてエラーになります for などを使って一括して定義する方法ないでしょうか? da[0,0] このタイプは使いたくないのです
エラーはちゃんと読みなさい。
>こうするとビルドは出来ますが実行で赤Xがでてエラーになります 日本語でOK
エラーでないぞ? iを定義してないだけじゃないか?
なんか、めちゃくちゃえげつない初期化が出来るね。 int[][] da = new int[][] { new int []{1,2,3}, new int []{5,6}, new int []{7}, new int []{8,9,10}};
もう一息 var da = new int[][] { new []{1,2,3}, new []{5,6}, new []{7}, new []{8,9,10}};
>>228 でないですか?iの定義はしてるはずなんですが
>>226 エラーというか画面全体に×が出るあれです
宣言する場所と実際にデータを使う場所が悪かったようです 直りました、どうもすいません
日本を狙う 朝鮮人の原爆ミサイル建造費用は
日本国内の 在日パチンコ屋からの送金
パチンコの市場規模は 年間30兆円
日本の国家予算の 3分の1以上
北朝鮮の国家予算の なんと100年分!
これを在日朝鮮人が 自由に動かし
パチンコマネーを 北朝鮮に送金している
パチンコ屋を 全面営業禁止にしない限り
北朝鮮は制裁など 痛くもカユくもない
在日朝鮮人なら 生活保護もらい放題
毎月二十数万円もらって 毎日遊んで暮らしてる
住宅費・医療費・教育費なんでも無料
税金は1円も払わない 超特権階級(貴族)
民主党は 選挙権まで与える予定
日本は 在日天国 <丶`∀´> ウハウハ〜♪
http://2cchan.ham-radio-op.net/kimuchi.html
>>223 おお、Ctrl+Insertで望んでいた動きができました
なぜCtrl+Cで上手くいかなかったんだろうなぁ
ありがとうございました
すみません。質問いいですか? 実にくだらないのですが、解りません・・・ データグリッドビュー内の全てのRow毎にForeachループを廻したいのですが やり方が解りません。 どなたか教えては頂けませんか? 宜しくお願い致します。
foreach(DataGridViewRow row in dataGridView1.Rows) { うんたらうんたら; }
C#3.0勉強中 匿名メソッドのラムダ式の便利さはわかったけど、 ExpressionTreeというのが、どういう場合に使われて便利なのかよくわからない これは便利だっていうサンプルが乗ってるサイトとかありますか?
http://www.opentk.com/project/opentk のExampleの中のWinForms 1 : Simple GL Controlのサンプルを、
ボタンを押したら箱が回るアニメーションが再生/一時停止するようにするには
どうすればいいですか?
箱を描画する処理は作れるんですが、アニメーションを実装する方法が良く分かりません・・
シングルスレッドで処理したいんですが、ApplicationContextクラスを作ったりしなければならない?
239 :
238 :2009/03/20(金) 23:13:52
BackGroundWorkerとかデリゲートの非同期呼び出しとか 使わず while(ウィンドウが閉じられていない間) { メッセージ処理 ゲームの描画処理とかSleepとか } 見たいな事はC#では出来ないんでしょうか
マルチスレッドが嫌ならDoEventsでも使えば
241 :
238 :2009/03/20(金) 23:31:18
>>240 メッセージ処理をDoEventsでするんですか?
しかしApplication.Run(new Form1());
した後どこから
>>239 みたいなループに入れば・・?
OnClick()の中にwhile文入れたりとかは駄目ですよね・・?
株式の情報とかを取得するのに 皆、Yahooファイナンスから情報を得ているのが多いみたいですが あれは?ファイナンスのHTMLを取得して 中を読み取り表示しているだけなのかな?
YahooのWebAPIではファイナンスの情報提供してないみたいだからそうなんじゃない?
Yahooの株式データはurlにクエリ付けて操作できる
URLにクエリですか?
だけど取得はHTMLだから仕様変更されたら一発でアボーン。 つか金融系でAPIを公開しているところないよなぁ・・・ 純金の相場を取得するモジュール作ったけど、仕様がいつ変わるかわからないのが怖い。
>>248 銘柄のコードでですね。
それでHTMLを取得してから
中を自分で作るしかないのか・・・・・
>>247 さんの言う通り
HTMLが変わったら終わりですね。
どうするかなぁ〜( ̄ヘ ̄;)ウーン
スクレイピングなんてそんなもん。 正規表現を設定ファイルに出すとかしておいて、 変更時の修正が最低限に済むようにしとけ。
251 :
デフォルトの名無しさん :2009/03/21(土) 12:25:08
携帯から失礼。ふと疑問に思ったのでよろしくお願いします。 オブジェクトを作るとき、+=と=の場合があるんですがどう違うんですか?
たぶん、イベントハンドラの関連づけを勘違いしてるんじゃないかな。
YAHOOファイナンスは銘柄コード以外に日付もクエリに指定する事が出来て 過去10年分の株価時系列データが意外と簡単に取得出来るな 詳しいやり方は忘れた
254 :
243 :2009/03/21(土) 13:04:14
色々な意見ありがとうございます。 ちょっと考えてから作るか作らないか検討します。
>>252 たぶんそうです。
+=と=の違いってどうなんですか?
調べろよ。 x = x + y; x = y; の違い。
>>242 おお ありがとう
あと見ておくべきところとしてはこんなところかな?
なんかいろいろあるなぁ
・ASP.NET MVC 1.0
・ASP.NET AJAX
・ASP.NET Dynamic Data
・ADO.NET Entity Framework
・ADO.NET Data Services
・Silverlight 2.0
・Silverlight Controls for ASP.NET
・C#3.0 匿名メソッド
・C#3.0 ラムダ
・C#3.0 初期化子
・C#3.0 匿名型
・C#3.0 暗黙型付け
・C#3.0 拡張メソッド
>>256 ハンドラーに+=ってイメージがつかないんです(ノ_・。)
259 :
デフォルトの名無しさん :2009/03/21(土) 14:34:45
継ぎ足していくイメージだな
>>258 delegate void FooHandler(string s);
void Bar(string s) { Console.WriteLine(s); }
void Test() {
FooHandler f = null;
f += Bar; // ..1
f = f + Bar; // ..2
f = (FooHandler) Delegate.Combine(f, new FooHandler(Bar)); // ..3
f("hello");
}
1.2.3 は全部同じ意味。
でも実際、delegateの場合は+=演算子がオーバーロードされて、 Delegate.Combineメソッドが実行されるってこと?
演算子オーバーロードではなく、糖衣構文。 コンパイラが自動的に Delegate.Combine() に変換してくれるのであって、 Delegateクラスで + 演算子が定義されているわけではない。
WEBサイトを画像化するには どういった方法をとるのが適切ですか? よければサンプルコードの掲載されてるようなURLもいただけるとありがたいです。
throw new System.Exception(); │ │ _∧∧∧∧∧∧∧∧∧∧_ │ > そ、その動きはトキ! < │  ̄∨∨∨∨∨∨∨∨∨∨ ̄ │ ≡ ('('('('A` ) │≡ 〜( ( ( ( 〜) ↓ ≡ ノノノノ ノ サッ
>>257 LINQを学べば自動的にC#3.0の追加要素は全部学べるよ。
>>266 LINQ TO SQLはキャンセルの方向だからお勧めできないよ
>>267 >>257 のリストのどこにもLINQ TO SQLとかいてないな。
ひょっとしてLINQ = LINQ TO SQLとか思ってる人なの?
>LINQ TO SQLはキャンセルの方向 そうなのか 知らんかった 理由は何?
ひとことでいうと DB 屋さんが作ったものじゃないから。 ある意味 Linq の参考実装だったものがそのまま出てきたような もの。でもライトでいいんだけどねあれ。実質 SQL Server 限定で なければ。 DBLinq はどうなってるんだっけか。
>>268 EntityにはLINQ TO SQLが内包されてるし、
一言でLINQと説明しているC#関連のサイトのほとんどはLINQ TO SQLだからね
EntityにはLINQ TO SQLと同等のExpression<T>を使ったクエリ文は使用しているが内包はしていない。 >一言でLINQと説明しているC#関連のサイトのほとんどはLINQ TO SQLだからね これは君の脳内ソース。
273 :
デフォルトの名無しさん :2009/03/22(日) 00:22:14
LINQでLINQ TO SQLを説明してるサイトのほうが少ないと思うんだが、 いったい普段どういうサイトを見てるんだろうか
>>272 紛らわしいが、普通に理解して貰えれば、Entity Frameworkのことを差しているのは明白だと思うんだけど。
EntityFrameworkはSP1になって実装されたものだからC#3.0(VS2008)の特徴として紹介されてる
LINQ関連は、ほとんどLINQ TO SQLっていってるわけ。
実際にC#でLINQ TO SQLでないものを紹介していれ例は少ないよ。
脳内ソースというか、普通にググればわかるレベル。
つまり、ググると混同してるのやら誤解しているのやらがたくさん出てくると
あの論点が見えないのですが
>>266-276 の繋がりがよく分からないあたりから
食い違いがあるのではないでしょうか
…Linq to SQL が sqlmetal とかの特定技術であることすら知らない? Entity Framework の Linq 技術周りに関して言えばそれは Linq to Entities だ。EDM に対してのクエリである ObjectQuery の 構築で使用している。 Linq to Entities と Linq to SQL は生まれも実装もラインも別。マジで。 つながりでいえば Linq のプロバイダとして実装されているぐらいしか 共通点はない。
280 :
デフォルトの名無しさん :2009/03/22(日) 00:46:05
>>280 だから何?って感じなんだがwww
何の証明にもなってない
>>282 うん
だから何?って感じだし
なんでそんなに必死なのかさえ理解できないし
脳内ソース出しちゃう人の話なんか誰も取り合っちゃくれんよ それが2chです
なんか論点がずれてる気がするな。 その記事ではEFとLINQ TO SQLをちゃんと区別してるんだから、 そうなると誰もそれには異論は唱えてないことになると思うのだけど IDがないとわかんね。
だから >LINQ To EntitiesはEDMのモデル向けの“LINQ To SQL”といってもよいものだが、 >LINQ To SQLにはない機能(例えば、複数のテーブルから1つのエンティティを作成する機能など)が搭載されている。 >EDMに基づくLINQ To Entitiesは、データベースやオブジェクトの変更にも強いなどのメリットがあるため、 >今後はLINQ To Entitiesの方が(LINQ To SQLよりも)より多くの場面で活用されていくのではないだろうかと筆者は予測している
linqとして紹介されてたものが実はlinq to sqlのことだとも知らなかったのか。。
何を? 勘違いしてた人はいるみたいだけどね
Linq だけならふつーは Linq to Objects を指すんじゃない。
>>290 同感
だが、メソッドのネーミングがSQL由来なので
使った事が無い人はSQLの利用がメインだと思うかもね
>>291 SP1は既にリリースされてるわけで将来の機能というわけではないよ。
ただ、議論をする上で扱いは決めておく必要はある。
というわけで含まない前提でどうぞ。
>>293 普通に解釈すれば、3時点から見た「将来」と読めるから、
その突っ込みはズレてると思うぞ?
3の時点でリリースされていないLinq To Entity 3の時点で紹介できない どちらが普通かは難しいけが後者で了解
それ前提ならC#とLINQの解説は、SP1公開以前のものがほとんどだから 少なくともLinqToEntitiesを解説したものは圧倒的に少ないな どっちにしろSQLのほうはなくなるらしいから学ぶならEntitiesのほうだろ
学ぶならまずはLINQ to Objectsですよ。 第一、Linqの説明で一番多いのはLINQ to Objectsだし。 SQL系に隠れてスルーされ気味ですが、非常に有益な技術です。
LINQ to XML使ってる俺はどうなんの
299 :
デフォルトの名無しさん :2009/03/22(日) 10:18:18
LINQといえばまず第一にLINQ to Objectsだろ ないと絶対に困るレベルのプログラムの基本部品だ LINQ to SQLとかEntityなんてのはそれを応用して作った ただのORマッパーだろ LINQという技術の射程の長さは表れてるけど それがLINQの代表というわけじゃない
>>298 まあ、XML操作が必要な作業してるんなら、
LINQ to XMLはかなり使いやすいXMLライブラリだと思う。
>>299 応用というか、同じ書式で書けるってのがポイントか。
301 :
sage :2009/03/22(日) 10:59:30
OS :WindowsXP 開発環境:VisualStudio2008 Pro 開発言語:C# 3.0 AccessデータベースをOLEで接続し、 データバインドしたDataGridViewでデータを表形式で表示しつつ、 DataGridViewの右横にデータバインドしたテキストボックスを配置し、 DataGridViewでデータを選択し、それをテキストボックスで データ更新が出来る名簿ソフトを作成しています。 それに、DataViewのRowFilterでDataGridViewでのデータの絞込みが出来る 用に機能追加し、またデータバインドのソースをDataViewにして、絞込みした 状態でデータ更新ができるようにしようとしました。 しかし、 RowFilterでフィルタをかけている状態で、下記のコマンドをボタンで更新処理を 実行しようとすると、DataGridのフォーカスを手動で変更をしないとデータベースが 更新されないのです。 フォーカスを移動しなくても更新されるようにEndCurrentEdit メソッドを事前にかけているのですが、何かコマンドが足りないのでしょうか? 恐れ入りますが、ご教示いただけないでしょうか? 以下コマンド----------------- int iRow; //更新したレコード数 this.BindingContext[dbCustomer1, "M_Customer"].EndCurrentEdit(); iRow = oleDbDataAdapter1.Update(dbCustomer1, "M_Customer"); MessageBox.Show("更新 " + iRow + "件"); -----------------------------
C#にはデフォルト引数がなく、同様の機能はオーバーロードを使って表現するみたいですが、 これって冗長じゃないですか?いくつも同じ名前のメソッドが増えてなんだか回りくどいような気がします。 Pythonだとデフォルト引数、名前付き引数がサポートされてるので、 それに慣れていたせいもあってかいまいち理解できません。 オーバーロードの方が優れている点ってあるのでしょうか? それとも、そもそもデフォルト引数を使うような事自体が珍しいんでしょうか。
デフォルト引数をまとめたクラスを一個作ればいいだけだからねえ
>>302 4.0からデフォルト引数と名前付き引数に対応するよ
相談室スレから誘導されてきました。いまさらだけどあっちのソースだいぶまちがってる・・・。 今ラジアンで角度を処理するクラスを作っているのですが、次のような動作をさせたいんです 1.値を代入したときは値を正規化してからいれる(負値だったら正値に、2π以上だったら2πで剰余算) 2.値を参照するときはそのまま参照 3.floatと同じように扱える プロパティを使って実装すると次のようになりますが class RegularizedAngle { private float InAngle; public float Angle { get { return Angle; } set { //Angleが負値だったら正値に if (value < 0) Angle = (float)(Math.PI * 2f) + Angle; //valueが2π以上だったら2πで剰余算 Angle = value % (float)(Math.PI * 2f); } } } これを普通のfloatと同じように扱いたいんです。たとえば・・・ RegularizedAngle Ang = (float)(Math.PI * 2f); //すなわち6.28・・・の代入 Ang += 1; //代入したとき内部で正規化がおこなわれて1になる。 Ang += Ang; //これで2になる? こんなかんじで見た目を組み込み型みたいにしたいんです。 しかし上記のプロパティをつかった方法だとアクセスするときに Ang.Angle としなければなりませんし、宣言するときにはnewが必要です 組み込み型を継承したクラスを作ればよいのでしょうか・・・?
306 :
デフォルトの名無しさん :2009/03/22(日) 14:04:08
>>306 //Windows Form Designer generated code
とコメントアウトすればいいのかな?
308 :
デフォルトの名無しさん :2009/03/22(日) 14:18:32
>>307 いえ、そうしてもエラーが増えるばかりで、そうしていいやら・・
>>308 VS2002/2003の頃の記事だから、percial class じゃないんだな。
そこはおそらく、これだ。画面は自分で準備しろということじゃないかな。
#region Windows Form Designer generated code
・・・・
#end region
をIDE上で閉じてるイメージ。
310 :
デフォルトの名無しさん :2009/03/22(日) 14:29:20
>>305 演算子オーバーロードしまくれば大体望みの動作になると思うよ
でも普通にプロパティアクセスする方が分かりやすいよ
>>306 それは手順通りではないでしょ。
追加するのは、イベントハンドラの部分。
>>302 デフォルト引数の値を変更したとき、
利用者側の再コンパイルが必要って言うデメリットもあるから今まで対応してこなかった。
さすがに開発者からの要望に折れて、4.0で実装。
>>309 レスありがとうございます
「pertial識別子が型hにありません。この型に別のpartial宣言が(ry」
までたどり着けました
.
>>310 あんまり賢い方法ではないってことですね・・・。
プロパティで実装してみます。ありがとうございました。
>>313 駄目だこりゃ。
どうしてもこの教材である必要がなければ、他のあたって。
>>315 私が根本的に勘違いしているみたいですね・・・
すみませんとりあえず他のをあたります
317 :
315 :2009/03/22(日) 14:42:35
うん Form1.Designer.csの内容をこのサンプルから省いて、 Form1.csに追加が必要なメンバ変数とイベントハンドラの記述をすれば 動くので、原理的に難しい話では全くないんだけど、 それができる人は、そもそもこのチュートリアルをやる必要がありません。
>>305 普通に演算子オーバーロードすれば良いと思う。
newでインスタンス作りたくなければ、構造体にすればいい。
けど、フィールドの初期化しなきゃいけないので、宣言だけはnewで我慢かなぁ
>>314 floatと完全互換ならこの程度で済みそうだけど、複雑になるとoverloadの山になるな。
struct RegularizedAngle {
float inAngle;
public RegularizedAngle(float f) { inAngle = f; }
public float Angle {
get { return inAngle; }
set { inAngle = value; } // いろいろ省略
}
public static implicit operator RegularizedAngle(float f) {
return new RegularizedAngle(f);
}
public static implicit operator RegularizedAngle(double f) {
return (RegularizedAngle) (float) f;
}
public static implicit operator float(RegularizedAngle ra) {
return ra.Angle;
}
public override string ToString() { return Angle.ToString(); }
}
--
static void Main() {
RegularizedAngle x1 = 12.3;
RegularizedAngle x2 = 10;
float f = x1 * 3;
RegularizedAngle x3 = x1 * x2;
>>319 ちびっと訂正
>public RegularizedAngle(float f) { inAngle = f; }
public RegularizedAngle(float f) { inAngle = 0; Angle = f; }
なんかlinqを使うより、IEnumerable<>のSelect<>メソッドやWhere<>メソッドを使ったほうが わかりやすい気がするのはなぜですか? linqtがfromから始まるのが気持ち悪いからですか?
>>319-320 ありがとうございます。参考になります。
しかし完全に理解するのは難しそうですね・・・。
それの上にさらに正規化処理を入れなければならないのですよね・・・。
>>321 クエリ式が分かりにくいと感じるなら拡張メソッドでLINQやればいい
fromからなのはインテリセンス効かせるため
クエリ式なんかただのSQLっぽく見せるためのプリプロセッサなんだから SQL大好き人間以外は使う必要の無いものだよ SQL大好き人間でも最終的には拡張メソッドに適応すべきだろう
LINQってなんて読むの?ラインクエリ?
なるほど、そんなもんなんだ 機能としては、ADO.NETのDataTable.Select();が、より簡単に使えるようになりました的な感じなのね メモリ上にデータをもって検索するとか、xmlから検索するとかに便利そうね つか配列を検索しやすくしましたって感じ? データベースから引っ張ってくるのは結果セットだけ取得して、 それを単に表示させるだけのほうが再計算入るよりパフォーマンスがよさそうなんだがそのあたりはどうなんだろう
328 :
デフォルトの名無しさん :2009/03/22(日) 16:44:47
LINQをSQLに使えばSQL文が生成され データベースに問い合わせされ結果セットだけが取得されるんだよ
>>325 letとか多重from使おうとするとメソッド形式ではちと厳しい。
>>326 リンク。
linkと同じ音で読めってさ。
へー、その場で動的にクエリを生成してくれるのね 難しい処理はストアドに記述してしまうし、 ある程度の決まった処理ならxsdファイルのDataSetに記述したほうが楽そうだけど、 DataSetでは、where文を動的に生成することができなかったから、 それが簡単に記述できるようになるのなら確かに便利かもしれん
ボタンを押したらtextBoxのフォントサイズを 変えようとしてるのですが iの中にはint で18 が入ってる textBox1.Font.Size = i.ToString(); でどうもうまくいきません、どう記述したらよいでしょうか?
ReadOnleyプロパティだからそれ。
やどりぎ+どくどく
>>333 すいません、ありがとうございます、リッチテクストでも同じでしょうか?
EnterpriseLibrary4.1の使い方が全く分かりません・・・ ダウンロードしてインストールして・・・ そこからどうすればいいのか・・・
文字列から数字取り出すのってどうやったら良いですか?1 2でなく12 3 434とかで
>>336 new Regex(@"\d+").Match(str);
ありがとうございますた
linq試してみました 簡単にsqlが取得できるのはすごいね ただアドホッククエリは今までと同じようにEntitySQLとか使って取得するのね 結局は型無しになってしまうし・・・ 簡単にクエリ書けるのはいいけど、ソースコードの中でばんばん書けてしまうと、 mvcモデルの原則に反するんじゃないのかな? 普通に使用するなら型付きDataSetのほうが楽でわかりやすい気がするんだけど、 そうなるとLinqToEntitiesを導入する最大の利点ってなんなんだろう・・・ DBデータの取得、更新を行う再利用可能なクラス(Model)が作りやすいってことなのかな?
340 :
デフォルトの名無しさん :2009/03/22(日) 22:23:24
モデルの中にかけばいいんじゃねーの?
>>339 ビジネスロジック層とデータ層の間を繋ぐもの的な位置づけ。
C++/CLI から来ました。方向性が間違ってたらすみません。
>>305 class RegularizedAngle {
private float InAngle;
public float Angle {
get {
return this.InAngle;
}
set {
if (value <= 0.0) // valueが負値だったら正値にする正規化
this.InAngle = value + (int)(value / (Math.PI*2.0f) + 1.0) * Math.PI*2.0f;
else // valueが正値だったら2πで剰余算する正規化
this.InAngle = value - (int)(value / (Math.PI*2.0f)) * Math.PI*2.0f;
}
}
}
343 :
305 :2009/03/23(月) 02:13:02
>>342 ありがとうございます。処理を見直した結果-3.14〜+3.14までを格納するように改めました。
//角度を格納するが強制的に正規化される型
//doubleとしてアクセスできる
public class RegularizedAngle
{
private double InAngle;
public RegularizedAngle()
{
InAngle = 0;
}
public RegularizedAngle(double i)
{
InAngle = 0;
Angle = i;
}
public double Degree
{
get { return StgUtil.RadToDeg(InAngle); }
set { Angle = StgUtil.DegToRad(value); }
}
private double Angle
{
get { return InAngle; }
set
{
//6.28以上だったら6.28で剰余算
if (value > StgUtil.PIx2) value %= StgUtil.PIx2;
InAngle = value;
}
}
//lはrより左方向 public static bool operator >(double l, RegularizedAngle r) { return AngCheck(l, r.Angle); } public static bool operator >(RegularizedAngle l, double r) { return AngCheck(l.Angle, r); } public static bool operator >(RegularizedAngle l, RegularizedAngle r) { return AngCheck(l.Angle, r.Angle); } //lはrより右方向 public static bool operator <(double l, RegularizedAngle r) { return !AngCheck(l, r.Angle); } public static bool operator <(RegularizedAngle l, double r) { return !AngCheck(l.Angle, r); } public static bool operator <(RegularizedAngle l, RegularizedAngle r) { return !AngCheck(l.Angle, r.Angle); } //lから右回りと左回り、どっちがrへの移動量がすくない? private static bool AngCheck(double l, double r) { return (l + r >= 0); } //ここの処理をなんて書いていいのかわかりません。。。 //doubleを代入された場合 public static implicit operator RegularizedAngle(double f) { return new RegularizedAngle(f); } //doubleを代入された場合 //doubleとして参照された場合 //演算子の動作もdoubleに準拠 public static implicit operator double(RegularizedAngle l) { return l.InAngle; } public override string ToString() { return Angle.ToString(); } } ぐぐってみるとY座標から右回り左回りを算出するという手段がありました。おそらく0度が真右になるからできるんだと思いますが、 このクラスは角度だけを扱いたいので角度(ラジアン)だけから算出したいのです。何か良い方法があったらどうかお教えください。
345 :
デフォルトの名無しさん :2009/03/23(月) 11:08:45
C#はじめて2Weekの新参者ですが教えてください サーバーエクスプローラからTBを選択してForm上にDRAG&DROPすると oleDbDataAdapter1が作成されるのですが、同じmdbの別TBを DRAG&DROPすると別のoleDbDataAdapter2が作られるのですが、 二つのoleDbDataAdapterを作成しなければいけないのでしょうか? oleDbDataAdapter1だけにはできないんでしょうか? C#2003です、よろしくお願いします
嫌です
同意
御意
ザムディン
質問です。 System.Windows.Forms.Formクラスの FormBorderStyleプロパティをNoneにし、 WindowStateをMaximizedにすると タスクバーがフォームに隠れてしまうのは仕様ですか? またFormBorderStyleをNoneにしたまま これを回避する方法はどなたかご存知ですか?
仕様じゃないですかね とりあえずスクリーンのWorkingAreaを MaximizedBoundsに設定したらいいんじゃない?
System.Windows.Forms.Screen から作業領域取得して設定
353 :
350 :2009/03/23(月) 21:37:29
this.MaximizedBounds = Screen.GetWorkingArea(this); で修正できました。 ありがとうございます。
a += b * c; はb*cの結果とaを足してくれるんですか?
それくらい試せよ
なるほど ありがとうございました
a += b * c; は a = a + (b * c); だけど a += b + c; は a = (a + b) + c; 足し算だから結果は変わらない これは試してわかるようなレベルじゃない
結合法則考えればすぐ分かるだろ
a * = b + c は?
a = a * (b + c)
演算子の優先順位なんて基礎だろ基礎 MSDNで「C# の演算子」調べろよ
うそばっかりだなこの擦れ
>>358 こいつ馬鹿
a = a + ( b + c )
だろ
演算子の優先順位が"人から見て"不明瞭な式っていうのは、 括弧で明示するのが基本だと思う。 &&が||より優先されるために条件式を 条件1 || 条件2 || 条件3 みたいに書く(条件1,2,3は各々&&で条件を連結している)とか、 優先順位が関係する定型的な書き方は知っておくべきだけど。
int a = 10;
a += 10 >> 1; // a == 15
a = a + 10 >> 1; // a == 10
つまり a += x op y; は a = a + (x op y);
勝手に問題をすりかえて話をこじらせた挙句、
数行のコードを試せばわかることを「試してもわからない」という
文面とともに間違いを教える
>>358 が謎過ぎる。
見やすくなるけどスピード負担はやや増えるのかな?
なんのすぴーどだよ
島袋の負担は増える 上原の負担は減るんじゃなかろうか
解散しちまえ
プログラマなら上原多香子好きだろ? はしのえみのほうがいい?
http://azumaya.s101.xrea.com/wiki/index.php?%B3%D0%BD%F1%2FC%A2%F4%2FC%A2%F4%A4%C7%A5%DB%A5%C3%A5%C8%A5%AD%A1%BC%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EB%A4%F2%BA%EE%A4%EB ↑にある↓の意味はどういうことですか? if((k & WinApi.HOTKEYF_ALT) != 0) ret |= Keys.Alt; if((k & WinApi.HOTKEYF_CONTROL) != 0) ret |= Keys.Control; if((k & WinApi.HOTKEYF_SHIFT) != 0) ret |= Keys.Shift; return ret;
374 :
デフォルトの名無しさん :2009/03/24(火) 20:54:44
ビット演算だな AltとControlとShiftのビットを立てている
そうか?
!= 0 ←これが気に食わないんでしょたぶん
>>376 そういう風におっしゃるのなら、
>>376 さんは
>>373 のような処理が必要なときはどんなコードにしているのでしょうか?
興味があるのでご教授ください
理由書かない奴は気にするな
理由分からない奴は気にするな
なるほど ありがとうございました
入れ替える必要はなさそうだけどな。
!= 0 以外の良い書き方ってあるんですか?
[flags]enumの比較は if((f & Flag.Hoge) == Flag.Hoge) と行うという例がMSの[flags]関連のどっかに書いてあった。
なるほど ありがとうございました
アホは無理にレスしなくていいよ
質問です フォームを最大化してノーマルに戻して、 フォームのLocationをドラッグで移動したときに フォームのあった矩形領域がデスクトップの左上からの画像になって 再描画されないんだけど (ゴミ箱のアイコンが左上にあったとしたら、 フォームのあった位置の左上がゴミ箱の画像。背景もしかり) 考えられる原因って誰か知ってます? また強制的にFormの裏側をリフレッシュする方法ってありますか?
391 :
デフォルトの名無しさん :2009/03/24(火) 23:36:56
OnPaintみたいなのをoverrideしてるくせに描画してないんじゃないの
他のメーカーのグラボが乗ってるPCでチェクしてからだな
393 :
デフォルトの名無しさん :2009/03/24(火) 23:49:28
とても基本的なことで恐縮ですが質問させてください。 このように呼び出し元のクラスを参照し、値を書き換えるクラスを作りました。 class Target { private int member; Process pro = new Process(10,2) public void Do() { pro.OverwriteTargetMember(this) } } //目標値tgtまでvolずつ加算する class Process { int tgt,vol; public Process(int tgt,int vol) { this.tgt = tgt; this.vol = vol; } public void OverwriteTargetMember(Target tgt) { if(tgt.member != tgt) tgt.member+= vol; } } target.do()するたびにtargetのmember2 4 6 8 10 10 10・・・となる処理です。 本当はProcessをキューに入れて数値の変動を予約できるようにしています。 ですが、このような実装はあまりオブジェクト志向の設計思想に則していない様に感じられます。 このスレッドのみなさんでしたらどのような実装を行いますか? どうかお聞かせください。
なんでそんな変な名前つけてるの?
アホは無理にレスしなくていいよ
名前に意味はありません。 Target=メンバーを書き換えたいクラス Process=引数に渡されたTargetのメンバーを書き換えるクラスです。 要約するとTargetがDo()するたびに数値を変動させたいのですが、 その動作をキューに入れて管理したいのです。 たとえば 0から1ずつ加算して10になるというパラメータをもったProcessクラスと 10から2ずつ加算して20になるというパラメータをもったProcessクラスを順にキューに入れると、 Target.Do()の結果が実行するごとに 1 2 3 4 5 6 7 8 9 10 12 14 16 18 20 20 20 20・・・ となるようにしたいのです。
⌒ ⌒ ____
( ) ゝ/ __ヽ
| | | / | h
, ── 、 __ i
>>376 |-||
/ ヽ / ヽ (|| | /^ヽ
/ /)ノ)ノ // \∧/ ノ /ヽノ
|
>>393 ///⌒ヽ / , ─/ ̄ ̄`─ ´ / ______/
ヽ /)─| ミ| / / ,-─ ′ ─────/
∠ (| |. ヽ__ノ> ( ̄ノ/ / −、 /
∠_ / ` /^\__ >  ̄ |─── |─┬┘ |───/
ノ (__ ヽ___ノ─┴ 、__ノ ̄ ̄/
/ ̄ ̄\┌─ ′ /^−、 -、_/ /_____ /
/ ̄ ̄ ̄⌒ヽ ( 丿 / | /─────/
\ / ̄/ (__ノ ̄ ̄ // /
\/ / // /
Queue<int>にint詰めて順に足せばいいじゃん Processにtgt(目標値)を渡す意味も、そもそもProcessをクラス化する意味も 読み取れない パラメタをvolだけでなく複数にするなら構造体で十分
>>399 申し訳ありません。情報が足りませんでした。
私の作った処理でjはキューした時点では値は確定していません。
キューが実行された瞬間にさらに処理をして値を設定するようにしたいのです・・・。
このように呼び出し元のクラスを参照し、値を書き換えるクラス なら引数にrefを付ける でも、俺なら3つクラス作って別のクラスでpublic void Do()を実装する
402 :
デフォルトの名無しさん :2009/03/25(水) 00:38:17
IEnumerable<int> Process() { for(int i = 0; i < 10; i++) { yield return i; } for(int i = 10; i < 20; i += 2) { yield return i; } while(true) { yield return 20; } } これが一番シンプルだと思うけど 可変の部分があるならその部分を引数にすればいい
>>401 C#でクラスを引数に設定した場合は参照渡しだったと記憶していますが、
あえて明示的にrefをつけるというのはどのような意図を以て行うのでしょうか?
また、3つクラスを作ると仰られましたが、どのように分割するのでしょうか?
Processにあたるクラスは、いろいろな種類を作ろうと考えています。
今回挙げた単純な加算だけではなく、四則、べき乗、などなど・・・。角度を扱う可能性もあります。
もしよろしければご教示お願いいたします。
>>402 かなり私の求めている正解に近いものかもしれません。
頭の中にあった蟠りが一つ解けて、理解が深まりました。
IEnumberableを使うということは考えてもいませんでした。
お答えくださり本当にありがとうございます。
(?_?)
>>403 オブジェクトを渡すときは参照の値渡し
違いはググれ
> 今回挙げた単純な加算だけではなく、四則、べき乗、などなど・・・。角度を扱う可能性もあります。
どこまで裾野を広げたいのか分らないが,四則"計算",べき乗"計算"と計算という概念で分類すればいいんでないか?
あと,角度を"扱う"っていうのが,どういう意味をさしているのか具体的に言わないと扱えないぞい
>>405 角度でラジアンを持ちますが、ラジアンでπ2以上または-π2以下になった場合に丸められます。オーバーフロー防止です。
ですが、よくよく考えてみれば
>>402 さんの処理でreturnするときにreturn i % (Math.PI * 2);などと記述すればよいのかもしれませんね。
このような稚拙な質問に丁寧にお答えくださり本当にありがとうございました。
「オブジェクト志向の設計思想」云々言ってて解が
>>402 ・・・いみふ
もう終わった話題のようだが、 stateパターンのようなことをやりたかったんだろうか?
>>393 (
>>373 >>386 >>376 )
勘違いするやつが現れないように代わりに答えておこうか。
まず先に一言、[Flags] enum に限れば「(e & MyEnum.Foo) != 0」は基本 NG だが
元の例はそもそも [Flags] enum じゃないから関係ない。
で、enum の話しに戻すと、
[Flags]
enum MyEnum { A = 0x1, B = 0x2, AB = A | B }
var e = MyEnum.A;
if((e & MyEnum.AB) != 0) {
Console.WriteLine("I'm AB.");
if((e & MyEnum.AB) != MyEnum.AB) Console.WriteLine("Really?")
}
例え Flags が付いていたとしても、全ての定数が排他とは限らない。
結合定数を定義することは十分有り得るし、Keys のような特殊な例もある。
「... != 0」と書けるのは、事前に列挙定数の具体値に関する知識を持っていて、
大丈夫であることが分かっている場合のみ。
>>407 私の書いたソースではあれがネストしていたんです。
呼び出し元の呼び出し元の呼び出し元の・・・という形で参照しているので、
可読性が大変悪く、動作の高速性よりソースの可読性や整備性を重視したオブジェクト指向の設計思想に反していると感じたのです。
411 :
デフォルトの名無しさん :2009/03/25(水) 09:27:24
オブジェクト指向なんてのは それに従ってさえいればいいコードが書けるというような 万能の方法論では全く無いからな
Formの状態についてお願いします。 状態 通常 最大化 サイズ (800,600) (1280,1024) Formが通常→最大化され、閉じられた場合に 最大化される前のサイズをapp.configにひとつの設定要素として保存させたいのですが、 最大化された後のサイズが保存され、うまくいかないです・・・ Form1_Resizeのイベントでは無理でしょうか?
RestoreBoundsで通常時のサイズを取得できるが。
415 :
デフォルトの名無しさん :2009/03/25(水) 23:05:24
異なるスレッドで作成されたControlをAddすることは可能でしょうか。 別スレッドのContextに設定されたフォームが閉じられた時、そこに使用されていたControlを再利用したいのですが。
416 :
デフォルトの名無しさん :2009/03/26(木) 10:23:18
意味の分からない質問かもしれませんが、 System.Console.ReadLine() を使うと、実行が止まりますよね。 これは何の効果で止まってるんですか? ReadLineの中で何らかのループが回ってるんでしょうか それともsleepみたいなコトになってるんでしょうか 独学でずっとやってきて体系的に学んでいないので思い出したように気になりました 良く意味が分からないかもしれませんがよろしければエスパーしてください。
ループ
t
switch文について VBの場合 case 1,2,5-8 のように一文で複数の判断をさせることができますが C,C#では一つの判断しかできませんよね? これはif文の羅列で処理するしかないのでしょうか? C#で代わりに同じことをやらせる効率のよい方法ないでしょうか?
VBのSelect Caseはelse ifのようなもんだからねぇ 工夫次第かな int a[8] = {1,1,0,0,1,1,1,1}; if (a[i]) hoge(); とすれば1,2,5-8にヒットする
やっぱりそうですか ありがとうございます
>>416 OSは標準入力からデータの読み出しが完了するまで
ReadLineを呼んだプロセスの実行を停止してる。
完了したら実行を再開させる。
納得いかなければ マルチタスク ブロッキングI/O プロセス+状態遷移
なんかでぐぐっておくれ。
>>419 case 1: case 2: case 5: case -8:
>>423 その書き方でいいんですか
5-8のところが不思議な感じですね
これはjavaとかでは無理でC#特有の書き方なんですかね?
とりあえずやってみます ありがとうございました
425 :
デフォルトの名無しさん :2009/03/26(木) 15:49:04
>>422 ありがとうございます。
ググってみます。
426 :
424 :2009/03/26(木) 15:53:31
javaでもコンパイルできました C系統ではOKみたいですね どうもです
おいおい
428 :
423 :2009/03/26(木) 15:56:22
ごめん。アホなこと書いてた
ん?-8がやっぱおかしいの? 全部だめなの?
コンパイルが通ればすべてよし、みたいに考えるのがまずいんだよw 試してみること、ドキュメント探してみること、いろいろやろうぜ。
431 :
デフォルトの名無しさん :2009/03/26(木) 16:02:32
ちょっとワラタw
case 1: case 2: と複数並べるのは確認できました 5-8の範囲はさすがに無理みたいですね
throw new NotImplementedException(); これの仕組みがわからないんですが メソッドの中にドーンと書いてあるんですが 何に対してのエラーを識別するんですか? 指定範囲内のコードで例外があったらとかならわかるんですが これより前後に書いたコードに対して適用されるとかなんですか?
throw new NotImplementedException これはなんて書いてあるかわかる? わかればOK!
投げる 新しい ちがう 実装される 例外
0で除算するメソッドで引数にゼロが代入されていたときなんかに自分で書くんだよ if (引数 == 0) throw new ゼロだぞ( ゚Д゚)ゴルァ!!
わざわざ用意するほどのものなんですか? 好きなところに飛ばした方が話が速いと思うんですが、これって公開ライブラリとかじゃない限り 使う意味ないですよね?
いや、使う意味が無いと思ってる人は使わないよ。問題ない。 同じプロジェクトにいないならな
つーかそんなん、リファクタリング機能でメソッド作ったときに 自動的にできるくらいだろ?
>>433 はな
throw自体が無意味って話に変わったんじゃないの
意味がわかりませんこれプロジェクトのひな形なんですが、何がしたいんですか? 例外時にNotImplementedException()に飛ばしたいのはわかるんですが、 何に対しての例外かが読み取れなく無いですか? コードを追加するときはこの行を消すとかはあり得ないですよね public class ContentProcessor1 : ContentProcessor<TInput, TOutput> { public override TOutput Process( TInput input, ContentProcessorContext context ) { // TODO: process the input object, and return the modified data. throw new NotImplementedException(); } }
throwってなにかね?
でも再利用できる機能をまとめて一つのメソッドに並べる場合は便利じゃね? public boolLogin(string id, string password) { try return _login.(id, password); catch (BadPasswordException e) //ログインできません例外 catch (BadIDException e) //そんなID存在しません例外 catch (ExpireException e) //パスワードの期限切れです例外 } とか
この場合はthrowの前に独自コードを記述してthrowの前に分岐でreturnに飛ばして returnに辿りつかなかったら最後のthrowを実行するように書けばいいんですかね
>>445 やっぱり消すのが自然ですよね
MSのひな形なんですが、このパターン初めてなので消してはいけない理由があるのかと思ったんですが
普通消しますよねTHX!
>>447 実装されてないことを示す例外だから、実装が終わったら消せばいい。
ということ。
setjmp,longjmpと同様に、大域脱出に使われるので、乱用はよくない。 プロジェクトによっては、自前で例外throwするのは禁止してることもあるよ。 だから、必須の機能とは言えない。
あ、禁止ってわかりにくいな。 そのプロジェクトのコーディング規約(≒ローカルルール)で禁止ね。
>>433 要求されたメソッドまたは操作が実装されない場合にスローされる例外。
NotImplementedException を初めて見た時は感心した。 スタブを示す、標準的な例外が用意されているのは便利。 // TODO: とかより、ずっといい。
中身が空なだけで実際にメソッド自体はあるのに、NotImplementedってのも変な話だな。 ぜひ「空関数例外」みたいな名前に変えて欲しい。 俺の中ではNotImplementedはSystem.Reflectionでひっかかったときに投げるイメージ。
勝手に作れよハゲ
NotImplementedException 使うかどうかとかは開発スタイルによるかも しれないなぁと思った。俺は結構使うほう。
抽象クラスのvirtualメソッドに使ったりするかな これを継承したクラスで要るメソッドだけオーバライドして実装 NotImplementedExceptionじゃなくてNotSupportedExceptionでやる場合もあるけど
>>454 中身が空っぽのメソッド作るのは、
「宣言だけして実装してないよ」って感じだと思うんだけど。
C++ みたいに宣言と実装が分かれてないから空っぽの動体付けてるだけで。
>>457 NotSupported は、
「interface 的には実装しないといけないんだけど、
このクラスでは実装しません」みたいな時に使いたい。
NotImplementedExceptionはよく使うなー 午前7時に盲状態でコード書かなきゃいけないときとか頼りになる
レビューで指摘されたんですが usingディレクティブの記述順序がパフォーマンスに影響する事ってあるんですか? 単に視覚的な問題くらいの認識しかなかったので ググってみましたが、そういったソースはみあたりませんでした。 教えて!エロい人!
using の順序が問題になるのって、 拡張メソッドのインポート時くらいしか知らない。
コントロールにイベントを実装しようとおもって、delegateを記述してるんだけど、 メソッドの戻り値がvoidのとき、Func<void, string> _EventHandlerみたいに記述できないの? delegateを記述するの面倒だよ(´・ω・`)ショボーン
おおありがとう(`・ω・´)シャキーン
EventHandler<T>にしようよ。
クラスのメンバで public string Name; とすることと private string _name; public string Name { get { return _name; } set { _name = valiue; } } はどう違いますか?
なんの釣りだよ。
いや本当に違いがよくわからないので教えて下さい
ぐぐったんですか?
プロパティ public privateで試してみましたが書かれているサイトはよくわかりませんでした 何か専門用語があるのかもしれませんがそれがわからないのでぐぐれません
>>467 のコードの通りなら、特に使う上での違いはないのでは?
フィールドをPublicにするのは習慣としておすすめできない、というくらいで。
フィールドをpublicにするくらいなら、自動プロパティにしろ public string Name { get; set; }
>>473 なんでpublicじゃだめなのかを聞いてるのに自動プロパティにしろなんてのは筋違いだろ
private string _name; public string Name{
誰も訊いてない。
class cls { float[,] test; } これって動的配列なんでしょうか? float a = 0; for(i=0;i<100;i++){ for(j=0;j<100;j++){ test[i, j] = a; a++; } } こうやって他のクラスから自由に配列の大きさを決めて格納するのに使えるんですか?
配列は確保するまで使えません 未割り当てエラー出すだけ つーかそのくらい実行してみりゃ分かるだろうが
フィールドをプロパティに変えたときに互換性が取れなくなるから 最初からプロパティにしとけって話だろうけど 再コンパイルすればいいだけだからほとんど意味は無いよね
>>481 そんなの本人じゃないと分からない。単に違いを聞いてるだけに読める。
>>467 の字面通りなら、ほとんど違いはないけど、作法としてパブリックフィールドは
推奨されていない、としか答えようがない。
>>482 少なくとも自動プロパティを使えはおかしいだろ
何をいってんだ?
>>467 プロパティってのは実はメソッド。
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
てのは
private string _name;
public string get_Name()
{
return _name;
}
public void set_Name(string value)
{
_name = value;
}
と書いてるのと同じ。
で、どう違うんだ?
プロパティならそのまま格納取り出しするだけじゃなくて 条件チェックやらなんやら色々できるだろ
そういう理屈なら格納取り出しするだけの自動プロパティって何のためにあるんだよ
今は格納取り出しするだけかもしれないけど後でなんか書きたくなるかもしれんだろ
まずpublicなフィールドとして記述し、アクセサが必要とされた時点でプロパティに書き換えればいいじゃない
フィールドとプロパティではメタデータ上でも区別される
ソースレベルで互換性があればいいだろ そこだけアップデートされるようなライブラリを作ってるなら別だけど
使いたくなきゃ使わなきゃいいじゃない
じゃメンバ関数をpublicにするということと等価ってこと?
もうそれでいいよ
屁理屈すぎてもう面倒臭い
自分の理屈に合わない理屈は屁理屈ということにしたいんですね わかります
>>497 まるですじの通らない理屈とは思えないが?
>へ‐りくつ【×屁理屈】
>まるですじの通らない理屈。道理に合わない理屈。「―を並べる」「―をこねる」
フィールド直接触るとかやめてくれ・・。 未来の自分でさえ信用できないのに、他人の利用者を信じれるわけがないだろJK
いやいや好きにやりゃいいじゃん そいつにとってフィールドもプロパティも一緒つーなら それ以外の使い方しないんだろうから どうせ個人でやるだけだろうしw
じゃ違うの?
Control.DataBindingsと組み合わせるならpublicフィールドの選択肢は無いけどね。
なんで?
>>503 FormにTextBox2つ貼り付けて
class MyData
{
public string PublicField;
public string PublicProperty { get; set; }
}
作って
textBox1.DataBindings.Add("Text", data, "PublicField");
textBox2.DataBindings.Add("Text", data, "PublicProperty");
として動かしてみたらわかる。
PublicFieldはDataBindの対象にならない。
>>501 ,503
その頭の悪そうなレスはやめてくれ
パブリックプロパティを自動実装すると パブリックフィールドを直接公開するよりも一般に良いということを示さない限り 一般にプロパティにするべきだという理屈は屁理屈でしかないだろ
なんでそこまで拘るんだw 自分しか使わない&拡張する予定がなければフィールド使えばいいじゃない。
509 :
デフォルトの名無しさん :2009/03/29(日) 13:27:47
>>508 拡張する予定があっても他人が使っていても
フィールドで問題ないだろ
どういう時に問題が起きるわけ?
フィールドで問題ない問題ない
はいはい、その通りですね。 君はパブリックフィールド使えばいい。私は今まで通りプロパティ使うけどな。
はいはい、その通りですね。 君はプロパティ使えばいい。おいらは今までどおり使い分けるけどな。
春だな さすがに今日は言っても文句ねえだろ
桜も咲いてるしな・・・
・get setを制限する必要がない ・setされた値を事前に評価する必要がない ・バッキングストアを仮想化する必要がない ・プロパティ自体をvirtualにしたりsealedにしたりする必要がない など、すなわち単なる「変数」であれば、プロパティのほうがコストが 高いのは明らかだから、あえてプロパティを使わずフィールドを公開して 構わないと思うよ。 また、将来上記のうち上3点(最後の1点はまるっきりの変更なんで別だが)の 方針が変更される可能性があったとしても、その時点でフィールドを プロパティに変更すればソースレベルでの互換性は保てるので、問題ない。 (ただし、公開クラスライブラリで、バイナリ互換性が必要な場合を除く)
516 :
デフォルトの名無しさん :2009/03/29(日) 14:21:23
setを制限したければreadonlyにすりゃいいじゃん
明示的に初期値が設定できない自動実装なんて
プロパティもインライン化されればコストは変わらないんじゃないの
自作クラスを2つのプロジェクトで使いたい場合、使いたいクラスはどっちのプロジェクトに含ませればいいんですか? 今どっちのプロジェクトにも同じクラスを書いていて修正するときなんか無駄があるような気がしてきました この場合どっちのプロジェクトにも含ませない方法とかがあってそうした方がいいんでしょうか?変更は頻繁にするんですが
>>519 片方のプロジェクトからもう1つを参照してもいいし、
別にライブラリプロジェクト作って、それを2つのプロジェクトから参照してもいいし、
ソースを「リンクとして追加」もできるし。
できました。ありがとうございました 読み込まれるプロジェクトの順番が大事なのかとか変な方向に考えてましたどうもです
>>522 event キーワードがついてると、普通のフィールドじゃなくなる。
プロパティのデリゲート版みたいな状態のなので、
そのまま公開されてるわけじゃない。
そうなんだ意味が違うんだね サンクス
ReadBytesで2次元配列に格納する方法がわかりません これは1次元としてしか扱えないんですか?
MSのデータベース関連のサンプルにちょくちょく出てくる サンプルデータの名前。 航空会社かなんかのデータっていう想定のサンプル。
>>527 後者のリンクにある、サンプルデータベースじゃないの?
VS2008EEでプログラムを勉強してる素人です。 拡張コントロールをいくつか作ることで、継承のありがたみは 少しずつ理解できてきたところなんですけど、 インターフェースや抽象クラスの存在意義がなかなか理解できません。 インターフェースの実装を明示することで その機能が実装されてることが一目でわかるというようなこと以外にメリットが思いつかないんですが 大規模なものを書かないとそこら辺の概念は理解できないものなのでしょうか。
531 :
デフォルトの名無しさん :2009/03/30(月) 00:14:27
うぐ、あげちまった
ありがとうございます。読んでみます。
534 :
530 :2009/03/30(月) 00:17:11
↑530=533です。ID出ないの忘れてました。
>>530 インターフェースと抽象クラスの説明は確かに難しいのかも
例えば家電でいうと・・・
・抽象化
家電は電気製品なのでどんな製品にも必ず電源のオンオフスイッチがある→抽象クラスで記述
・インターフェース
家電は電気製品なのでどんな製品にも必ず通電する必要がある→
だけど電源を供給する方法は、コンセント、電池、バッテリー、ソーラーパネルと多種多様なので、
電源を供給するための端子は付けておくけど、実際の供給方法は製品に任せる
こんな感じ?
537 :
530 :2009/03/30(月) 00:42:32
>>535 なるほど。既に定義されてるインターフェースを使ってみたら
だいぶそういう概念が理解できてきました。
もっとも自分で定義して実装する必要性を感じるには
もっと大規模なコードを書く必要があるみたいです。
少しずつ使えるようになりたいと思います。ありがとうございました。
>>537 stringをフィールドに持つクラスと、intをフィールドに持つクラスで、
それぞれ共通に名前を持つフィールドを持ち、
さらに、それぞれstringに保存された文字列の文字数とintに保存された数字の桁数を取得するメソッドを
interfaceを用いて取得する方法を記述してみれ
abstract public class BaseClass
public string Name { get; set; }
public class StringClass : BaseClass
public string StringData{ get; set; }
public class IntClass : BaseClass
public int IntData { get; set; }
ここまではわかるっしょ
>>538 先生!なぜabstractのBaseクラスを定義しているのかわかりません!
その場合インターフェイスじゃなくて
abstract int GetLength();をBaseクラスに書くのが適切だと思います!
boolのような論理値やimageを格納するclassもあるので、 すべて一様にGetLength()が適用できないんです>< でも、それぞれ名前はもってるんです><
Interfaceってのは、RubyやPythonなんかの動的型付言語なら不要だけど、 C#みたいにコンパイル時に確定してないと我慢できない潔癖な処理系に 対して、私はこのメソッド持ってますよと、とりあえず宣言するための 姑息な手段。 うっかり安心して呼び出すと実体は、 throw new NotImplementedException();と書いてあるだけなので、結局 1行目と同じ結果になる。 って、あんまり夜中にアンサイクロペディアとか読みふけってちゃ駄目だな。
>私はこのメソッド持ってますよと、とりあえず宣言するための姑息な手段。 リフレクションで代用できないの? それはともかく、まぁ、姑息かどうかはわからんけども、 interfaceを継承してるクラスは、そのinterfaceで宣言した型にキャストして実行できるから、 メソッドを持っていますよと、とりあえず宣言するためだけの手段ではないんでないの? キャストできますよという意味と同義で書いてるのならその通りかもしらんが。
543 :
539 :2009/03/30(月) 02:22:10
>>540 interfaceだって戻り値がintのGetLength()作ったら同じことではないの?
abstract int GetLength()をovarrideするのと何が違うの?
俺の言いたかったのはinterfaceの例題を出すなら抽象クラスを使ったら駄目じゃないのかいと言いたい。
>>538 のサンプルの場合
public Interface ISample
{
int GetLength()
}
を定義したとしてそのInterfaiceを実装するのはBaseClass?それとも
IntClassや StringClass?
BaseClassがInterfaceを実装したとして
publice abstract int GetLength();
544 :
539 :2009/03/30(月) 02:26:17
を定義して IntClassや StringClassがそれをoverrideするなら GetLengthを呼び出す側はわざわざInterfaceで呼ぶ必要もなくなるわけで。 IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元
>>543 >IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元
すべてはobject型を継承するのは混乱の元?
>interfaceだって戻り値がintのGetLength()作ったら同じことではないの?
違うでしょ
bool型などの論理型にはGetLength()は必要ないわけで。
その理屈をとことん突き詰めれば、すべては同じobject型を継承しているので、
objectクラスにGetLength()を作って、それをoverrideするなり、privateにして隠蔽すればいいことになる。
>そのInterfaiceを実装するのはBaseClass?それとも IntClassや StringClass?
インターフェースを実装するのはintclassやstringclassだね
intclassやstringclassをキャストしてISample型のarrayに保存したり、
is ISample で型を確かめてGetLengthを実行したりとか。
>>543 じゃ、お題をこんなふうにすればいいかい?
stringとintとboolをフィールドに持つクラスで、
それぞれ共通に名前を持つフィールドを持ちながら、
さらに、intとstringを持つクラスだけに、stringに保存された文字列の文字数と、
intに保存された数字の桁数を取得するメソッドをinterfaceを用いて取得する方法を記述してみれ
ただしBoolClassは論理値なので桁数とかないので桁数を取得するメソッドは追加する必要はない
abstract public class BaseClass
public string Name { get; set; }
public class StringClass : BaseClass
public string StringData{ get; set; }
public class IntClass : BaseClass
public int IntData { get; set; }
public class BoolClass : BaseClass
public bool BoolData { get; set; }
こんなんでいい?
547 :
539 :2009/03/30(月) 02:56:29
>>545 >>IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元
>すべてはobject型を継承するのは混乱の元?
継承が悪い(混乱の元)とは言っていなくて、
抽象クラスとInterfaceの使い方を知らない人に
Interfaceの例題を出そうとしてabstractクラスを使っちゃ混乱するでしょと言いたいの。
>>interfaceだって戻り値がintのGetLength()作ったら同じことではないの?
>違うでしょ
>bool型などの論理型にはGetLength()は必要ないわけで。
例題に
class boolClass:BaseClass なぞ書いていないでしょw
>その理屈をとことん突き詰めれば、すべては同じobject型を継承しているので、
>objectクラスにGetLength()を作って、それをoverrideするなり、privateにして隠蔽すればいいことになる。
どう突き詰めれば
>>538 のBaseClassにGetLength()を定義することがこんな解釈になるのか謎w
>>そのInterfaiceを実装するのはBaseClass?それとも IntClassや StringClass?
>インターフェースを実装するのはintclassやstringclassだね
IntClassやStringClassがInterfaceを実装するなら話は分かるんだけど、
例題に IntClassやStringClassがInterfaceを実装するとどこにも書いてないわけで。
BaseClassがInterfaceをabstractで実装してサブクラスがoverrideすることもできるわけで
話が混乱するでしょ。
結論:初心者に例題出すなら もっといい例題を出そうね。
548 :
530 :2009/03/30(月) 03:00:38
水を差すつもりはないですけど ぶっちゃけお二人(だと思うけど)の議論を見てるだけでも勉強になります 経験を積んだ人間に話しを聞ける環境にいないので 自分の理解の甘さが改めて実感できて、素人にはありがたいッス。
>>547 面倒くせぇなあお前
もし返答があったら、単にinterfaceで記述しただけじゃ抽象クラスに記述するのと同じだから、
>>540 で記述したように抽象クラスで実装できない例の存在を示して、
interfaceの型で宣言した変数にキャストして実行できる利点を記述しようとおもったら、すべて台無しじゃねーか
>>548 というわけで関係ない人がすべて解答してくれたわけで答えが出てしまったわけだが、
まあ、なんだがんばれ
550 :
539 :2009/03/30(月) 03:09:41
>>546 そんなんでいいと思います。
ただ BaseClassをabstractにする必要はないかも?
newさせたくないっていう理由でabstractクラスにするとしても
例題としてはabstractいらないかも。
2次関数を知らない人に教えるときにいきなり
(sinx)^2 + (sinx) + 5 = 0
みたいな合成関数で例題出されたら混乱すると思う。
丁寧に教えるならシンプルにしてあげないと。
551 :
530 :2009/03/30(月) 03:16:51
>>549 いや、本当に勉強になります。
問いを与えてもらえて良かったです。
538辺りからをもうちょい読み返してみます。
552 :
539 :2009/03/30(月) 03:25:40
>>549 >面倒くせぇなあお前
ありがとう
>もし返答があったら、単にinterfaceで記述しただけじゃ抽象クラスに記述するのと同じだから、
>
>>540 で記述したように抽象クラスで実装できない例の存在を示して、
>interfaceの型で宣言した変数にキャストして実行できる利点を記述しようとおもったら、すべて台無しじゃねーか
小出しにするほうが面倒くさいと思う。
>小出しにするほうが面倒くさいと思う。 んなこと理解しててわざとやってるっていってんの。 後で反証を説明したほうが効果的に理解してもらえるかなと思ったから。 >>面倒くせぇなあお前 >ありがとう そのわざとやってるところにチャチャいれられてすべて台無しになってるから面倒くせぇっていってんの 面倒くさいの質が違う わざと言ってるんだろうけどw
using(@) {A} で、@では自作ログ出力クラスのインスタンスを生成しています。 この際、インスタンス初期化時にログファイルを開けない場合は StreamWriterのコンストラクタが出力する例外をそのままthrowするのですが、 それをcatchするには、 try {using(@) {A}} みたいに全体を囲わないといけないのでしょうか。 この場合、Aまでtryに含まれてしまうのが嫌なのですけど・・・。
Log log = null; try { log = new Log(); } catch (...) { throw; } using (log) { } なんてのもできんではないが全体try-catchでいいと思うよ
try { MyLogger logger = null logger = new MyLogger(); // ... } catch (MyLoggerException myloggerex) { if (myloggerex.InnerException is IOException) { // ... } } finally { if (null != logger) { logger.Dispose(); } } 自作ログ出力クラスが独自の例外を送出するようにすればよくない?
AクラスをBクラスのメソッドの引数として渡した場合はアドレス参照で渡されるのはわかりましたが そのメソッド内で、渡されたAクラスをBクラスのフィールド宣言に代入した場合もアドレスが保持されるだけなんでしょうか
アドレス参照って誤解を言い方を止めろ 参照渡しと値渡しだ 参照型は指定しない限り常に参照のコピーを取るだけ 値型は常に値そのもののコピー
>>558 参照渡しと値渡しと
参照型と値型は別物ぞよ
561 :
554 :2009/03/30(月) 22:48:41
>>555-556 ありがとうございます。
独自の例外を作って、tryは今まで通りusing全体を囲うのが一番シンプルになりそうですね。
独自の例外なら問題なくcatchで切り分けられるし。
すみません、質問いいですか? 例えばラベルをある数だけ生成したい場合コントロールの名前はどうつけたら いいのでしょうか? デザイナで置くとlabel1とか自動で付きますよね forループで廻すとなるとどうするのでしょうか・・・
意味不なんだがエスパーすると。 forループの中でコントロールを自分で作る。
こういうことをやりたいのか? for (int i = 0; i < 100; i++) new Label() { Name = "label" + i.ToString() }
まさにそれです 自己解決しました
まさにそれですって …自己解決ちゃうやん
ワロタ
569 :
デフォルトの名無しさん :2009/03/31(火) 23:52:30
.NET 2002(C#) で FTPクライアント処理を実装したいのですが、 おすすめのライブラリはありますか?
質問です。 埋め込んだリソースファイル(WAVE)を指定した場所に直接コピーしたいのですが どのように記述したらできるのでしょうか?
ストリームを直接ファイルストリームに出力すればいいんでね?
574 :
デフォルトの名無しさん :2009/04/01(水) 01:40:38
すいません。質問です。 フォームにデザイナで追加したコントロールには、何か、インデックスのようなものが割り振られてたりはしないのでしょうか? 自分はボタンをデザイナで一個一個大量に配置してしまったのですが、 それをプログラムコードから利用するときにめんどくさくて大変です。 最初から配列でとっておけばよかったと今では後悔していますが、 今からでも添え字があれば、それを元にエレガント且つ簡潔にコードからの利用が可能になるはずです。 誰かうまいやり方など知ってる方がいらっしゃいましたらお教えくださいませ。
作り直せば?
自分で配列に入れるコードを書けばいいじゃん。
>>574 >フォームにデザイナで追加したコントロールには、何か、インデックスの
>ようなものが割り振られてたりはしないのでしょうか?
ない
プログラム内で配列でコントロールを生成して使ったことがある。
Control.Controls
なんと、そんなのが有ったのか・・・
>>577 のないは訂正だ。
類似質問ですが グループボックス内にテキストボックスやプログレスバーなどが沢山あり それを実行時にグループボックスごと追加する場合 ユーザー定義コントロールを作ってnewするのがいい方法なのでしょうか? 又、その場合ユーザー定義コントロールの作り方が良くわかるサイトなどご存知ないでしょうか? 宜しくお願い致します。
581 :
デフォルトの名無しさん :2009/04/01(水) 03:10:49
583 :
568 :2009/04/01(水) 03:53:22
別のスレで聞いてきます。どうも〜
質問です。 今使用しているアンマネージDLLに int WINAPI hoge(float *p, int size); のような関数があります。 float *pは呼出元で確保した配列のポインタなのですが、16バイトアライメントされている必要があります。 C#でアライメントを考慮した配列を確保する方法などあるのでしょうか?
[StructLayout(LayoutKind.Sequential, Pack=16)] struct Test { データ }
yield の使い道って何かあるのでしょうか? なんとなく気になって@ITとか見てみたんですがなんかわかりづらい・・・・ わかりやすい解釈のページとか教えていただけると助かります。
列挙処理書くならかなり便利なんだけど。
>>587 そのような記述を多く見るのですが・・・orz
いかんせん読解力が無いようで・・
>>588 今は大抵 LINQ の標準ライブラリであらかた機能がそろうけども、
特定の条件だけ満たす要素を取り出したり、
特定のプロパティの値を取り出すような関数書いてみ。
それも、いったん new List() するんじゃなくて、遅延評価で。
>>588 すべてを終えるには時間のかかる処理をしながら、条件を満たした項目から表示していくプログラムを作れば理解できるよ
記憶領域を使わないですむし、演算の終わった項目から並列処理にかけたりできるしね
yieldは別に速くはならないだろ
>>589-590 ありがとうございます。
そういう条件でちょっとサンプルでもつくってやってみます。
最近更新してないと思ったらやはり板移転検出してた・・・
>>593 情報ありがとうございます。
こういう使い方が出来ると言うことなんですね。
確かに
>>599 が言うように
>特定の条件を満たす要素を・・・
というのはその通りかと
処理がそれを呼び出す側ですっきりしそうです。
使い道が少しですがわかった気がします。
タイミングさえあれば今度どこかで実装してみようと思います。
質問ですが、 aspxでファイルにResponse.Redirect(ファイルURL)でダウンロードさせてるんですが、 複数ユーザの同時アクセス数を制限するにはどうしたらいいのですか? 例えば上限を10にしておいて同時アクセス数が11になったらエラーページに飛ばすみたいな。 static Queue _queue = new Queue(); static object _lock = new object(); page_Load() { lock(_lock) { if(_queue.Count > 10) Response.Redirect(ErrorPage); _queue.Enque(new object()); } try { Response.Redirect(DownloadURL); } finally { lock(_lock) { _queue.Deque(); } } } こんなんしか思いつかないんですが・・・ 定石みたいなのあるのでしょうか。
597 :
596 :2009/04/01(水) 13:32:33
>>596 に追加で
ダウンロード時間を30秒と決め付けて
finally句でDeque前に
Thread.Sleep(30 * 1000);
598 :
596 :2009/04/01(水) 14:44:42
Sleepじゃ駄目だ〜(T_T) あと DequeueのlockとEnqueueのlockでデットロック起こしてる〜(T_T) ってワケで作り直し。 private volatile static Queue _queue = new Queue(); protected void Page_Load(object sender, EventArgs e) { if (_queue.Count >= 10) { Response.Write("混雑してます 同時アクセス数" + _queue.Count); Response.End(); } _queue.Enqueue(new System.Threading.Timer(new TimerCallback(tmr_Tick), null, 10 * 1000, System.Threading.Timeout.Infinite)); try { Response.Write("同時アクセス数" + _queue.Count); Response.End(); } finally { System.Diagnostics.Debug.WriteLine("finally"); } } private static void tmr_Tick(object state) { _queue.Dequeue(); System.Diagnostics.Debug.WriteLine("Deque Count" + _queue.Count); }
それでできる? 俺なら、外部(データベースとか)に、接続数を保持しとくな。
共有リソースへのアクセス数を制限するならセマフォ使えばいいしょ
601 :
596 :2009/04/01(水) 17:28:08
>>600 セマフォ使ってみました。
5スレッドまで。1秒待っても駄目だったら混雑中。
private volatile static Semaphore _pool = new Semaphore(0, 5);
static Default() {_pool.Release(5); }
protected void Page_Load(object sender, EventArgs e)
{
if (!_pool.WaitOne(1000))
{
Response.Write("混雑しています。");
Response.End();
}
try
{
Response.Redirect(URL);
}
finally
{
Thread t = new Thread(() => {
Thread.Sleep(10 * 1000);
int cnt = _pool.Release();
System.Diagnostics.Debug.WriteLine("cnt " + cnt);});
t.Start();
System.Diagnostics.Debug.WriteLine("finally");
}
}
}
初心者なので、用語の使い方を間違っていたらすみません。 良く経験の長い方のレスなどを見ていると フレームワークを拡張するというような記述がありますが 具体的にはどのようなことをいうのでしょうか。 フレームワーク内で既に定義されているクラスを 継承して拡張した自分なりのクラスを持っているという理解で正しいでしょうか。 また、拡張したフレームワークを使用してアプリを作った場合 そのアプリは、拡張されていないフレームワーク上ではキチンと動作しないものなのでしょうか。 よろしくお願いします。
フレームワークの拡張という言葉はあまり使わない気がする フレームワークってのは、機能を簡単に使えるようにした壮大なライブラリ(クラス)群で、 料理で言うところの味噌や醤油のような調味料の集まりみたいなもの。 この調味料を継承して拡張して機能を自作で追加すると、 パスタにかけるだけで美味しいパスタができるというトマトソースを作ることができる。 フレームワーク(調味料)さえあれば、トマトソースのできる調味料が揃っているので 作ることはできるけど、レシピは教えてあげないと作れない。 そのレシピはdll(ダイナミックリンクライブラリ)といってレシピの集まり。 これを配布してあげることで、同じフレームワークを持っているPC上であれば、 どれもおいしいトマトソースのパスタを作ることができるという感じ。
一般的な意味での「フレームワーク」と、.NET Framework は違う層だから、 そこは気をつけてね。
605 :
602 :2009/04/01(水) 21:12:05
言葉から、フレームワークそのものを追加・変更するような想像をしていたんですが 独自に拡張したクラスライブラリを作成するということだったんですね 納得いきました。ありがとうございました。
横槍だけど フレームワークはライブラリより広義の「手法」的な意味だとおもうんだぜ? 機能群はライブラリで,(利用法とか運用法も含めた)方法論的な意味でフレームワークって良く使う
>>601 横ですが、Semaphoreはそうやって使うんですね
参考になりました
階層が深くて扱いづらいintの変数に別名を付けるにはどうすればいいんですか? int a = bbbb.ccccc.ddddd; とすると値のコピーになりますよね これを参照にしたいんです
usingだめ?
それクラスの外に書くやつですよね クラスで管理したいです
ワラタ
そういうものが必要になることじたい何かおかしいのだが、 プロパティにしたらどう? int A { get { return bbbb.ccccc.ddddd; } set { bbbb.ccccc.ddddd = value; }}
unsafeだめ?
>>611 そっちか。それだめです期限付きでその中ではコピーされますよね
参照がいいです。
・・・・・・(;´∀`)
だからunsafeつかって好きにかけや
FontDescriptionという構造体を呼び出すときに fd = new Microsoft.DirectX.Direct3D.FontDescription(); としているんですが 次のエラーが出てしまいます 次のメソッドまたはプロパティ間で呼び出しが不適切です: 'Microsoft.DirectX.Direct3D.FontDescription.FontDescription()' と 'Microsoft.DirectX.Direct3D.FontDescription.FontDescription()' ビルドしてみるとエラーがあるにもかかわらず問題なく動いているようです これはどうすればいいんでしょうか
質問です。 class HogeCollection : IEnumerable<Hoge> のように、IEnumerable<T>を実装したコレクションのインスタンスがあるのですが、 そこから動的にHogeの型を取得するにはどうすればよいのでしょう?
リフレクション
GetType().GetInterfaces().First(i => i.Name == "IEnumerable`1").GetGenericArguments()[0] かな もっといい方法もありそうだけど
>>613 それも値がコピーされて格納されるじゃん
一瞬でも複製を作りたくないんだけど
ほんとに引数にref指定してその中だけで使えるように渡すしか値型を参照で保持する方法はないの?
>>621 Nameを使うと誤判定の可能性があるので、
オープンジェネリック型を使った方がいいな
GetType()
.GetInterfaces()
.First(i => i.GetGenericTypeDefinition() == typeof(IEnumerable<>))
.GetGenericArguments()[0]
structのこといってんの? 一瞬でもコピーされるのの何が問題なのかわからんから答えようがないよな
unsafeでポインタでFA
unsafe対応してないの!
すまんunsafeしかないってことか 構造を変えるわ、あきらめたthx
>>622 初心者スレに行って質問の仕方から勉強しなおしだな
>>622 それくらいの余計なコピーの作成くらい、実行時には最適化で消えると思うよ。
もしかして、複数スレッドから読み書きされるからコピーされると困る って話なのか?
たぶん異なるスレッドから見てるんでしょ 関係ないけど 参照でコピーしても、そのポインタを保持してるんだからメモリの節約にはならないんだっけ?
ただ呼び出しがめんどいってだけじゃね?最初の質問からすると。 最後にまた代入すりゃいいじゃんって思うけどねw んで質問ですけど、unsafe使って問題になることって何ですか? unsafe内のコードに問題が無いという前提で。
関数の引数でref使う方法もなくはないけど、 aliasをサポートする別の言語を使うしかないな。C++/CLIで何とかならなかったっけ? C#でもこういう裏技はあるけど正直おすすめしない。 int hoge = 0; TypedReference tref = __makeref(hoge); __refvalue(tref, int) = 5; Console.WriteLine(hoge);
>>633 >unsafe内のコードに問題が無いという前提で。
その前提が"成り立つ事を保障できない"事こそが最大の問題だと思うのだけど
インテリセンスではエラー波線でないんですが、 オブジェクト参照がオブジェクト インスタンスに設定されていません。 というエラーが出るのですが、なんでですか?
オブジェクトがnullなのにメソッドを呼び出したかなんかしたんだよ
宣言時に値は入れてるんですが、起動時の順番が問題で宣言がまだ見つからないってことですか?
639 :
デフォルトの名無しさん :2009/04/02(木) 20:06:40
入れてると思ってるだけで入ってないんだよ ぬるぽってやつだよ
∧_∧
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__∧∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>639
pub class a pub int data = 500; pub class b pub int data; pub b(a aa) { data = aa.data; } でdata = aa.data;でエラーでるんです
642 :
デフォルトの名無しさん :2009/04/02(木) 20:10:40
aaがnullなんだよ
>>635 そりゃそうなんだけど、それ以外にもなんかあるのかなーと思ったけど
それ以外ないわな。unsafeは使用禁止とか普通にあるだろし
今回の参照の件とかはそれほど問題にする意味もないのかなと考えてたけど
まぁunsafeなんだし、使わなけりゃ一番問題ないな
>>642 ありえないです。class bをaaを渡してnewした時初めてthis.dataに入れようとしますよね
ここでエラーになるってことはaaは入ってるんです
ブレークポイント設定してaa.data;のところにカーソルあててみなよ aaがnullになってるから
nullになってました 自信あったのにショックです ありがとうです
エラーが出てるけど、自信があるのでデバッグしません!
>>634 ref 使う方法。変態のきわみだ。
delegate void Alias(ref int i);
static void Main() {
int bbbb_ccccc_ddddd = 0;
((Alias) delegate(ref int i) {
i = 98765;
})(ref bbbb_ccccc_ddddd);
Console.WriteLine(bbbb_ccccc_ddddd);
}
事前にエラーがわかる静的言語は便利なことがよくわかるよな 特に初心者の人にとっては
構造体の初期化はどうかけばいいのでしょうか Vector3 a = {0.0f, 0.0f, 0.0f};
コンストラクタが使えるだろ
Vector3 a = new Vector3(0.0f, 0.0f, 0.0f);
構造体内にコンストラクタを書いてそこで初期化
thx!
>>633 部分信頼とかセキュリティ上の理由でunsafeコードを実行させてくれない仕組みに引っ掛かるとか。
struct Data { int a, b, c, d, e......; } class Cupsel { Data data; }
>>655 はーなるほど。そういう仕組みがあったのねぇ
セキュリティポリシーによるようだね。通常はローカルだと問題ないのかな
今までなんも考えなかったわ。ありがとう
System.Drawing.Graphics g = Graphics.FromImage(backBuffer); g.Clear(Color.Black); g.DrawImage((Image)image, new Point()); Graphics.FromHwnd(panel1.Handle).DrawImage((Image)backBuffer, new Point()); WinFormsで、高速に、ちらつかせずに画像表示をさせたいんですが どうやるのがいいんでしょうか? 描画するまで画面を更新されないようにするやり方がわかりません・・ それと、加算合成とかをするにはDrawImageでは無理そうですがどうすれば。
ちらつき防止はコントロールのDoubleBufferedでいけるんじゃないの? あと、Graphics.FromHwnd(panel1.Handle)よりもpanel1.CreateGraphics()のほうが普通だと思う。
何だろう。よく分からんけど、バージョン違いのアセンブリを参照してるとか? 参照設定はどうなってる?
>>660 usingディレクティブの別名は名前空間と型名だけだったと思うが、
質問者は変数の別名が欲しいといってるんじゃないのかな?
>>662 DirectX関係で参照してるのは
DirectX
Direct3D
Direct3DX
DirectInput
DirectSound
です
Direct3DXのバージョンは1.0.2911.0で他のものより新しいのを使ってたんですけど
バージョンをそろえてみても同じエラーが出ます
アクセス制限機能つきのアプリを作りたいです。 ユーザ権限やパスワード管理機能つけたいんだけど、 一から作るしかないですか? .NET Framework 2.0 ならいいライブラリがありそうだけど見つけきれません。。。
使ったことないけど、System.Security名前空間から適切な制限を見つけてDemaidメソッド呼び出せばいいんじゃね?
System.Windows.Form.WebBrowserをIE8に変更できませんか? OSのIEは8に更新しました Vista + VS2008 です
windowsアプリで自動アップデート機能をつけようと思うのですが Program Files以下のファイルを更新するときは 管理者権限が必要ですよね。 Vistaの場合管理者でログインしても 普通にアプリを実行するとWindowsPrincipalはUserになっちゃいますよね。 右クリックで管理者として実行を行わないと 管理者権限で実行されませんよね。 そのため自動アップデートによるアップデートができないと思うのですが、 世に出回っているVista対応アプリはどうやって対処しているのでしょうか?
672 :
668 :2009/04/03(金) 15:21:40
>>669 さん
確認くんで調べたらIE7のままなんです
>>672 その結果を貼り付けてみ。互換モードになってるとかの落ちじゃないよね?
675 :
670 :2009/04/03(金) 16:08:08
>>671 ユーザが意図的に管理者として実行をして、
昇格をしてもらわないとアップデートできないので、
世に出回ってるアプリはどう対応してるのかということを質問しています。
普通に実行したときはバージョンアップの通知だけで、
通知があったら「管理者として実行」してもらうと言うことになるんでしょうか。
でもそれだとUACを知らない、年配などのライト層は
ずっとバージョンアップできないってことになりますよね。
しかもそれって、自動アップデートではないですよね。
>>675 よくわからんけど、セキュリティソフトなんかは予めUAC昇格させる設定を
ユーザーにさせてるんでないの?
都度か一括かの違いで
>>675 つか、何言ってんの?
「管理者として実行」しなくても、UAC の昇格を行うことはできるよ。
一般的な方法としては、マニフェストを書いておいて、そのアプリを呼び出す。
新しいバージョンがあるかを確認するアプリと、実際に更新をするアプリに分ける、
って感じだね。
Firefox も、ATOK も HP のプリンタドライバも、そんな感じでやってると
思うけど・・・。
Google ChromeがAppData内にインストールされるのは UACの昇格なしでアップデート可能にする為だって話を聞いたことがある
>>677 何言ってんのか分からないのに答えられるってすごいなぁ。
しかも最後、自信なさげなところがなんとも。
XPユーザーとしてはUACの昇格とかわけわかんないし怖いよ 今はそんなのも気にしなきゃならんのか
VistaユーザーだってUACなんか訳わからんよw Linuxみたいにアクセス権限だけでいいだろって突っ込まれまくりだろ
>>679 「UAC 昇格起動」と「修辞的疑問文」でくぐってからまた来てね。
全世界の奴がMSに文句つけまくっていじめまくった結果がこれだよ そして無意味なセキュリティをつけたらフルボッコだよ
>>684 × 全世界の奴
○ 狂ったLinuxユーザー
なんでLinuxユーザーが文句つけるんだ
>>680 ClickOnceって.NETアプリ以外でも使えたのか
ClickOnceと同じ場所を使ってるだけかと思ってたよ
>>687 正確には、インストーラとして使ってる、ってとこかと。
そのおかげで、統合認証以外のプロクシを使ってると、インストールすらできないw
>>675 Verb を runas にしたら昇格するよ。
アップデータの PE わけて起動させたほうがいいかもしれないけど。
なんとなーく勘違いしてそうなので UAC についてプログラマの視点から
指摘しとくと、昇格ダイアログ出すまではプログラムで可能。
OK ボタン押したら昇格ダイアログ→OK → アップデートってやるんだよ。
あとアップデートに関して言えば、パッチパッケージにすれば明示的な
昇格はいらない(ポリシーにより不可になるし署名が要るけど)。
Program Files 以下でも。実は古くからある機能だが。
実際には、パッチは管理や検証がめんどくさくなるのであまり使われな
いけどな。
>>681 Vista ユーザーからしたら XP の何もなく管理者で動くの不安になる正直
かといって Users で使おうとしたら不便極まりないし。両立できてかなり
いい機能だと思うがなぁ >UAC。リダイレクトとかの機能含めてな。
>>665 はい、CS0121です
引数なしのコンストラクタを呼び出しているのに
二つ選択肢があるっていうのがちょっと理解できません・・・
ヘルプのコンパイラ エラー CS0121の使用例は理解できるんですが・・・
エラーは吐いているんですがビルドできるし正常に動作しています
それも理解できないし気持ち悪いです
int a=0,b=0,c=0; int line_count = arrText.Count; ar_OKPOS = new List<int[]>[line_count]; for (int i = 0; i < ar_OKPOS.Length; i++){ ar_OKPOS[i] = new List<int[]>(new int[][] { new int[2] }); } foreach (string sOutput in arrText) { // 一行ずつ読み込んで,各行をsplitメソッドで分ける string temp = (string)arrText[a]; // string型にキャスト string[] temp2 = temp.Split(',');// splitメソッドで文字列アレイにして数える int col_count = temp2.Length; // 列数を数えているだけ string[] temp_line = sOutput.Split(','); for(int i=0;i<temp_line.Length;i++) { for(int k=0;k<2;k++){ i = i + k; ar_OKPOS[a][b][c]=Convert.ToInt32(temp_line[i]); c++; } c = 0; b++; } b = 0; a++; }
すいません 誤爆してしました
デザインパターンとか全然勉強せずにプログラマやってるけど、勉強したほうがいいのかな?
デザインパターンはなんかJava臭いよな C#はオブジェクト指向至上主義じゃないから合わないんじゃない
695 :
デフォルトの名無しさん :2009/04/04(土) 09:52:38
標準のクラスライブラリでも結構それっぽいのはよくでてくるよ ただjavaと違って、MSはほとんどデザインパターン用語を使わない
696 :
デフォルトの名無しさん :2009/04/04(土) 13:38:17
privateなメンバ変数もprivateなプロパティとして表示させたほうがいいですか? またメソッドでメンバ変数を利用するときなるべく引数として渡した方がいいですか? それともメソッド内でいきなり使用しても問題無いですか? たとえばクラスに以下のようなメソッド等があったとして private int _num; public void Method() int num = CalcMethod(2); private int CalcMethod(int num1) return num1+_num: こういう書き方が良いのか private int _num: public void Method() int num = CalcMethod(2, _num); private int CalcMethod(int num1. int num2) return num1+num2; こんな書き方のほうがいいのか知りたいです。 例では単なる足し算ですが、複雑な計算をしているという仮定です。
演算要素を全て引数で取らせるならstaticにする
メソッドを呼び出す側からすれば,メソッド呼び出しはオブジェクトを操作することなので 内部状態を存分に使ってもらって構わない気がする.
ありがとう なるべく引数で渡したほうが、その中で完結するのでわかりやすい気がして じゃあ、あんまり気にしなくていいってことかな?
計算処理のように内部状態に関係なしに定義できるものは、 内部状態非依存(static)の方が単体テストしやすい まあ、その例くらいの規模なら大して変わらないんだが
>>696 むしろそのメソッドを定義したクラスはどんな責任と制約をもってんのよ?
メソッド単体じゃあなんともいえない
>699
時と場合による
プログラミングしやすい分かりやすさもあれば、
利用しやすいわかりやすさもある
VC#単体(他から持ってきたライブラリを使わず)で開発したソフトやゲームを 販売する場合、ライセンス等の問題ってありますか?
場合による。
704 :
デフォルトの名無しさん :2009/04/04(土) 21:17:48
ミサイル防衛システム作りたいんですがヒントだけでもください
MDIで作成した子フォームに含まれるコントロールを取得後、アクセスしたいんですが foreachでいちいちループ回さないといけない・・・ なんか他にいい方法ないでしょうか? 子フォームはアクティブな状態のものです if (!(this.ActiveMdiChild as Form == null)) { foreach (Control Ctrl in (this.ActiveMdiChild as Form).Controls) { if (Ctrl is TextBox /*例としてテキストボックス*/ ) { //処理 } } }
全コントロールを対象に処理が必要なら foreach で回さざるを得ないだろ。 特定のコントロールのみを対象にするなら Panel か UserControl に貼り付けて 必要なコントロールへのアクセスを容易にすればいいよ。
707 :
705 :2009/04/04(土) 21:54:17
ん〜じゃあ無理か Panelのリストを管理するとまた手間がかかりますしねえ・・・ どうもありがとうございました
動的に作成する場合でもIList<>に入れればいいし、 あらかじめポトペタならコントロールが限られてるから どちらにしても最低限のループでいけるんじゃないの?
Linqでコントロールの種類ごとに連想配列に分配するクエリを作れば?
Form activeChild = this.ActiveMdiChild as Form; if (activeChild != null) { activeChild.Controls.Where(c => c is TextBox).ToList<TextBox>().ForEach(t => { // 処理 }); } かえって煩わしいな。
>>711 ん?
実験してみようとしたのだが、インテリセンスにWhere()が表示されないのだがなんでだ?
ControlCollectionがIEnumerable<Control>を実装してないからか?
714 :
デフォルトの名無しさん :2009/04/05(日) 00:43:46
だな 気がつかなかった!すげー便利じゃん!と思ったのにorz
715 :
n :2009/04/05(日) 00:52:48
this.ActiveMdiChild.Controls.Cast<Control>().Where()とか?
クラス内の自動プロパティを初期化したいのですがコンストラクタ内でするしかないのでしょうか? 例えば public string Name{get;set;} というものがあって、Nameは始めはnullですが、""に初期化しておきたいのです。 フィールドでしたら private string Name = ""; と出来ます。 プロパティの量だけコンストラクタにも初期化する量が増えてしまうのでフィールドのように出来れば一度に初期化したいのですが方法はあるのでしょうか?
>708 がベストだろ
クラスを継承したときに基本クラスのメソッドにコードを追加するように書くにはわかりました。
>>717 ありません
自動プロパティの使用をやめるか普通にコンストラクタで初期化してください
>>717 リフレクションでstring型のプロパティを一括初期化できなくもないがバグの元だな
そのためのオブジェクト初期化子なんだろうか
ヘジさんが自動プロパティに必死で抵抗してたのは直接初期化できないからなのかな
自動プロパティって、文法的にインターフェースでの宣言と一緒なのがちょっと気になるっちゃ気になる。 int Method(); とだけ書いたらメソッドの中身ができちゃうようなもんだからなぁ。 パッと見同じだけど全然意味の違うものってのは、 ミスの原因だし、読むときの混乱招くから。
コンストラクタで初期化するくらいなら、 タイピング量的に自動プロパティである必要がぜんぜんないな
もう、自動プロパティを自動で普通のプロパティに展開するユーティリティを使えばいいよ
private string _test; public string Test { get _test; set _test; } こういう糖衣構文を可能にするだけでよかったんだよ
糖衣構文といいたいだけのやつ増えすぎ
構文糖を可能にするだけでよかったんだよ
public property string Test = ""; でいいんじゃないの public readonly property string Test = ""; とか
public string Test { get GetTest(); set SetTest(value); } も可能そうだな
>>731 それは意味がわからない。普通にかけばいいだろ
public string Test { get { return GetTest(); } set { SetTest(value); } }
インターフェイスにプロパティを宣言するときの書き方と合わせたかったんだろ 美学ってやつなんだろう
たとえ美学でも、読み取り専用にするprivate set;はせっかくの省力構文を台無しにしているな public string Test { get; } これで何がまずいのだろう
event の構文が event DelegateType Variable; event DelegateType Variable { add { ...] remove { ...} } なのを考えると、 property VarType Variable; property VarType Variable { set { ... } get { ...} } がよかった気もするなぁ。
>>732 楽になるじゃん
それに変数とメソッドを同時に書くこともある
public string Test { get GetTest(); set _test; }
property Name: string read FName write FName; もうこれでいいよ
>>735 それいいよね
読み取り専用プロパティは
readonly property VarType Variable;
にすればいいし
>>739 private set;と書いたことにする
それなら
>>735 スタイルにしてgetも書かないようにしないとおかしい
アクセサを宣言する意味でgetやsetを書いてるのに
アクセス修飾子をpublicとprivateだけと思ってる奴が多いようだな
そんな奴いないだろw
もともとはプロパティのアクセサにアクセスレベルは指定できなかったんだよ
public get; protected set;みたいなのはそもそも想定されてなかった
だから別に
>>735 の形になっててもおかしくはない
addとremoveが必須なeventとgetとsetは片方あればいいプロパティじゃ初めから条件が違うな
話の流れを全部理解しているわけじゃないが、 そういうシンメトリックかどうかって話じゃないだろうw 素直に(VB方式ともいう)propertyってキーワードを導入しておいた方が 可読性の観点からは好ましかったんじゃないかって話なんじゃないの?
でもevent 型 名前;と型 名前 { get; set; }じゃ差がありすぎるからなあ イベントを理解する上でプロパティとの類似性はかなり重要なのに 構文上全然違う種類のものになっちゃってるのはさすがに
そういや、結構いろんな言語に精通してる同僚が最近 C# 触り始めたんだけど、 event 知らずに普通にデリゲート型のプロパティ使ってたなぁ。
イベントって機能がデリゲートで実現されていることを知らずにイベントを 使ってるって話ならありそうだが、デリゲート押さえてるのにイベント知らない、 なんてこと普通はありえん気がするけどね。
eventって別に必要ない機能だろ
javaなんかでよく出てくるgetHoge, setHogeパターンを言語に組み込んだのがプロパティ 同様にaddHogeListener, removeHogeListenerパターンを言語に組み込んだのがイベント
言語に組み込む組み込まないの話ではないだろ
>>749 「デリゲートはイベント処理用のもの」って認識だとそうなんだけど、
「関数ポインタの便利版」って認識だと、
関数ポインタのプロパティでイベントハンドラ取ればいいやってなってもおかしくないかと。
もしプロパティを使うならデリゲートのコレクションを返すべきだろ button.ClickEventHandlers.Add(new EventHandler(button_Click)); これなら意味的には同じ
755 :
754 :2009/04/05(日) 23:59:32
外からの要素へのアクセスはできないようにしないといけないよもちろん マルチキャストでいいだろと突っ込まれそうだから一応
Formsのコントロールの初期化をデザイナーで作っているところなんだが、 ツールバーのボタンが横に並んだ1つづりのPNGファイルを ImageListを使って切り出して使おうとしているのだがうまくいかない。 System.Windows.Forms.ImageList il = new System.Windows.Forms.ImageList(); il.TransparentColor = System.Drawing.Color.Transparent; il.ImageSize = new System.Drawing.Size(24, 24); il.Images.AddStrip(Resources.tool); こんな風に書いてデザイナーに読ませると、AddStrip()が認識できずに落ちてしまうようだ。 仕方がないのでpartialされたForm本体側で追加で初期化してるんだが、当然ながらデザイナーではプレビューできない。 画像の切り出し、切り出したチップをそれぞれのコントロールで使用したいんだがどうしたらいいだろうか。
>>748 eventをつけた場合とつけない場合は何が違うのですか?
public event EventHandler Unko;
public EventHandler Unko
>>757 ググれかす
見た目としては、eventだと外から行える操作がデリゲートの追加と削除だけになる。
>>758-759 ありがとう。
何となく分かったよ
Unkoの硬さが+=と-=だけになるってことですね
>>756 デザイナで設定するのは無理なんじゃないの
とりあえずImageListプロパティだけ設定して,Tagプロパティにインデックスを入れといて
後でコードから舐めてImageIndexプロパティに設定し直すとか
>>761 ありがとう。「無理」という返事を聞いてある意味安心した。
どうせデザイナーで作る部分はある程度静的な割付になるので、わざわざTagに入れてループをまわさなくても、
ImageList.Images プロパティをControl.Image に直接代入していくだけで十分だね。
>>762 ImageList継承して"ImageStrip"のようなプロパティを追加するとか、
あるいは最初から目的のイメージを持たせちゃうとかすれば出来る気もする。
っていうか、なんでわざわざそんなC#向きでない作り方をするんだろう。
なんでも道具にあった作り方ってあると思うんだけど。
あーImageListってシールされてるのか。。
String型がシールされてる上にIStringのようなインターフェイスもないってどういうこと? String型に限らずやたらシールされると拡張できなくて異常に不便
C#の入門誌のオススメ教えて
C#に入門書は必要ない ぐぐれば腐るほどでてくるからな・・・ 強いて言えば逆引き系のものがいいよ
継承は最低の方法だってみんな分かって来てるじゃない それはともかくStringはIEnumerable<char>として扱うと便利だよ
>>763 コントロールで使う画像の処理をImageListに任せるのは、
Win32SDK時代から続く古式ゆかしいお作法なんだ。
> それはともかくStringはIEnumerable<char>として扱うと便利だよ これは気づかなかった。ありがとう
デザイナーいるとかうらやましいなおい・・・・
Stringがsealedなのはimmutableにするため 変更できない方が扱いやすいから
扱いやすいっていうか、継承を禁止しないとイミュータブルであることを保証できない。
なんとなくだが、
>>774 は
"stringはimmutableであった方が扱いやすい"
と言いたかったのではないかと思う。
777 :
デフォルトの名無しさん :2009/04/06(月) 21:19:49
>>766 洋書なら色々あるけど、邦訳版が出てないのが多い・・・。
C#って検索数がいまいちなんだよね。 なんで?
>>778 記号とか入いってるとかは検索エンジン的にマイナスな気がする。
あと、なんだかんだいって後発だしね。
それと、一般名詞そのまま使ってるrubyとかと比べりゃそりゃ少なくなる。
思いつくままに検索してみた。言うほど少なくは無いようだが php の検索結果 約 9,700,000,000 件 javascript の検索結果 約 680,000,000 件 vb の検索結果 約 657,000,000 件 java の検索結果 約 377,000,000 件 scheme の検索結果 約 107,000,000 件 ruby の検索結果 約 102,000,000 件 c++ の検索結果 約 101,000,000 件 perl の検索結果 約 88,000,000 件 c# の検索結果 約 63,900,000 件 python の検索結果 約 62,300,000 件 delphi の検索結果 約 49,500,000 件 lisp の検索結果 約 8,290,000 件 fortran の検索結果 約 7,720,000 件 cobol の検索結果 約 6,530,000 件 c++/cli の検索結果 約 4,680,000 件
>>780 ごめんそれ違う。
漏れが言ったのは、グーグルトレンドの方。
vb.net の private shared は C# でいうとなんですか? private partial ? private protected?
private static
thx!
VB.netの存在意義がわからない 初心者向けならジェネリックやLinqの拡張をすべきではないと思うんだが・・・
VB.NETはVBプログラマ用の隔離病棟もしくはオブジェクト指向リハビリ施設
>>786 それは、貴方の考えた存在意義と違うってだけでしょう。
C#>VBってのはC#でオブジェクト指向を勉強した奴がやけに言いたがるようだけど 他から見たらチェイサーとクレスタ
そりゃ.NETがベースにあるからだろ
.NETのWebBrowserコンポーネントで RichTextBoxのSelectionColorプロパティみたいに、文字列をドラッグしたときの選択色を変える方法ありませんか?
Microsoft Visual C++ Express Edition このコンパイラで一度「デバッグ無しで開始」でコンパイル成功するとソースを書き換えてもプログラムが変わらないようです 今までは少しソースを書き換えようと思ったら新規作成で新しいソース作ってコピペを繰り返してたんですがいい加減ソースの管理がキツいです 誰か助けてください
バイト代は出ますか?
>>792 『Microsoft Visual C# Express Edition』で開発していると仮定しての話だが、(スレタイ読めよ!)
確かにVC++と違って C#の開発のときはアプリの実行ボタンでビルドが更新されないことがあるようだ。
しかし、コンパイルないしビルドボタンを押せば問題ないはず。
デバッグ無しで開始 や デバッグ実行 のボタンとは別にあるぞ。
むしろ自動ビルドしてるならクリーンアップ?で さもなくばexploreでファイル削除
.net のプログラムを C#に書き換えています。 .net におけるshadow(オーバーライドの一種で引数も返り値も変更可能なもの) はC#だとどういう風にトランスレートすればいいんですかね?
.net のプログラムってなに?VB?
もちろんC#
隠蔽のnew
vb.netっす
VBではoverridesとshadowが別なのが良くわかんないね。 overridesがほぼC#のnewと同じ。 shadowとまったく同じものはなかったかと。
それでは Public Shadow Property X は public new override X {get return ...みたいな感じで書けばいいってことですか?
ああちがうか、そもそもoverrideとoverridesのちがいがわかってませんでした。 勉強してきます。
806 :
デフォルトの名無しさん :2009/04/08(水) 15:43:35
WebBrowserのDocumentで、mshtmlを経由してiframeの中身にアクセスしようとするとUnauthorizedAccessExceptionになるのですが、 これを回避するにはどうすればいいのでしょうか。
public class Bar inherits Foo overrides sub f() end sub shadows sub g() end sub overloads sub h() end sub end class をリフレクションで調べるとこういう違いがあるようだべさ。 public class Bar : Ansi,Auto extends public class Foo : Ansi,Auto public virtual Void f() public Void g() public Void h(),HideBySig public constructor Void .ctor(),SpecialName C#の場合全部のメソッドにHideBySigが付いてるんだよね。
すみません。馬鹿な質問いいですか? フォームにラベルがいくつかありまして、それぞれ lbl001 lbl002 lbl003 という名前になっています。 で引数に001とか002を渡すと通し番号の一致するラベルのテキストを""に変えるメソッドを 作りたいのですが、どうしたら良いのでしょうか? 解りにくい文章ですみませんが、お願いします。
809 :
808 :2009/04/08(水) 19:30:47
private void hoge(string number) { lbl+number.text=""; } という感じなのですが・・・
public void ClearLabel(string labelName) Control control = this.Controls.Find(labelName, false)[0].Text = ""; thisはForm
ああ、最初の変数宣言はイラネ public void ClearLabel(string labelName) Control control = this.Controls.Find(labelName, false)[0]; control.Text = ""; または public void ClearLabel(string labelName) this.Controls.Find(labelName, false)[0].Text = "";
public void Func(int number) { string name = "lbl" + number.ToString("000"); foreach (FieldInfo info in this.GetFields()) { if (name == info.Name) { Label label = (Label)info.GetValue(this); label.Text = ""; } } }
ラベルを配列に入れりゃいいんじゃないの
>>808 そういうことをするならラベルをコレクションで管理しとけ
リフレクションを使うのはあくまで応急処置
最初からコレクションで生成してもいいし、どうしてもデザイナを使いたいなら以下のようにする
var labels = new List<Label>();
labels.Add(lbl001);
labels.Add(lbl002);
labels.Add(lbl003);
815 :
808 :2009/04/08(水) 19:58:30
みなさまありがとうございました!
>>811 public void ClearLabel(string labelName)
this.Controls.Find(labelName, false)[0].Text = "";
この場合labelNameは"002"とかでもlbl002を見つけてくれるのでしょうか?
>>812 なるほど。僕でも判る解りやすいコードですね
>>814 おっしゃる通りです。以降気をつけます
>>815 見つけてくれないからlabelNameを自分で作成すれ
817 :
808 :2009/04/08(水) 21:27:47
>>816 ありがとうございました!
僕はデザイナでしかコントロールを置いたことがないので
名前の重複がありうるなんて知りませんでした。
なので名前のわかっているコントロールを探すなんてナンセンスな感じを
うけましたが、自分が無知だっただけでした!
何も解かってないことが解かった
>>817 が何を言ってるのかまるでわからない・・・
なんとなく理解できる俺もほ乳類を名乗って問題無いのか・・・
>819 多分Nameプロパティとフィールド参照名をごっちゃにしてるんだろ。 >817 参照名はスコープ内で重複しないけど、コントロールごとに設定できるNameプロパティの値は重複可能。 デザイナーは勝手に「Name = 参照名」に設定してるから一意に見えるだけ。自前でNameを設定してなければ、 int num = 2; Label label = this.Controls[ "lbl" + num.ToString("000")] as Label; if( label != null ) { 処理 } else { エラー処理とか } 自前のコードでNameを設定してて同じNameの奴が重複してたら、最初に追加されたやつ(普通はデザイナーが作った方)が返ってくる。 どうしてもフィールド名のほうでアクセスする必要がある場合は、>812みたいにリフレクションを使う。 でもクラス内で完結することに使うことはまずない。
822 :
デフォルトの名無しさん :2009/04/09(木) 00:09:57
Regexクラスを使った正規表現って 交差演算子「&&」は使えませんよね?
古語でも可也
ClickOnce使ってアプリを更新させようとしていますが、次回の更新の際に 更新をチェックしに行く先を変更したいんですが、可能でしょうか? 可能であれば、MSDNでも構わないので情報を頂けませんか?
>>826 情報サンクスです。
GUIを使って変えられそうなので少し安心しました。
しかし・・ClickOnceでやるのと自前でHTTP通信でWEBからDLさせるのと
どっちがいいんだろ・・・・
自前に決まっとる 中途半端なフレームワークは使い物にならんと偉い人も言ってるしな
>>828 一概に決め付けるのはよくない。
従来の配布形態とClickOnceは、ネイティブアプリと.NETアプリくらい異なるので、
自分の作ってるものがどうあるべきかというレベルからよく比較検討すべきだと思う。
Form1 の textBox の内容を 別の class A のメソッドからアクセスするにはどうすればいいのでしょうか? class A に Form1 を継承すればいいのかなと思ったんですが Form しか継承できませんでした
内容を公開するプロパティを作れ
プロパティの modifiers のことでしょうか? それはとりあえず public にしています。 継承は Form1のnamespace.Form1で出来たのですが以下のようにしてもテキスト内容が出ませんでした public class classA : test.Form1 { private int CreateD01() { MessageBox.Show("textBox1.Text"); } } デバックで見てみましたが、classA の中では textBox1 の中身が空っぽでした。 Form1で同じメッセージBOXを出すときちんと表示されます
継承は関係ない Formを↓のようにしておけば参照介して読み取れるでしょ public partial class Form1 : Form { public string MessageText { get { return textBox1.Text; } }
>class A に Form1 を継承すればいいのかなと思ったんですが Form しか継承できませんでした クラスとインスタンスの違いが理解できていないよーな
C#って生産性はいいけど、変なとこで設計が糞だな。 delegateみたいにすっきりした構文があるわりに、 structや純粋な多次元配列のせいで初学者殺しになってるよ。 そんな詰まらないところでパフォーマンスを稼いでどうするよ。
別に初学者向けに作ってねーもん。いやまじで。 それにプリミティブの型どうするよ。某言語みたいに固定に するよかだいぶましだと思うぞ。
C#はお前が作ったのか?
C#は他の言語からの移行者向けの言語だよどっちかというと
>>838 作った(作ってる)ように見えないとかそういう意味だ。すまんな。
移行してきました なかなか使いやすいです
こんにちわかーにはんです
値型は無いと困るな。リアルタイムゲームを作る時に採用する 開発プラットフォームとしてJavaとの差はデカイ。 多次元配列はむしろジャグ配列より性能落ちるんだが そういやあれなんのためにあるんだ?
[10000][1]みたいに宣言した時のメモリ消費量の削減と、直列化の保証かな。 性能の劣化はよく分からんが、ジャグ配列ってのがダイレクトアクセスするのに対して、 多次元配列はfoo[2,3]としたとき、内部で3*2とか演算してるとかはありそう。
845 :
832 :2009/04/10(金) 00:11:51
>>833 分割するだけで良かったんですね、 partial で無事に出来ました
ありがとうございます
>>834 不愉快な思いをさせてしまい申し訳ありません
>>835 オブジェクト指向はC#で初めて触れるもので、未だにその場その場で進めてる感じです
また復習します
C++と同じようにやるとスマートに書けないね。 C#とGCの流儀に合わせるといい感じだが、なかなかC++のクセが抜けない。
847 :
デフォルトの名無しさん :2009/04/10(金) 00:54:20
自分でソースをいじれるものにpertialつかうってどうなんだろう ポトペタなんかで拡張が楽になるから そんなこと気にせずばんばん使ったほうがいいのかね
デストラクタがC++風に機能しないからってIDisposeを持ち出したり、 structをclassみたいに使えるようにNullableを持ち出したりと、後付が酷い言語だなとは思う。
>>847 partialは#regionで仕分けがおっつかないなら、どんどん使って良いと思うよ。
巨大クラス主義の強い味方だ。
>>844 ilに一次元配列専用の命令があるんだけど、
一次元配列を繋ぎあわせたものであるジャグ配列のほうが最適化が効くらしい
C#って、なんかinterfaceが軽視されてる気がするのは気のせいだろうか。 分かりやすいところでいくと、List<T>にあってIList<T>にないメソッドがゴロゴロあったりとかする辺りとか
852 :
デフォルトの名無しさん :2009/04/10(金) 01:28:25
こまけぇこたぁいいんだよ(ry
>>851 今はIEnumerable<T>がメソッド全部持っていったので問題ない
>>853 AddRangeが・・・欲しいです・・・。
Concatしろってことなのだろうか。
あと、AsyncResultにキャストしないとAsyncDelegateが参照できない件とか。
C#はあれだな、ハードウェア特性に目を向けすぎ。 抽象化に失敗したオブジェクト指向はC++だけで十分なのに。
一行目と二行目が全く繋がらない件
857 :
デフォルトの名無しさん :2009/04/10(金) 02:13:44
ずっとborlandでdelphiを拡張していったほうがよかったのにな .NETよりVCLのほうが遙かに優秀なライブラリだし
interfaceっていう仕組みもオブジェクト指向っていう枠組みも そんなにいいものではないからね
フィールドで、頭に「_」が付くものと、付かないものの違いがわかりません。 ご教授下さいまし。
まあC++ほどめちゃくちゃにならないで、javaみたいに制限きつすぎない そんな心地良い言語ってことで勘弁してやってくれ
>>858 なぜキャストさせると思ったのかがわからない
>>863 ダックタイピングの隆盛を見りゃ分かるじゃん
事前に静的にinterfaceを決定して変更しないなんてのは
将来的には確実に破綻する
そりゃパラダイムの違い interfaceを決定して変更しないのはポリシーの違い 将来的に破綻するかどうかは運用の違い
>>863 普通はキャストさせるんじゃなくて
Collection<T>を継承して
継承したクラスを公開するよ
キャストを推奨してるんじゃなく
List<T>を公開しないことを推奨してるだけ
ジェネリックプログラミングは、Java、C#界隈の最新のトピックのひとつなんだから、制限あって当然。 ましてやパフォーマンス重視の実装というんだから。
interfaceは互換性が重視される言語の基本ライブラリに採用するには リスクが大きすぎる技術だって話だよ C#は別にinterface大好き、オブジェクト指向大好きというほど非現実的なことを考えてなかったので interfaceは最小限しか使ってないってことだと思う
こ、こうほうごかん・・・じょ、じょういご・・かん? どれだ?
870 :
デフォルトの名無しさん :2009/04/10(金) 03:27:36
inetrfaceがなければ無いで糞言語と言うし interfaceがあればあったでinterfaceのおかげで基本ライブラリの継承関係が希薄になってるって言うんだろ?
>>869 過去に書かれたプログラムは動かなきゃいかんだろ
Side by Sideでバイナリはなんとかなるにしても
ソースレベルの互換性は出来る限り保たなきゃならん
>>871 それって別にinterfaceもduck typeも関係ないとおも
そんで、むかーしのプログラムが動くのとソースレベルの互換性は
そもそも対象のユーザが違うんじゃね?
でもぼくは機能の継承じゃなく性質の継承が好きだけどね!遅いが
>>872 IEnumerable無印のGetEnumeratorは邪魔だから捨てちゃおうと捨てたとしても
duck typeならほぼ動くじゃん
C#だとものすごい量書き直しだろ
>>873 シチュエーションが分からないけど、それはduck typeでも大混乱になるんじゃない。
表面上動いているように見えても、提供している機能の意図が丸ごと変わったら問題は起きるだろう。
極め付きに静的チェックをしないことで、実際に表面化するまで問題に気づきにくい。
GetEnumerator って組み込みの duck type みたいなものなんだ よなぁとふと思った。
>>860 メンバ変数とローカル変数を区別するために使う
thisをつけるから_はいらないという人もいる
好みの問題
>>873 IEnumerableからGetEnumeratorを消して、duck typeなら"ほぼ"動くっていうのが考えられない
"ほぼ"動くけど、ちゃんと動かすにはduck typeでもものすごい量の書き直しが必要なのは変わらない
例がナンセンス
テキストにデータを保存して、そのデータを集計するのに便利なテクノロジってありますか? classに格納したデータをxmlで保存してLinqで集計するとか、 CSVで記録して集計するとかしかないのかな。
まずそれらのナニが不満なのか挙げろよ
IE8でMSDN見るとき言語フィルタでC#とXAML以外チェック外してるんだけど VBだけ外しても外しても毎回チェックされる。 俺だけかな。
オフラインのMSDN使えば?
>>882 集計したいのか保存したいのかわからない
>>876 自分でもそういう理解しかしていなかったんですけど
同じ(ように見える)プライベートフィールドで、アンダースコア付きと無しを
混在させているコードを見て、使い分けの基準がよくわからなかったもので
一般的にもそういう基準で使い分けがなされているのかと勝手に思ってました。
ありがとうございました。
フィールドにfooがあって、コンストラクタで初期化する時、 引数をfooにして this.foo=foo; と書くか、それとも引数を_fooにして foo=_foo にするかみたいな逡巡は良くするけれど、プライベートフィールドの方に_をつける 習慣ってのは始めて知った。自動プロパティ登場以前の、プロパティと対応する プライベートフィールドの区別って役割もあるのかな。
フィールドって普通プライベートじゃね? ってかそれ引数じゃなくね?
外部から見えるところである仮引数名にアンダースコアとかつけちゃなんねぇ とMicrosoftの.NETガイドライン
>>885 >プロパティと対応するプライベートフィールドの区別って
たぶんそれですね
ガイドラインに従ってる限り、そもそも区別する必要ないんじゃ?
プロパティ経由しないでフィールドに直接アクセスすることもなくはないから…とかなのかなぁ
たしかに、パブリックなプロパティとそれがラップするプライベート なフィールドとは、先頭が大文字か小文字で区別されるから、 つまりプライベートのプロパティでプライベートのフィールドを ラップする場合にだけ名前の衝突を避けるためにアンダースコア が必要になるのかな。 でも、プライベートなプロパティって普通使う?
普段は使わないがまれに使う [Flags]な列挙体フィールドとIsHogeなbool型プロパティみたいなのとかで
>>892 >プライベートのプロパティでプライベートのフィールドをラップする場合
その時は、何と何の名前が衝突するんだ
読み取り専用プロパティだったらフィールドに直接触ることもあるから …だと直接触らない為にアンダースコア付ける意味はないか
C#の言語仕様には,付録としてフィールドはアンダースコア無しで先頭小文字を推奨 という記述があった気がする でもMSがC#で書いたほとんどのコードはアンダーバー+先頭小文字スタイルだったりする
目の前の変数がメンバ変数か確認する数秒間が鬱陶しいからアンダーバーはつけてるなぁ 好みの問題だけど、つけたからって困ることはないんだし MSはMFC時代のm_を使ってる人もいるよねw
付けといた方がインテリセンスが使いやすいんだよな VS2003のころはthis.でインテリセンス出してたから要らなかったけど
_を先頭に付けるのは内部関数時代からの流儀だよな。 _openとか__openとか、隠してるよってのを明示的に表現してる。 かといってフィールド変数に _ は無いと思う。
そういえば前のプロジェクトで プリフィクスじゃ無くサフィクスとしてアンダースコアつけてた人がいたが アレって本人的には判別しやすいんだろうか
C++時代はm_が嫌ならサフィックスにつけるしかなかった
ActionScript (Flash) がサフィックスだったような気がした。 最後の_を打った瞬間にインテリセンス(的なもの)が動いてたな。
上のほうにあったpartialについて質問なのですが、 Visual StudioにてFormなどを追加すると、 - Form1.cs Form1.Designer.cs Form1.resx などのようにグループ化?して表示されますが、 Form1のpartialクラスを新規作成しても、グループアイテムにはならないように思うのですが、 グループ化して表示するような設定とか命名規則とかってあったりしますか?
そこら辺はVisual Studioのプロジェクトファイルの仕様だからなぁ。 プロジェクトファイルを見るとそういう構造を作る表現が確認できる。 Visual Studioでカスタム階層を作る操作があれば俺も知りたいな。
あれはアイテム属性に DependentUpon だっけかな。 まぁ直接 .csproj みるとか MSBuild あたりのドキュメント あたって
906 :
903 :2009/04/10(金) 21:16:54
.csproj 内にある、 <Compile Include="UserInterfaces\Form1.HogeHoge.cs"> <SubType>Form</SubType> の部分を、 <Compile Include="UserInterfaces\Form1.HogeHoge.cs"> <DependentUpon>Form1.cs</DependentUpon> のように書き換えた所、見事にグループのアイテムのように表示されました。 どうもありがとうございました。
VS2008でソリューションのプロパティのビルドをリリースにしてもbin\Debugフォルダにexeが作成されるんですがこれは正常ですか? どうすればリリース状態でexeが作成されたことが確かめられるんでしょうか
Releaseビルドの出力先がbin\Releaseになってないとかじゃなくて?
>>908 Releaseになっています
だけどいま確かめてみたら、Releaseにしてプロパティページを閉じて、再び表示させるとまたDebugに戻ってる・・・
なんでだ・・
アクティブ構成の変更は緑の再生マークの右側だよ?
すいません緑の再生マークとは「デバッグ開始」の右向き三角マークですか? その横にはブラウザで表示またはすべて中止のボタンしかないです・・・
Express Edition?
いえProfessionalです おかしいななんでだろう
IDEを閉じて.slnファイルを直接テキストエディタで見てみな。 きっと何か分かるはず
FormにTextBoxを貼り付けただけで切り取りやコピーや貼り付けなどの右クリックのコンテキストメニューが出てきますが RichTextBoxの場合は右クリックしてもデフォで用意されているコンテキストメニューが出てきません これは自前でContextMenuStripを記述するしかないのでしょうか? それともどこか設定があるのでしょうか? 環境は2008EEのSP1です
ないね
WindowsNT系OSでないと実行できないメソッドをWIndow9xで実行したときなど、 サポート外の環境であることを示す例外って、NotSupportedExceptionでいいんでしょうか。
PlatformNotSupportedException じゃね?
919 :
917 :2009/04/11(土) 15:42:16
>>918 ああ、まさにそれですね。ありがとうございます。
>>916 ないのですか
自力でやりくりしてみます
ありがとうございました
thisってできるだけ付けたほうがいいですか? どっちでもいいところではどういう基準で付ければいいんでしょうか
付けられるところでは常に
つけるならすべてつける つけないならすべてつけない 中途半端にされたら読む人が混乱する
thisの有無で何か違いはありますか? 実行がはやくなるかもしれないとか コンパイルがはやくなるかもしれないとか
あるわけない
だがビルドが数千分の1秒ぐらい早くなりそうな気がする
this は必ず付け、static の場合も クラス名も省略しない事にしてる。 スコープの明示化により、処理の影響範囲が把握し易くなる点がメリット。 C# では、C++ のようにメソッド ( 関数 ) に const 修飾子を付けて immutable である事を明示できないから、副作用が発生しそうな箇所の目印として重宝する。 this, this, ..., this みたいな処理があれば、そこは遠目にも危険地帯である事が分かる。 記述の冗長性がデメリットだが、個人的にはメリットの方が大きいと思う。
>>927 言ってる意味がようわからんし、それはたぶん確実に俺だけでもなければ
俺の知識や理解力の不足のためじゃないと思う。
つまりプリフィックスが最強
>>927 this. はその後のインテリセンス利かせるために常に付けてる。
でも、static メンバーの場合、同じ記法で親クラスのメンバー呼べないのがちょっと残念だから使ってないわ。
VS2005以降はいきなりインテリセンスが利くからいらん
何かいまさら聞けない質問感があるんだけど、ポトペタって何の略語?
ぽっとりぺたっと
略語じゃなくて擬態語。
えっ、つまり、 ぽとっ、ぺたっ ってこと?コピペみたいな略語かと思っていた・・・
そうそう「ぽとっぺたっぬるぽっ」ってこと
継承って派生コントロール作るときしか使ったことないんですが どんな使い道があるんですか?
そういう使い道
.NET用に正規表現をチェックするソフトを作ってみた いろいろ簡単に作成できるな面白い
それ5年くらい前にどっかで拾った事があるな
数行書けば終わりじゃねそれ
そんな(´・ω・`)
数行どころか・・・ 十数行だけどねw
それ俺も作ったことあるw
正規表現をチェックってどんなの? 正しい文法になってるか確かめるってこと?
new Regex(...)で例外をキャッチすれば……
テキストと正規表現入力して出力結果だすだけじゃないの? いや、そんなわけないよな
そういう単純なプログラムから始まるのさ。 おまえらだってそうだったろ?
951 :
デフォルトの名無しさん :2009/04/12(日) 01:05:33
お前等いい加減寝たらどうだ。 おれはもう練るぜ
俺が初めて作ったプログラムは、三角形の面積を計算するものだった。
正規表現チェックならMSのサンプルにあったな
別にライブラリ化するようなほどじゃないと思うが、 俺も自作アプリのUtilitiesの中に正規表現をboolで返すstaticメソッドを用意してるぞ。 いちいち例外返されたらかなわんからな。
exeからソースが見れないようにする方法は無いでしょうか?
test
無いです
>>955 「100%見れないように」というのは無理。
悪あがきするなら難読化ツール使う。
Dotfuscator とか。
商用の難読化ツール使えば まともに読む気を萎えさせるコードにしてくれるのは確か
ありがとうございます 助かりました
961 :
デフォルトの名無しさん :2009/04/12(日) 12:17:55
class testA{ public string str; public testB bInstance; public testA(string s) { str = s; } } class testB{ public string str; public testA aInstance; public testB(string s) { str = s; } } class Program { static void Main(string[] args) { testA a = new testA("A"); testB b = new testB("B"); a.bInstance = b; b.aInstance = a; Console.WriteLine(a.bInstance.str); Console.WriteLine(b.aInstance.str); } } 循環参照ってC#ではいいんですか? とりあえずコンパイルは通って期待通りの動きをしているっぽいですが。
いまどき循環参照できない言語なんてあるか?
963 :
デフォルトの名無しさん :2009/04/12(日) 12:27:31
いやどっかでC#だとコンパイルエラーになるとか見た気がしたんで。 循環参照は設計として間違ってるという思想から、とかなんとかいう理由で。
そりゃアセンブリの循環参照だな
設計としては間違っているとまでは言えないが、良くないことは確かだ。
循環参照なんかイベントハンドラ使っただけでできるよ
>>962 みたいな相互依存とはまた別の話だけど
967 :
966 :2009/04/12(日) 14:04:16
>>963 実行時循環参照を検出できるコンパイラがあったら一度お目にかかりたいわ
>>963 ジェネリクス関係とか型関係とかではなくて?
コントロールについてなんですが ContextMenuStripはShowImageMarginプロパティをfalseに設定することで 左側のスペースを消すことができますよね そのItemの一つからドロップダウンで表示されるToolStripMenuItemも 同じようにして左側のスペースを消したいのですが ToolStripMenuItemにはそのプロパティがないのでできずにいます。 何か方法はないでしょうか?お願いします。
すみません。自己解決いたしました。スレ汚し失礼しました。
972 :
970 :2009/04/12(日) 16:10:04
971=970です。
980踏む奴は要注意
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
Hoge hoge = new Hoge(webBrowser1);
}
}
public class Hoge {
WebBrowser browser;
public Hoge(WebBrowser browser){
this.browser = browser;
browser.Navigate("
http://hogehoge.com ");
MessageBox.Show(browser.DocumentText);
}
}
このときNavigateはできるのに
browser.DocumentTextが取得できません。
どうすればDocumentTextを取得できるんでしょうか
DocumentCompletedまで待て
>>975 browser.Navigate("
http://hogehoge/ ");
browser.DocumentCompleted += delegate(object sender, WebBrowserDocumentCompletedEventArgs e) { MessageBox.Show(browser.DocumentText); };
>>976-977 できました。ありがとうございます
オブジェクトの参照?とかそういう類の問題だと思っていました。
ちゃんと、MSDN を読みましょうとかそういう類の問題だろ
UserAgentからブラウザとかを判別するクラス作ってるんだが超マンドクセ どっかにライブラリで落ちてないかな
googleソースコード検索
ローカルのHTMLをwebBrowserで表示するまではできたのですが
その中のJavaScriptを実行するのがうまくいきません
ttp://msdn.microsoft.com/ja-jp/library/be9zzz62.aspx のサンプルで試しているのですが
String str = doc.InvokeScript("test").ToString() ;
のところで「オブジェクト参照がオブジェクト インスタンスに設定されていません」のエラーが出ます
サンプルで書かれてない部分にJavaScriptの関数を関連付けか何かをしている部分があると思うのですが
どういう処理を行えばいいのでしょうか?
エラー出なかったよ
また読み込み終了前にアクセス→docがnull ってオチ
nullでないかチェックしてるからそれはなかろう private void InvokeScript() { if (webBrowser1.Document != null) { HtmlDocument doc = webBrowser1.Document; String str = doc.InvokeScript("test").ToString() ; Object jscriptObj = doc.InvokeScript("testJScriptObject"); Object domOb = doc.InvokeScript("testElement"); } }
まーた誤訳か、と思ったら英語版でも間違えてんじゃん…。 ProgressChangedイベントのProgressChangedEventArgs..UserStateの間違い。
どうも〜
ClickOnce試してみたが、これいいな。 とりあえず、自分の小物ツールをzip版とClickOnce版で両方公開することにした。
992 :
983 :2009/04/13(月) 10:00:34
空のプロジェクトにサンプルのみ貼り付けて最初からやり直した所うまくいきました お騒がせして申し訳ありませんでした
ファイルパスがあり、そのパスのファイルが存在するかを調べたいのですが、 大文字・小文字の違いがあってもFile.Exists()ではtrueが返されてしまいます。 大文字小文字を区別してチェックする方法を教えてください。
>>993 試しにデスクトップにa.txtというテキストファイルと、A.txtというテキストファイルを作成してみそ
Windows上であれば正しいんじゃねえのか? ファイルシステムで大文字と小文字の区別無いだろ
そのファイルシステムが大文字小文字の区別をしないのであれば そのやり方だけじゃ区別できないだろうね。 trueが返ってきたらあらためて文字列比較しては?
パスに大文字小文字の区別はつけられんのだが
次たててくる
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。