ふらっとC#,C♯,C#(初心者用) Part57 つーかマジで質問したやつはエラーコードとかTがなんなのかとか 複数型を取るとか情報だせ
953 :
942 :2010/04/06(火) 17:21:47
>>943-947 型制約というものを初めて知りました。
調べてはみたのですが、書き方がよくわからず、以下の書式で書いてみたところエラーになってしまいました。
どういう書式で書けばいいのでしょうか?
public void Write<T>( T[] data ) where T : Byte, Boolean, Char, Double, Int16, Int32, Int64, Single, UInt16, UInt32, UInt64
>>948 やはりポインタですか・・・。
>>949 種別で判断とはどういうことをすればいいのでしょうか?
954 :
942 :2010/04/06(火) 17:27:31
>>951 GetType() で switch する感じでしょうか?
>>952 複数型というのは何でしょうか?
エラーコードは以下のものです。
> エラー CS1502: 'System.BitConverter.GetBytes(bool)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
> エラー CS1503: 引数 '1': 'T' から 'bool' に変換できません。
>>954 Tをこれでみたいんでしょ?
Byte, Boolean, Char, Double, Int16, Int32, Int64, Single, UInt16, UInt32, UInt64
957 :
942 :2010/04/06(火) 17:50:45
>>955 > これでみたい
とはどういう意味なのでしょうか?
それらの型以外の動作は保障しなくても問題ありません。
>>956 以下のコードで思い通りの動作になりました。
ありがとうございました。
Object obj = (Object)t;
Byte[] dat;
switch( obj.GetType().Name )
{
default: throw new Exception( "エラー" );
case "Byte": dat = new Byte[]{ (Byte)obj }; break;
(略)
case "UInt64": dat = BitConverter.GetBytes( (UInt64)obj ); break;
}
それならwhere T : IConvertibleで switch (t.GetTypeCode())が最善だと思う
959 :
942 :2010/04/06(火) 18:09:46
>>958 文字列以外にも方法があったのですね。
ありがとうございました。
        public void Write<T>(T[] data) where T : IConvertible         {             foreach (T t in data)             {                 Byte[] dat;                 switch (t.GetTypeCode().ToString())                 {                     default: throw new Exception("エラー");                     case "Byte": dat = new Byte[] { t.ToByte(null) }; break;                     case "UInt64": dat = BitConverter.GetBytes(t.ToUInt64(null)); break;                 }             }         } こんな感じか
        public void Write<T>(T[] data) where T : IConvertible         {             foreach (T t in data)             {                 Byte[] dat;                 switch (t.GetTypeCode())                 {                     default: throw new Exception("エラー");                     case TypeCode.Byte:                         dat = new Byte[] { t.ToByte(null) }; break;                     case TypeCode.UInt64:                         dat = BitConverter.GetBytes(t.ToUInt64(null)); break;                 }             }         } ああ、こういうのもOKなのか
