ふらっとC#,C♯,C#(初心者用) Part57

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2010/04/06(火) 17:16:16
つーかマジで質問したやつはエラーコードとかTがなんなのかとか
複数型を取るとか情報だせ
953942: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
種別で判断とはどういうことをすればいいのでしょうか?
954942:2010/04/06(火) 17:27:31
>>951
GetType() で switch する感じでしょうか?

>>952
複数型というのは何でしょうか?
エラーコードは以下のものです。
> エラー CS1502: 'System.BitConverter.GetBytes(bool)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
> エラー CS1503: 引数 '1': 'T' から 'bool' に変換できません。
955デフォルトの名無しさん:2010/04/06(火) 17:30:57
>>954
Tをこれでみたいんでしょ?
Byte, Boolean, Char, Double, Int16, Int32, Int64, Single, UInt16, UInt32, UInt64
956デフォルトの名無しさん:2010/04/06(火) 17:33:32
こうやると
http://ideone.com/pOHdD
こんな結果になった
ttp://tsushima.2ch.at/s/news2ch56535.png
objectにして渡して中で型判断するってのはどうなんだろ?
957942: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;
}
958デフォルトの名無しさん:2010/04/06(火) 17:57:30
それならwhere T : IConvertibleで
switch (t.GetTypeCode())が最善だと思う
959942:2010/04/06(火) 18:09:46
>>958
文字列以外にも方法があったのですね。
ありがとうございました。
960デフォルトの名無しさん:2010/04/06(火) 18:10:17
        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;
                }
            }
        }
こんな感じか
961デフォルトの名無しさん:2010/04/06(火) 18:12:11
        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なのか
962デフォルトの名無しさん:2010/04/06(火) 18:17:01
えっ
963デフォルトの名無しさん:2010/04/06(火) 18:20:20
だからコードはここに書くなと…
964デフォルトの名無しさん:2010/04/06(火) 18:25:05
>>953のケースでジェネリック使うのはおかしくね?

public void Write(byte[] data) {}
public void Write(bool[] data) {}
(略)
public void Write(ulong[] data) {}

みたいに書き出すべきだと思うんだが。
965デフォルトの名無しさん:2010/04/06(火) 18:28:27
>>964
それが面倒だから・・・ってことでこうなったw
966デフォルトの名無しさん:2010/04/06(火) 20:19:47
C#でFSMやるときに、プロパティの値を
「自分自身と継承先とステートマシンクラス」だけ読み書き可能で、それ以外には
リードオンリってやりたいんだが、どう組んでも恐ろしく複雑になってしまうんだが、
なるべくシンプルに実装する場合どうすればいいんだろう
外からいじられるリスク前提で全部publicにしてしまう他ないのかな
967デフォルトの名無しさん:2010/04/06(火) 20:40:27
>>966
protected internalは使いたくない状況なんだろうか
968デフォルトの名無しさん:2010/04/06(火) 20:43:18
あー念のため補足しとくけど、2003以降はプロパティのセッタとゲッタで
別々のアクセス修飾子が付けられるようになってるのは知ってるんだよね?
969デフォルトの名無しさん:2010/04/06(火) 23:30:26
計測アプリ作りたくて、先ずはその中のRS-232C通信設定ダイヤログを作りたいと検討中
設定値をドコに持たせたらいいとか、呼び出すお作法の書いてあるwebはお勧めありますでしょうか?

参考図書だと、コントロールをフォームにぶち込んで、すぐその場でプロパティに直書き。とか
ComSerialPort.PortName="COM1"
ComSerialPort.BaudRate=9600
とフォーム.loadにベタ書きみたいなものにしか見かけないんです。
脱初心者となりたく、村の書店で立ち読みしてみたけど、多くはフォーム1枚板で完結した内容で
なかなか前に進まずに居ます。
970デフォルトの名無しさん:2010/04/06(火) 23:36:20
MSのサイトにプロパティの値を永続化しましょう、みたいのあるだろ。
971デフォルトの名無しさん:2010/04/07(水) 00:00:19
圧縮ツール作っているんだけど
コマンドラインからの起動なら大丈夫なんだけど
エクスプローラからドラッグアンドドロップでファイル渡して圧縮すると
そのエクスプローラが作業完了するまでフリーズしちゃうんだけど
どうすればいいかな?
972デフォルトの名無しさん:2010/04/07(水) 00:03:09
DragDropがさっさと制御を返せばいいだけ
973デフォルトの名無しさん:2010/04/07(水) 00:03:44
ドラッグ&ドロップってのは、アプリが起動してない状態で、
アイコンに対して?
974デフォルトの名無しさん:2010/04/07(水) 00:10:29
http://ideone.com/Iu4Rn
今話題(?)のジェネリック対応版のBitConveterExを作ってみた。
型パラメータは可能な限り制限しているけど最終的には実行時検証。

作っておいてなんだが、ジェネリッククラス/メソッドから呼び出すのでなければ、
>>964の言うようにオーバーロードするのが正解。
特にオーバーロードを書くのが面倒なんて阿呆な理由は論外。
975971:2010/04/07(水) 00:16:49
ファイルの自アプリのフォームにドロップして
それを圧縮するという感じです

>>972
多分そういうことなのかなと思うんですが
制御を返す方法がよくわかりません

