C♯相談室 Part28
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん♯
2005/12/14(水) 07:47:02(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
過去スレは>>2-5あたり。
関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D
0002名無しさん♯
2005/12/14(水) 07:47:35Part27 http://pc8.2ch.net/test/read.cgi/tech/1131544541/
Part26 http://pc8.2ch.net/test/read.cgi/tech/1127063469/
Part25 http://pc8.2ch.net/test/read.cgi/tech/1122352650/
Part24 http://pc8.2ch.net/test/read.cgi/tech/1117631000/
Part23 http://pc8.2ch.net/test/read.cgi/tech/1112968209/
Part22 http://pc8.2ch.net/test/read.cgi/tech/1109630502/
Part21 http://pc5.2ch.net/test/read.cgi/tech/1106490240/
Part20 http://pc5.2ch.net/test/read.cgi/tech/1103005153/
Part19 http://pc5.2ch.net/test/read.cgi/tech/1100240847/
Part18 http://pc5.2ch.net/test/read.cgi/tech/1096112588/
Part17 http://pc5.2ch.net/test/read.cgi/tech/1091284402/
Part16 http://pc5.2ch.net/test/read.cgi/tech/1087297504/
Part15 http://pc5.2ch.net/test/read.cgi/tech/1083066815/
Part14 http://pc5.2ch.net/test/read.cgi/tech/1076933504/
0003名無しさん♯
2005/12/14(水) 07:48:02Part13 http://pc2.2ch.net/test/read.cgi/tech/1071663456/ (ログ行方不明)
Part12 http://pc5.2ch.net/tech/kako/1066/10660/1066038651.html
Part11 http://pc5.2ch.net/tech/kako/1061/10612/1061262958.html
Part10 http://pc5.2ch.net/tech/kako/1051/10518/1051842450.html
Part9 http://pc2.2ch.net/tech/kako/1039/10396/1039646808.html
Part8 http://pc3.2ch.net/tech/kako/1032/10324/1032488831.html
Part7 http://pc3.2ch.net/tech/kako/1027/10275/1027531796.html
Part6 http://pc3.2ch.net/tech/kako/1022/10222/1022257078.html
Part5 http://pc3.2ch.net/tech/kako/1019/10195/1019533942.html
Part4 http://pc.2ch.net/tech/kako/1016/10165/1016597767.html
Part3 http://pc.2ch.net/tech/kako/1009/10094/1009473982.html
Part2 http://pc.2ch.net/tech/kako/1002/10024/1002468050.html
Part1 http://pc.2ch.net/tech/kako/977/977112364.html
0004デフォルトの名無しさん
2005/12/14(水) 08:40:310005デフォルトの名無しさん
2005/12/14(水) 12:10:050006デフォルトの名無しさん
2005/12/14(水) 22:18:57explicit, implicit ユーザー定義変換についての質問です。
あるサイトに
「変換メソッドは、引数を受け取り、それを元に変換後の型を返します
ただし、受け取る型と変換後の型に継承関係があってはいけません
例えば、ユーザー定義変換は System.Object を受け取ることはできないのです」
との説明があったのですが、つまりはどういう事なのでしょうか?
string は System.String で、int は System.Int32
System.Object だけなんで駄目なんでしょう (゚゚)?
ある種継承関係にあるとか考えているのですが…頭がこんがらがってしまいます
0007デフォルトの名無しさん
2005/12/14(水) 22:36:080008デフォルトの名無しさん
2005/12/14(水) 22:45:53すみません。プログラムで書くとどういう事なんでしょうか?
CS0556 のエラーが英語でよくわからなかったけど、
どうやらユーザー定義変換では自クラスを含めなきゃいけないと言う事だそうです。
class Test {
int num;
public static implicit operator int (string str) {
num = int.Parse(str);
return num;
}
public int Pub {
get { return num; }
set { num = value; }
}
static void Main() {
Test a = "10";
System.Console.WriteLine(a.Pub);
}
}
うぅ…これのコンパイルが通らないのはなぜなの…orz
0009デフォルトの名無しさん
2005/12/14(水) 22:47:26operator int→operator Testか?
0010デフォルトの名無しさん
2005/12/14(水) 22:51:18accesser.cs(4,3): error CS0120: 静的でないフィールド、メソッド、またはプロパティ
'Test.num' で、オブジェクト参照が必要です。
accesser.cs(5,10): error CS0029: 型 'int' を型 'Test' に暗黙的に変換できません。
と出ました。この CS0120 のエラーはググってもMSDNのやつがひっかからず
訳わかめ状態っす ;;
0011デフォルトの名無しさん
2005/12/14(水) 22:51:47> Test a = "10";
そりゃstringからTestへの型変換が定義されてないから……
0012デフォルトの名無しさん
2005/12/14(水) 22:53:10ちなみに>>10は3行目をこう変えた場合のコンパイルエラーです
0013デフォルトの名無しさん
2005/12/14(水) 22:53:56Testにint型の値を1つ引数にとるコンストラクタをつけろ。
0014デフォルトの名無しさん
2005/12/14(水) 22:54:270015デフォルトの名無しさん
2005/12/14(水) 22:59:35まずユーザ型変換は何かの型から自身の型に変換するか、自身の型から何かの型に変換するかしか定義できない。
つまりstringをintに変換するような型変換のオーバーロードは書けない。
なぜならstringもintもすでに定義済みで、「自身の型」にしようが無いから。
Test型の中での型変換はTestに変換するかTestから変換されるかしかない。
二番目に、演算子オーバーロードはstaticだ。
型変換は一般に新しいオブジェクトを作ってそれを返すって動作になる(或いはフィールドの値なんかをコピーする)。
オブジェクトが無いのに非staticメンバをいじるのは当然できない。
0016デフォルトの名無しさん
2005/12/14(水) 23:06:49static int num = 10;
public static implicit operator Test (string/*Test*/ str) {
num = int.Parse(str);
return new Test(num);
}
Test(int a) {
}
と変えたら、コンパイルが通り理想的な動作になりました。
>オブジェクトが無いのに非staticメンバをいじるのは当然できない。
は、特にすごくわかりやすかったです。
ついでの質問ですみません。面倒でしたらスルーしておいて下さい。
オブジェクト=インスタンス…で良いでしょうか?
なにはともあれ、ありがとうございました! 助かったです。
0017デフォルトの名無しさん
2005/12/14(水) 23:27:4415の文の中で出てくる「オブジェクト」はインスタンスの意味で使われている。
0018デフォルトの名無しさん
2005/12/15(木) 00:31:50Internet Explorerスクリプトエラー
ダイアログの表示を強制的にオフにする方法ってないでしょうか?
0019デフォルトの名無しさん
2005/12/15(木) 00:36:05ScriptErrorsSuppressed
0020デフォルトの名無しさん
2005/12/15(木) 04:27:31Managed WebBrowserなら>>19
0021デフォルトの名無しさん
2005/12/15(木) 17:51:480022デフォルトの名無しさん
2005/12/15(木) 19:03:28コンパイルが通り、期待した通りの結果が返ってくるのですが、
統合環境の(?) .NET 2003 ではコンパイルがとおりません。以下のプログラムです。
class Output {
public static Output operator << (Output cout , System.Object obj) {
System.Console.WriteLine(obj.ToString());
return cout;
}
}
class Test {
static void Main() {
Output cout = new Output();
cout <<= "ほげ";
}
}
<<エラーメッセージ>>
オーバーロードされた shift 演算子では、最初のオペランドは
それを含む型で、二番目のオペランドの型は int でなければなりません。
なぜに、このような制約が生まれたのでしょうか?
同じ動作のプログラムを .NET 2003 では実現するのは不可能なのですか?
0023デフォルトの名無しさん
2005/12/15(木) 19:14:39そもそも<<はそうやって使うものじゃないと思うけど。
0024デフォルトの名無しさん
2005/12/15(木) 19:22:300025デフォルトの名無しさん
2005/12/15(木) 20:12:21なるほど。言われてみれば確かに… そちらの方が理にかなってますね。
ではこのような動作を実現するのは不可能なのでしょうか?
# 初心者スレを見つけたので今度からはそちらに行く事にします。
# http://pc8.2ch.net/test/read.cgi/tech/1122001458/l50
0026デフォルトの名無しさん
2005/12/15(木) 21:48:26http://wisdom.sakura.ne.jp/programming/cs/cs44.html
0027デフォルトの名無しさん
2005/12/15(木) 22:43:400028デフォルトの名無しさん
2005/12/15(木) 23:47:10Settingsクラス内で定義して保存することはできますか?
//XmlSerializable
public class MySettingObj{
private string name;
public string Name {get{return name;}set{name=value;}
}
こんなクラスをプロジェクトのプロパティ、設定タブでのエディッタでSettings.csに保存することは無理でしょうか?
このようなオブジェクトは別ファイルに保存するのが常套手段ですか?
0029デフォルトの名無しさん
2005/12/16(金) 09:52:07Microsoft.CSharp
System.CodeDom.Compiler
とか。自分で解放したい時は System.AppDomain を使う。
違ったらスマソ
0030デフォルトの名無しさん
2005/12/17(土) 00:34:38ファイルパスとか考えるの面倒なのでデフォルトで用意されている機構である
アプリケーション設定(Settings)で保存できたらいいなぁ、と
あとResources.resxエディタで文字列を保存するときにセクション分けって無理なんですかね?
同一サテライトアセンブリ中で
文字列の保存をカテゴライズするにはKeyにPrefixをつけて、ずらーっと並べる位なのでしょうか?
0031デフォルトの名無しさん
2005/12/17(土) 01:42:18のSQLコマンドで呼び出されたemailのリストをArray, ArrayList,等の配列として得ることの出来るSystem.Data.SqlClient.SqlCommand関数(またはそれに代わる関数)は何かありますか?
0032デフォルトの名無しさん
2005/12/17(土) 02:08:550033デフォルトの名無しさん
2005/12/17(土) 02:43:350034デフォルトの名無しさん
2005/12/17(土) 09:51:15mdbに書き出したいのですが
DataSetからmdbファイルを作成することはできるのでしょうか?
(対象は素のWindows2000 Accessとかはインストールされていない)
mdbじゃなくてもお手軽DBならなんでもいいのですが、何かよいものってありますでしょうか?
0035デフォルトの名無しさん
2005/12/17(土) 10:22:590036デフォルトの名無しさん
2005/12/17(土) 13:21:38クラスに設定したい機能がいっぱいあるんですが、
一回設定したらもう二度と変更したくない機能ばっかりなんです
一回設定したらもう二度と変更したくない機能ってコンストラクタの引数で設定するべきだとは思うんですが
これやるとコンストラクタの引数が10個とか20個とかになってしまいます。
かといって、インスタンス生成後にプロパティで1つずつ設定するのも変・・・
これってそもそもクラスの設計が不味いんですかねえ
0037デフォルトの名無しさん
2005/12/17(土) 13:29:010038デフォルトの名無しさん
2005/12/17(土) 13:42:20XmlファイルをXPathやらXmlWriter/Readerで操作するのと
同じイメージで使えるってことなのかな。
0039デフォルトの名無しさん
2005/12/17(土) 13:46:13引数に独自クラスを当てればすっきりするんじゃないの?構造体でもなんでもいいんだけど。
0040デフォルトの名無しさん
2005/12/17(土) 13:53:11ProcessStartInfoクラスとか参考にしてみれば?
0041デフォルトの名無しさん
2005/12/17(土) 16:30:23何かで見ました。効率など気にせず実際に利用されていますか?
また、列挙型ではボクシングは発生するのでしょうか?
0042デフォルトの名無しさん
2005/12/17(土) 16:40:24列挙型は値型なのでボクシングは起きる
実行効率が必要かいなかも不明な状態で
実行効率を気にするのは馬鹿のすること
0043デフォルトの名無しさん
2005/12/17(土) 22:17:25Hoge hoge = new Hoge();
ってできないですよね?
ここで
Hogeを返すtool.hogeってメソッドがある場合、
Hoge hoge = tool.hoge();
は通りますよね?
なんとかして、Hogeを継承するクラスって作れないでしょうか?
toolはpublic classでどっからでも呼べます。
やりたいことはHogeにプロパティ、メソッドをいくつか増やしたいだけなのですが。
004443
2005/12/17(土) 22:27:11よろしくお願いします。
0045デフォルトの名無しさん
2005/12/17(土) 22:44:18ユーザ定義のキャストで Hoge にキャストできるようにする
0046デフォルトの名無しさん
2005/12/17(土) 22:46:220047デフォルトの名無しさん
2005/12/17(土) 22:47:57ユーザ定義のキャストを実施した時点でMyHogeはHogeそのものに変えてしまうしかなく、
もはや追加のプロパティなどは存在できない。
0048デフォルトの名無しさん
2005/12/17(土) 22:48:33だったらすまん。
0049デフォルトの名無しさん
2005/12/17(土) 22:57:47オーバーライドがないってことでいいんじゃね
005043
2005/12/17(土) 23:55:39で試してみます。
ありがとうございました。
0051デフォルトの名無しさん
2005/12/18(日) 05:02:510052デフォルトの名無しさん
2005/12/18(日) 07:53:34ttp://www.microsoft.com/japan/msdn/vstudio/productinfo/productline/
0053デフォルトの名無しさん
2005/12/18(日) 11:10:320054デフォルトの名無しさん
2005/12/18(日) 11:13:300055デフォルトの名無しさん
2005/12/18(日) 12:11:100056デフォルトの名無しさん
2005/12/18(日) 12:49:52Express Editionで十分って事ですか。
Standard Edition買おうかと思っていたけどタダのExpress Editionと比べると
お金払ってまで必要なのか?と思ってしまいます。
0057デフォルトの名無しさん
2005/12/18(日) 13:18:37詳しくはMSとかに。
//日本語のじゃ全製品の詳細比較が見つからないんだが……。
製品版はどうせ2月発売なんだから、それまではExpressEdition使って様子を見ればいい。
0058デフォルトの名無しさん
2005/12/18(日) 13:26:11文法はよく似てるんですが何か決定的な違いとかこれは気をつけろみたいなのありますか?
0059デフォルトの名無しさん
2005/12/18(日) 13:49:07確かに現状Express Editionしかないんだしね。
様子を見るしかありませんね。
0060デフォルトの名無しさん
2005/12/18(日) 14:14:240061デフォルトの名無しさん
2005/12/18(日) 14:24:37Main
0062デフォルトの名無しさん
2005/12/18(日) 14:25:190063デフォルトの名無しさん
2005/12/18(日) 14:50:25→P/Invoke とか、Marshal が使えない。
1.1でクラスライブラリ作れってことかな。
0064デフォルトの名無しさん
2005/12/18(日) 14:53:48TcpClientクラスとかWebClientクラスがありますが
どれが一番早く処理できますか?
0065デフォルトの名無しさん
2005/12/18(日) 14:54:05馬鹿なこと言うな。大体標準ライブラリの名前空間が無いってどういう意味だ。
0066デフォルトの名無しさん
2005/12/18(日) 14:54:57コーディングの手間ならWebClientが一番小さいな
0067デフォルトの名無しさん
2005/12/18(日) 14:57:32ヘルプ?のリファレンスには無いけど、普通に使えた。
インテリセンスにも表示されたし。
0068デフォルトの名無しさん
2005/12/18(日) 14:59:39ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.ja/cpref11/html/N_System_Runtime_InteropServices.htm
0069デフォルトの名無しさん
2005/12/18(日) 15:02:57フィールドのカプセル化の機能は期待してたんだが、メニューにないorz
007063
2005/12/18(日) 15:11:03ヘルプの
Visual Studio 2005 Express Edition 対応 MSDN ライブラリ
- NET Framewrok SDK ドキュメント
- クラスライブラリ
の中に見つからないから誤解してた。
0071デフォルトの名無しさん
2005/12/18(日) 15:35:44Microsoft.Win32.Registoryとかもない
0072デフォルトの名無しさん
2005/12/18(日) 15:45:08ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.ja/cpref1/html/T_Microsoft_Win32_Registry.htm
なんだ、私のドキュメントとほかの人のは別物なのか?
SDK入れた後でExpress入れたんだけど。
0074デフォルトの名無しさん
2005/12/18(日) 15:53:23第一cpref1.hxsがない
expressと同時にいれたやつだと少ないのかな?
とりあえず間違えて落としたSDK解凍して漁ってみる
0075デフォルトの名無しさん
2005/12/18(日) 17:43:13何でだろ。
0076デフォルトの名無しさん
2005/12/18(日) 18:09:09(Point[])arrayPoints.ToArray();
は通りませんでした。
0077デフォルトの名無しさん
2005/12/18(日) 18:13:040078デフォルトの名無しさん
2005/12/18(日) 18:14:47ってことですか?
無事いけたみたいです。
ありがとうございました。
#なんで気づかなかったんだろう…orz
0079デフォルトの名無しさん
2005/12/18(日) 18:19:300080デフォルトの名無しさん
2005/12/18(日) 18:20:01008178
2005/12/18(日) 18:28:34でいけました。
>>78でかいたのはコンパイル通ったもののエラーでした
×(Point[])arrayPoints.ToArray(Type.GetType("Point[]"))
×(Point[])arrayPoints.ToArray(Type.GetType("Point"))
○(Point[])arrayPoints.ToArray(typeof(Point));
レスありがとうございまいsた。
0082デフォルトの名無しさん
2005/12/18(日) 19:24:30ありがとうございます。
webページをゲットするスピードは
どれもあまり変わらないのでしょうか?
また他にアクセスできるクラスとかあったり
しますか?
008375
2005/12/18(日) 19:40:49見つけた。.NET Framework 2.0 SDKのドキュメントに含まれてた。
一旦MSDN Express Libraryをアンインストールして、
SDKを入れてからもう一回MSDNライブラリ入れたら見れるようになった。
普通にインストールするだけでもいけたのかもしれん。
0084デフォルトの名無しさん
2005/12/18(日) 21:24:24using (StreamReader reader = new StreamReader(fs, Encoding.Default))
{
do
{
line = reader.ReadLine();
Console.WriteLine(line);//なぜかlineが nullなんですけど なぜでしょう
} while (line != null);
}
0085デフォルトの名無しさん
2005/12/18(日) 21:30:12streamreaderでファイル開いちゃだめなの?
0086デフォルトの名無しさん
2005/12/18(日) 21:31:260087デフォルトの名無しさん
2005/12/18(日) 21:37:30それあれば大雑把に仕様把握するのが早くなるのに。
0088デフォルトの名無しさん
2005/12/18(日) 21:40:46あとからSDKのドキュメント部分だけインストールでもいけた。
//SDKインストールだけじゃドキュメントに出てくれなかったんだよな……。
0089デフォルトの名無しさん
2005/12/18(日) 21:49:04int key;
int value;
}
というクラスがあって、その配列
Vector v = new Vector[n];
を作った後に、要素keyだけを配列として取り出すことは
できますでしょうか?
例えば、SortedListの、Keysプロパティのように、
とりだした配列なりコレクションなりを
foreach構文にかけることがしたいのですが・・・
よろしくお願いいたします。
0090デフォルトの名無しさん
2005/12/18(日) 21:54:56ファイルを開いて>一行ずつ読み込んで・・
と日本語をそのままコードにしていったときにそうなってしまったのですが。
StreamReaderをそのまま使うと問題ないです。
でも、なぜFileStreamを開いて、StreamReaderに渡して実行できないのかわからないのです。
(Streamを渡して〜〜するという処理をやる予定があるので勉強のため)
↓でも同じようなコードがあるのですが 知ってる人いませんか?
「C#で作るWindowsアプリ −ファイルを読み込む− 」
http://www.divakk.co.jp/aoyagi/csharp_winexe_04.html
// ファイルを読み込む
Stream stm = opendlg.OpenFile();
if (stm != null) {
StreamReader reader = new StreamReader(stm);
mTextBox.Text = reader.ReadToEnd();
stm.Close();
}
0091デフォルトの名無しさん
2005/12/18(日) 21:55:360092デフォルトの名無しさん
2005/12/18(日) 21:58:48#elementの名前がVectorなのがちょっと引っかかるが。。
009389
2005/12/18(日) 21:59:03やっぱそれしかないのですかね・・・
今はそうしているのですが、
O(n)になっちゃうので、毎回参照されるとつらいですよね・・・
Vectorクラスか、外側のクラス(Vectorをコンポジションするクラス)
に細工をしてどうにかならないでしょうか?
0094デフォルトの名無しさん
2005/12/18(日) 22:02:08配列で何がしたいんだ?
たぶん、配列でまわすのもVectorのまままわすのも同じようにできると思うよ。
009589
2005/12/18(日) 22:05:26外側に
class Container{
Vector[] data;
public int[] Keys{
get{
:
:
}
}
}
SortedListみたいなコンテナクラスを作っていまして、
として、Vector[] dataのkey要素だけを返すような
プロパティが作りたいのです。
Keysプロパティを参照されるたびに「・・・・」の部分で
コピーして返す、ってのはイヤですよね・・・?
0096デフォルトの名無しさん
2005/12/18(日) 22:15:31あるなら、内部データとして喪ってもいいかもしれないけど、ソートなどにあわして更新しなおすオーバーヘッドかかる。
009789
2005/12/18(日) 22:20:30内部のアルゴリズムで使われていたりします。
積極的な理由としては、将来、複数のコンテナクラスを、
interfaceをimplementしたクラスとしてまとめたときに、
統一性がはかれるように、というのが目的なのですが。
なお、Vector[] dataの要素数は10000ぐらいです。
おっしゃるとおり、別にkeys[]という参照の配列を持とうとも
考えたのですが、他のメソッドも書き直す必要があって、やめました。
10000ぐらいならコピーのオーバーヘッドを黙殺するというのも
手ではあるのですが・・・
0098デフォルトの名無しさん
2005/12/18(日) 22:28:37両方ともどれぐらいのパフォかによるけど。
0099デフォルトの名無しさん
2005/12/18(日) 22:34:10IEnumeratorとインデクサを実装した KeyCollection とか定義してkeysで、
それを返せばいいんじゃない?
0100デフォルトの名無しさん
2005/12/18(日) 22:34:470101デフォルトの名無しさん
2005/12/18(日) 22:34:50class VectorKeyEnumerator : IEnumerator{
private Vector[] vectors;
・・・
}
class VectorKeys : IEnumerable{
private Vector[] vectors;
・・・
}
class Container{
Vector[] data;
public IEnumerable Keys{
get{return new VectorKeys(this.data);}
}
}
■ このスレッドは過去ログ倉庫に格納されています