えっ
だからコードはここに書くなと…
>>953 のケースでジェネリック使うのはおかしくね?
public void Write(byte[] data) {}
public void Write(bool[] data) {}
(略)
public void Write(ulong[] data) {}
みたいに書き出すべきだと思うんだが。
>>964 それが面倒だから・・・ってことでこうなったw
C#でFSMやるときに、プロパティの値を 「自分自身と継承先とステートマシンクラス」だけ読み書き可能で、それ以外には リードオンリってやりたいんだが、どう組んでも恐ろしく複雑になってしまうんだが、 なるべくシンプルに実装する場合どうすればいいんだろう 外からいじられるリスク前提で全部publicにしてしまう他ないのかな
>>966 protected internalは使いたくない状況なんだろうか
あー念のため補足しとくけど、2003以降はプロパティのセッタとゲッタで 別々のアクセス修飾子が付けられるようになってるのは知ってるんだよね?
969 :
デフォルトの名無しさん :2010/04/06(火) 23:30:26
計測アプリ作りたくて、先ずはその中のRS-232C通信設定ダイヤログを作りたいと検討中 設定値をドコに持たせたらいいとか、呼び出すお作法の書いてあるwebはお勧めありますでしょうか? 参考図書だと、コントロールをフォームにぶち込んで、すぐその場でプロパティに直書き。とか ComSerialPort.PortName="COM1" ComSerialPort.BaudRate=9600 とフォーム.loadにベタ書きみたいなものにしか見かけないんです。 脱初心者となりたく、村の書店で立ち読みしてみたけど、多くはフォーム1枚板で完結した内容で なかなか前に進まずに居ます。
MSのサイトにプロパティの値を永続化しましょう、みたいのあるだろ。
圧縮ツール作っているんだけど コマンドラインからの起動なら大丈夫なんだけど エクスプローラからドラッグアンドドロップでファイル渡して圧縮すると そのエクスプローラが作業完了するまでフリーズしちゃうんだけど どうすればいいかな?
DragDropがさっさと制御を返せばいいだけ
ドラッグ&ドロップってのは、アプリが起動してない状態で、 アイコンに対して?
http://ideone.com/Iu4Rn 今話題(?)のジェネリック対応版のBitConveterExを作ってみた。
型パラメータは可能な限り制限しているけど最終的には実行時検証。
作っておいてなんだが、ジェネリッククラス/メソッドから呼び出すのでなければ、
>>964 の言うようにオーバーロードするのが正解。
特にオーバーロードを書くのが面倒なんて阿呆な理由は論外。
975 :
971 :2010/04/07(水) 00:16:49
ファイルの自アプリのフォームにドロップして
それを圧縮するという感じです
>>972 多分そういうことなのかなと思うんですが
制御を返す方法がよくわかりません
DragDropイベントリから圧縮するmethodを呼び出しているので
圧縮が完了してやっとDragDropのイベントが抜ける感じになってます
どうすればうまく書けるんでしょうか?
Thread.Startすれよ
VBの頃はタイマーで、とかやってたけど、 今の時代は普通にワーカースレッドを起こして、メインスレッド(イベント)は 終了、でいいわな。
>>970 初心者にそのひとことで済むなら苦労しないわな。
981 :
971 :2010/04/07(水) 00:37:52
>>976 >>977 マルチスレッドですか、難しそうですががんばってみます
ありがとうございました
ツールはすべて.Net製で揃えたいです みんながんばってください
がんばってるやつにがんばれと言っても既にがんばってるんだから、ほどほどにね。 このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 君はもう充分がんばったさ。もう寝ていいんだぜ、逃げてもいいんだぜ? なんてやさしいおれ。
いつから丸投げのやつらをがんばってると称するようになったのか
985 :
966 :2010/04/07(水) 12:31:53
>>967 同一の名前空間前提なら最悪それでもいいかもしれないが……。
できればPerlのような紳士協定的な制約はかけたくないなぁ、と。
>>968 public int hoge{ get; private set; } みたいなのだよね?
internalは名前空間とは無関係に同じアセンブリ内ならアクセス可 誰が使うか分からないクラスライブラリ作ってるならそれで十分 内部では基本的に契約が通じるはずなので紳士協定で問題ない コンパイル時に解決できない内部のお約束なんか他にもいくらでもあるだろ
987 :
デフォルトの名無しさん :2010/04/07(水) 18:52:05
JPEG画像をWPFで縮小して表示するアプリケーションを作っています。 このWPFのローカルアプリケーションをWebでサービスする場合について教えてください。 大前提として、WPFからWeb用のアプリケーションに書き換える作業があることはなんとなく理解しています。 疑問点は、次のようなものです。 ・サーバーはLinuxでよいのでしょうか? ・クライアントはIEとかのブラウザだけでよいのでしょうか? ・そのWPFのアプリケーションは.NET Framework3.5が必要なのですが、Webサービスの場合、.NET Framework3.5はどこに用意すればいいんでしょうか? サーバー側ですか? ・各種設定がある場合、(たとえばいつも読むフォルダ名を覚えておくとか)、その設定はサーバー側に保存するのですか? それともクライアントに? というかなり大まかな質問で恐縮です。 ざっくりどんな感じなのか、教えていただけると助かります。
webサーバーはwindowsでもできるでしょ windows系のサーバーを提供してるところもあったはず ちょっと高いけど
Linuxじゃ無理。 IIS上でASP.NETを動かす形になる。 当然、サーバー上に.NET Frameworkが必要。 各種設定は、サーバー側に保存。
あれ?monoって.net3.5は未対応だっけか?
MonoのWPFはまだまだ。
992 :
デフォルトの名無しさん :2010/04/07(水) 22:13:46
なるほど。Windowsサーバーにしてサーバー側に.NET Frameworkなんですね。 なんとなく輪郭がつかめました。 ありがとうございました
開発用Webサーバーもあるし、IISもあるんだから、 まずはその辺で雰囲気をつかむといいんじゃね?
994 :
デフォルトの名無しさん :2010/04/07(水) 23:34:12
ASP.NETには、大きく分けてWebフォームとMVCがある。 MVCは最近できたばっかりで、俺は使ったことがない。 ま、どっちでもいいんじゃね? ただ、ASP.NET 1.0/1.1/2.0なとこだったりすると、MVCは使えないので、要注意。
996 :
デフォルトの名無しさん :2010/04/07(水) 23:59:18
>>995 ASP.NETのWebフォームのほうが動作実績ありってことですね。
ちなみに構成としては、LinuxとWindowsXPを使って、
LinuxのWebサーバーでは、
(1)
<form method="post" EncType=multipart/form-data" ACTION="upload.cgi">
<INPUT TYPE="submit" value="upload" class="button">
</form>
みたいな感じで、ユーザーのファイルのアップロードを受ける。
(2)アップロードされたら、WindowsXPにそのファイルをコピーする。
(3)WindowsXPでは、WPFを使って、ファイルを作り、LinuxのWebサーバーにコピーする。
(4)LinuxのWebサーバーは、そのファイルをhtmlに組み込んで表示する。
(5)クライアントはLinuxのWebサーバーの表示を見てファイルをゲット。
って流れでもオーケーなんでしょうか?
もっと初心者スレらしい質問おねがいします
次スレ立ててくる
乙
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。