DragDropイベントリから圧縮するmethodを呼び出しているので
圧縮が完了してやっとDragDropのイベントが抜ける感じになってます
どうすればうまく書けるんでしょうか?
976デフォルトの名無しさん:2010/04/07(水) 00:17:46
Thread.Startすれよ
977デフォルトの名無しさん:2010/04/07(水) 00:23:59
978デフォルトの名無しさん:2010/04/07(水) 00:26:15
VBの頃はタイマーで、とかやってたけど、
今の時代は普通にワーカースレッドを起こして、メインスレッド(イベント)は
終了、でいいわな。
979デフォルトの名無しさん:2010/04/07(水) 00:28:07
>>970初心者にそのひとことで済むなら苦労しないわな。
980デフォルトの名無しさん:2010/04/07(水) 00:31:33
>>979
質問したやつが苦労すべきだろ。
981971:2010/04/07(水) 00:37:52
>>976
>>977
マルチスレッドですか、難しそうですががんばってみます
ありがとうございました
982デフォルトの名無しさん:2010/04/07(水) 01:08:44
ツールはすべて.Net製で揃えたいです
みんながんばってください
983デフォルトの名無しさん:2010/04/07(水) 01:17:50
がんばってるやつにがんばれと言っても既にがんばってるんだから、ほどほどにね。
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
君はもう充分がんばったさ。もう寝ていいんだぜ、逃げてもいいんだぜ?
なんてやさしいおれ。
984デフォルトの名無しさん:2010/04/07(水) 07:07:22
いつから丸投げのやつらをがんばってると称するようになったのか
985966:2010/04/07(水) 12:31:53
>>967
同一の名前空間前提なら最悪それでもいいかもしれないが……。
できればPerlのような紳士協定的な制約はかけたくないなぁ、と。

>>968
public int hoge{ get; private set; } みたいなのだよね?
986デフォルトの名無しさん:2010/04/07(水) 13:21:11
internalは名前空間とは無関係に同じアセンブリ内ならアクセス可
誰が使うか分からないクラスライブラリ作ってるならそれで十分
内部では基本的に契約が通じるはずなので紳士協定で問題ない
コンパイル時に解決できない内部のお約束なんか他にもいくらでもあるだろ
987デフォルトの名無しさん:2010/04/07(水) 18:52:05
JPEG画像をWPFで縮小して表示するアプリケーションを作っています。
このWPFのローカルアプリケーションをWebでサービスする場合について教えてください。
大前提として、WPFからWeb用のアプリケーションに書き換える作業があることはなんとなく理解しています。

疑問点は、次のようなものです。
・サーバーはLinuxでよいのでしょうか?
・クライアントはIEとかのブラウザだけでよいのでしょうか?
・そのWPFのアプリケーションは.NET Framework3.5が必要なのですが、Webサービスの場合、.NET Framework3.5はどこに用意すればいいんでしょうか? サーバー側ですか?
・各種設定がある場合、(たとえばいつも読むフォルダ名を覚えておくとか)、その設定はサーバー側に保存するのですか? それともクライアントに?

というかなり大まかな質問で恐縮です。
ざっくりどんな感じなのか、教えていただけると助かります。
988デフォルトの名無しさん:2010/04/07(水) 19:04:54
webサーバーはwindowsでもできるでしょ
windows系のサーバーを提供してるところもあったはず
ちょっと高いけど
989デフォルトの名無しさん:2010/04/07(水) 21:15:47
Linuxじゃ無理。
IIS上でASP.NETを動かす形になる。
当然、サーバー上に.NET Frameworkが必要。
各種設定は、サーバー側に保存。
990デフォルトの名無しさん:2010/04/07(水) 22:06:35
あれ?monoって.net3.5は未対応だっけか?
991デフォルトの名無しさん:2010/04/07(水) 22:12:23
MonoのWPFはまだまだ。
992デフォルトの名無しさん:2010/04/07(水) 22:13:46
なるほど。Windowsサーバーにしてサーバー側に.NET Frameworkなんですね。
なんとなく輪郭がつかめました。
ありがとうございました
993デフォルトの名無しさん:2010/04/07(水) 22:28:57
開発用Webサーバーもあるし、IISもあるんだから、
まずはその辺で雰囲気をつかむといいんじゃね?
994デフォルトの名無しさん:2010/04/07(水) 23:34:12
先ほどの件です。
C#でWebサーバーを作るのには、ASP.NET MVCフレームワークを使って、@ITの
http://www.atmarkit.co.jp/fdotnet/aspnetmvc/aspnetmvc01/aspnetmvc01_01.html
あたりの順番で進めればオーケーでしょうか?
995デフォルトの名無しさん:2010/04/07(水) 23:38:14
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サーバーの表示を見てファイルをゲット。
って流れでもオーケーなんでしょうか?
997デフォルトの名無しさん:2010/04/08(木) 00:08:50
もっと初心者スレらしい質問おねがいします
998デフォルトの名無しさん:2010/04/08(木) 01:27:15
次スレ立ててくる
999デフォルトの名無しさん:2010/04/08(木) 01:29:59
ほいよ、次スレ

ふらっとC#,C♯,C#(初心者用) Part58
http://pc12.2ch.net/test/read.cgi/tech/1270657735/
1000デフォルトの名無しさん:2010/04/08(木) 02:50:24
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。