[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 12/25 16:56 / Filesize : 218 KB / Number-of Response : 1006
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part89



1 名前:デフォルトの名無しさん [2015/09/26(土) 21:43:29.25 ID:Eb5jOjH8.net]
■Visual Studio 2013 Community & Express(無償の統合開発環境)等はこちら
www.visualstudio.com/downloads/

■コードを貼る場合はこちら
ideone.com/

■前スレ
C#, C♯, C#相談室 Part88 [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/tech/1437808445/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。

101 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 00:51:55.15 ID:yuX2pqxS.net]
>>98
お前みたいなのはレガシーコードを書いているという自覚すら無い
コピペプログラマだ

102 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:05:12.17 ID:TrEyw8kb.net]
>>101みたいのを見てると精神分析学を知らないことは幸せなことだと思う。
自分の言動の(本当はみじめで哀れかもしれない)動機を本人は知らずに済むのだからな。

103 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:06:18.36 ID:mXRqVUnf.net]
>>101-102
思い込み君チース w

104 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:31:09.57 ID:yuX2pqxS.net]
久しぶりに覗いてみたけど
2chのマ版はすっかり過疎ってるしレベルも極端に低い
匿名掲示板の限界かw

105 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:41:40.66 ID:mXRqVUnf.net]
マ板?
レベル以前の問題だな
こいつのコード、レビューしたらこの手のミスがボロボロ出てくるんだろうな w
それ以前にコード書けるかどうかは知らんけど

106 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 07:04:31.85 ID:14/sy/Q9.net]
LINQが使っているIEnumerableに定義されている拡張メソッドの理解がどうもすっきりとせずに辛い。混乱してくる。

IEnumerable<TSource>という型があったとすると、次のように拡張メソッドが定義される。(extendmethodメソッドなんてLINQにはないけど、例として)


public static IEnumerable<TResult> extendmethod<TSorce, TResult>(this IEnumerable<TSource> source, Func<TSource, IEnumerable<TResult>>)
{
中身は知らない;(質問0:LINQを使うだけなら知る必要はないですか?)
}

これによって、IEnumerable<anyType>インターフェイスを継承したオブジェクトなら、extendmethodメソッドが使えるようになるわけだと思う。(質問1:合ってますでしょうか)

で、extendmethodメソッドは、引数として、Func<TSource, IEnumerable<TResult>>ビルトインデリゲートのみを採っている。(this修飾のは、拡張メソッドの定義用で引数でない)
このデリゲートの定義で、TSourceはデリゲートの引数型、IEnumerable<TResult>は戻り型になっている。
しかし、メソッド名extendmethodのすぐあとにある<TSorce, TResult> って何なのでしょうか。どこで使われるんでしょうか。引数型だけではなぜ定義不足なのかわかりません。これが一番わからないです。(質問2)


よろしくお願いします。

107 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 07:30:25.83 ID:7FNxeZR/.net]
質問0
yieldを使って実装されている。難しくないからやってみたらいい。

質問1
合っている。

質問2
>引数として、Func<TSource, IEnumerable<TResult>>ビルトインデリゲートのみを採っている。
これは間違い。thisパラメータはextensionmethodを呼ぶときに.(ドット)の左側の値が暗黙的に渡る以外は普通の引数。
>メソッド名extendmethodのすぐあとにある<TSorce, TResult> って何なのでしょうか。
ジェネリックの型パラメータ。List<T>の<T>と同じで、「任意の型に置き換えられる」ことをコンパイラに指示している。
hoge.extensionmethod(x => x.y)
として呼び出したとき、hogeがIEnumerable<Hoge>型であれば、
コンパイラはTSourceにHogeが暗黙的に指定されたと推論する。
同様に、x.yがint型であればTSourceの型はint型になる。
型引数はもちろん手動で hoge.extensionmethod<Hoge, int>( と指定することもできる。

108 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 12:38:22.34 ID:14/sy/Q9.net]
>>107
親切にお答えくださってありがとうございます。
ぼんやりと見えてきた感じがします。(まだその程度)


>型引数はもちろん手動で hoge.extensionmethod<Hoge, int>( と指定することもできる。

これは、面白いです。
extendmethod<TSorce, TResult>の、わざわざ角かっこ内に定義されたジェネリック型指定が活きてきたからです。
つまり、extendmethod<TSorce, TResult>のように、ジェネリック型を定義することではじめてコード内でその型のプレースホルダを使えるようになることがわかりました。

次のように言えるわけでしょうか。


hoge が、IEnumerable<Hoge>型のオブジェクトであるとき、そして、x.yであらわされる値がint型であるとき、
次のようにして拡張メソッドを呼び出すことができる。
また、使用する拡張メソッドの定義は、次のとおり)
public static IEnumerable<TResult> extensionmethod<TSorce, TResult>(this IEnumerable<TSource> source, Func<TSource, int> f) {}

この拡張メソッド呼び出し方:

1、ノーマルな呼び出し方(このとき、2点は暗黙に指定されている。以下2、3の呼び出し方でこれらをそれぞれ明示的にしていく)
hoge.extendmethod(x => x.y)

2、メソッド内で使われるジェネリック型を、明示的に、指定する
hoge.extendmethod<Hoge, int>(x => x.y)
このとき、ラムダ式のxは、TSourceなので、すなわち、Hoge型ということになる。(質問:合っていますでしょうか)

3、拡張メソッドであることも、明示的に、表しながら呼び出す
hoge.extendmethod<Hoge, int>(this hoge, x => x.y)


109 名前:108 mailto:sage [2015/10/06(火) 12:39:00.18 ID:14/sy/Q9.net]
メソッド名に続くこういうジェネリック型指定、たとえばMethod<T1,T2>のような書き方は普段はつかっていませんでした。
Methodは引数の型だけを意識していました。
普通のクラス内にメソッドを定義するときにも、こういう形式は使えるんだと思いました。(質問 B:以下のコードは正しいでしょうか。)

public string Method<T1>(T1 z)
{
return T1.ToString();
}

ありがとうございます。



110 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 13:10:56.41 ID:RmS10x6f.net]
>>108
>3、拡張メソッドであることも、明示的に、表しながら呼び出す
>hoge.extendmethod<Hoge, int>(this hoge, x => x.y)

実体は静的メソッドなんだからそれはない
定義されてるクラスをFooとして
Foo.extendedMethod( hoge, x=>x.y );
なら可


>質問 B:以下のコードは正しいでしょうか。

正しくない。

public string Method<T1>(T1 z)
{
 return z.ToString();
}

あとこの<T1>は必須だよ

111 名前:108 mailto:sage [2015/10/06(火) 14:34:29.84 ID:14/sy/Q9.net]
>>110
すみません、ありがとうございます。

>Foo.extendedMethod( hoge, x=>x.y );

this修飾子は、呼び出す側には不要ってことなんですね。


>return z.ToString();

そうか、引数定義で指定したメソッド内変数zが、ジェネリックT1で型打ちされているから、
これでいいわけか。
なるほど。ありがとうございます。

あとは、コンパイラに指摘されながら、覚えていきたいと思います。


ご親切にお相手くださってありがとうございました。

112 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 12:05:17.27 ID:tDhsttHF.net]
sharpdevelopでリリースビルドしようとするとエラーでる
log4netは32bitでターゲットcpuをanycpuにしてるからっぽいんだがどうやったらターゲットをx86にできんの?

113 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 12:20:03.23 ID:40NgKpJy.net]
さすがに今時SharpDevelopはないわ
WinならVSCE, MacやLinuxならVSCodeかMonoDevelop

114 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 12:52:22.89 ID:1Tzy0x1l.net]
LINQすら使えないやつは、C#使うんじゃねーよww

115 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 13:17:18.10 ID:9sdQQKJG.net]
芝は心の安寧を求める意識の現れ

116 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 19:26:33.40 ID:F4sBdgXs.net]
テストをインチキプログラムで突破する類似品に注意vwvwvwvw

117 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 20:53:19.01 ID:B5U/bW9V.net]
Enumeratorってなんて発音するの?
いーなめれいたー?  えにゅみれいたー?
paramsってぱらむすでいいのかな

118 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 21:10:26.95 ID:LRcqoY9G.net]
発音記号を見ろ
無理やり日本語読みすると「いなむれーた」と「ぱらむ」で過半数程度には通じる

119 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 22:50:51.42 ID:3pa+NQnn.net]
えにゅーめらぼー



120 名前:デフォルトの名無しさん [2015/10/09(金) 03:17:38.95 ID:AWj2PSbP.net]
あるクラスがあって、このクラスに継承可能で複数設定できる属性がつけられてる
このクラスを継承すると、その属性も継承するわけだが、属性は継承したくないんだ
継承したクラスで、元のクラスについてる属性消す方法ってないかな?

121 名前:デフォルトの名無しさん [2015/10/09(金) 03:21:23.16 ID:bnFBmvSl.net]
属性にはスコープをつけられる。
継承したら無効とか。

継承元の属性をいじれない場合はしらん。

122 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 03:42:47.55 ID:AWj2PSbP.net]
>>121
属性そのものをいじりたいんじゃなくて、継承元クラスについてる属性を消したいんだよ

その継承元クラスについてる属性のAttributeUsageはInherited=true, AllowMultiple=trueだが
それを変えたいわけじゃない

123 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 16:27:25.69 ID:1E5VI5Cy.net]
まあ無理だろ
読み取る側が継承してる属性なんか取ってこなくていいって言うことはできるけど

124 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 17:31:11.35 ID:AWj2PSbP.net]
>>123
やっぱり無理か
読み取り側を変更するぐらいなら、渡すクラスも一から自作するわ
なんでプロパティじゃなくて属性なんかで設定するようにしやがったんだろう

なんとなく使い分けてるけど
プロパティで実装するべきか、属性で設定するべきか、使い分けの指針とかあるのかな?
設定する基準がインスタンス単位かクラス単位か?

125 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 19:38:57.34 ID:Zss3YWYL.net]
>プロパティで実装するべきか、属性で設定するべきか

全然別物だろ
ラップしたら

126 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 21:07:35.97 ID:CFgeSmkK.net]
カスタム属性は、メタ情報というかタグというか…

例えばEnumのフィールドに別名(日本語名)が欲しい場合に使う

127 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 21:14:25.60 ID:0JeYvXK2.net]
メタ情報は必要だけど
メタ情報で日本語書くよりは
Enumのメンバーを日本語にするのが吉

128 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 21:25:12.13 ID:AWj2PSbP.net]
>>126
メタ情報っていう用語も実際のとこ、俺にはちゃんと説明できない用語だが
単なるタグだっていうなら、動作に影響するようなものは属性で制御すべきじゃないのかと

たとえば検証に関してなら、エラーメッセージは属性が適当かもしれんが
最大桁数や、エラーチェックするかどうかは属性で制御するのが適当だろうか?

>>127
それはまさに、通常の情報なのかメタ情報なのかの違いだと思うが
その意見は、メタ情報じゃなく通常の情報としてインプリメントしろって意見だろ

129 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 21:36:36.32 ID:CFgeSmkK.net]
>>128
例えばデータを格納するプロパティに属性付けて最大桁数やらチェック種別Enumを入れるのもいいよ
エラー種別Enumにはエラー検証用の正規表現付けたり

エラーメッセージはエラー検証メソッドで生成させるかな

>>127
インテリセンス的にどうよって思ってやったことない



130 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 21:38:21.20 ID:XIlHZiEB.net]
いやEnumのメンバー名はメタ情報の一つだよ
変数名はプログラムそのものについての自己記述情報に他ならない
>>127は2重にメタデータを持つことはDRYに反するよねというだけの問題

131 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 21:44:10.25 ID:Zss3YWYL.net]
メタってのはようするに当該クラスの外部ってことだろ
それ自身がを超えた制御情報ってだけで

べつに属性だろうが外部クラスの定数だろうが
好きにしたらいいんじゃね

132 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 21:57:49.30 ID:AWj2PSbP.net]
>>130
なるほど、Enumのメンバー名がメタ情報だってのは理解できる
2重にメタデータもつなってのも納得した

では、属性の使いどころはどこだろう
元の言語仕様でサポートされてない開発者独自のメタ情報の表現のため?
じゃあメタじゃない情報を属性で扱うってのはやっぱり下策なのだろうか

133 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 22:57:53.19 ID:HsR0vRx2.net]
外部じゃなくて上位だよ

134 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:01:13.11 ID:HsR0vRx2.net]
夫見逃すところだった
enumのメンバー名はメタじゃないぜええええええ

なぜなら文字列からパースできるから

135 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:03:16.07 ID:CFgeSmkK.net]
>>132
>>129に使用例書いただろ

136 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:06:04.38 ID:XIlHZiEB.net]
>>134
あれリフレクションで実装されてるんだぜ
カスタム属性で日本語名付けられるようにしたとしても、ほとんど同じ実装になる
だって組み込みのメタデータかカスタム属性で与えられたメタデータかだけの違いしかないからね

137 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:10:15.20 ID:HsR0vRx2.net]
今の話でリフレクションを持ち出すといろんなものがメタ扱いになってしまうw

138 名前:デフォルトの名無しさん [2015/10/09(金) 23:14:51.18 ID:lI8PbTGr.net]
なぜswitchでstring使えないんですか?

139 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:18:41.11 ID:HsR0vRx2.net]
それってC++かjavaじゃね?



140 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:48:22.88 ID:XIlHZiEB.net]
>>137
意味がわからない
俺は>>134のレスで文字列からパースできるからメタじゃないという謎の理屈を見て、
きっと「文字列からパースできる」→「なんか特別な仕組み」→「メタじゃない!」という思考なのだろうと推測した
だからenumのparseがリフレクションで実装されていることを示すことにより、
文字列からパースできるからといって何ら特別ではないことを証明したつもりだったんだが、的外れだったようだ
真剣に疑問だから「文字列からパースできる」→「?」→「メタじゃない!」の?の部分を教えてくれ

141 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 00:13:08.97 ID:VY+pcMt2.net]
パース可能 言語レベルで対応されている メタじゃない

142 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 00:31:50.62 ID:rHFZYJSj.net]
そりゃ誰がどう見ても言語レベルで対応されてるけど
それにパース可能かどうかがどう関係するのかが全く理解できない
DateTimeはParseがあるからメタじゃない? RectangleはParseがないからメタ?
メタって一体何?
ちなみに.NETの公式の用語としては、メタデータはメソッド本体を除くクラスとメンバに関する全ての情報を指す

143 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 05:24:02.05 ID:/nOfalKF.net]
EnumのParseはC#の言語仕様には無い

144 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 10:00:53.58 ID:chRrQaCq.net]
>>138
定数じゃないとあかんで

145 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 10:25:12.24 ID:EHQzzmJM.net]
>>144は文盲
一つ後のレスも読めないらしい

146 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 10:27:04.87 ID:rHFZYJSj.net]
変数は無理って意味でしょ
別に間違ってない

147 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 10:47:14.46 ID:chRrQaCq.net]
>>145
煽るなよクズ

148 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 21:02:17.87 ID:6MWep/bm.net]
属性は言語仕様を変えることなくコンパイラやらプログラ厶用に機能を追加できるというのが肝だと聞いた

149 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 21:11:41.59 ID:OjkSZXQt.net]
属性は、メンバーとか型に追加の情報なり識別子なり持たせる役目だと思う。



150 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 14:23:33.79 ID:lDigt0qz.net]
\(^o^)/ぬるりっちょ

151 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 22:40:22.83 ID:pwM6df0l.net]
List<object> list=new List<hoge>;
的なのが出来ない理由分かったぞ!
もしこれが出来たら、listはhogeとhogeと子クラスしか入らないはずなのに(特定メソッドを持っている事が保障される)、objectイントランスとかが入ってしまうからだ。
もしhogeにargs()メソッドがあるとして
List<object> list=new List<hoge>;
list.Add(new object());
list[0].args();
ってやるとおかしくなるもんね 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


152 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 23:04:21.79 ID:e5VIXU4j.net]
ほうほう、ではなぜ
Object[] a = new Strin[1];
ができるのですか

153 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 23:12:03.39 ID:pwM6df0l.net]
>>152
知らん

154 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 23:16:57.36 ID:pwM6df0l.net]
object[] o = new string[1];
o[0] = new object();
出来たけど起動したらパソコンぶっこわれた

155 名前:デフォルトの名無しさん [2015/10/13(火) 00:46:06.78 ID:AkH9qfzr.net]
>>151
いや、できるだろ。
指定型じゃないobjectをaddしたら例外吐くと思うが。
ジェネリックの共変性とかでできなくなったのか?

156 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 00:56:55.40 ID:rx5Up+1Q.net]
List<object> は object 型じゃないから、違う型である List<hoge> を代入出来ないだけじゃねーの。
だから、
object list = new List<hoge>;
とか、
List<object> list = new List<object>; list.Add( new Hoge() );
とかは出来るんじゃね?

157 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 07:14:34.67 ID:IPzu3dLL.net]
ジェネリックの共変や反変を使用するには
型パラメータにそれぞれin、outを指定する必要がある
inやoutはインターフェースまたはデリゲートにしか指定できない
また、inまたはoutを指定した型パラメータはそれぞれ引数(入力)または戻り値(出力)にしか使えなくなる
たとえばIReadOnlyList<out T>やIEnumerable<out T>などの読み取り専用インターフェースはout Tなので
List<hoge>をIReadOnlyList<object>やIEnumerable<object>にキャストしたりすることはできる

158 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 18:40:15.12 ID:1yUdPEbp.net]
配列の共変性は例外

159 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 14:19:58.33 ID:roB5XZwg.net]
>System.InvalidOperationException: シーケンスに、一致する要素は含まれてません

なんで会話体なんだよw
ぐぐったらぐーぐるさんに

もしかして シーケンスに、一致する要素は含まれていません

って怒られたわ



160 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 19:23:17.82 ID:plKY4Q25.net]
ちょっと聞きたいんだがシリアル通信で対向側から100バイト分の

161 名前:データが送られてきたときに100バイト取得出来るときと40バイト60バイトみたいに複数回に分けて送られてくるのはなんでなの? []
[ここ壊れてます]

162 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 20:48:58.18 ID:3PxZRlNz.net]
>>160
知るかよw
どんな質問だよw

163 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 20:52:27.20 ID:R/ItuJii.net]
>>160
メーカーに聞きなよ
つかC#関係ないじゃん

164 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 21:15:23.90 ID:3PxZRlNz.net]
>>160
場違いな質問だけどまあちょっとだけフォロー。

今時シリアルポートが付いてるPCの方が少なくと思うからどうせUSB-シリアルの変換ブリッジ経由のアクセスだと思うけど、
USBはRS-232Cと違ってパケット単位の送受信になるから、アクセスの仕方によっては
見かけ上そのように見える可能性はあると思う。

まあ、たぶんこれは考え過ぎで関係ない。
恐らくデバイス側の仕様の線だろう。

165 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 22:14:59.79 ID:cazvS2P7.net]
>>160
シリアル通信には『40バイト60バイトみたいに複数回に分けて送られ』
などという考えはありません。
まず「シリアル」通信とはどのような考えの通信なのかを勉強し直してください。

166 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 22:50:13.49 ID:0i22usD/.net]
シリアル通信自体にはなくても、
シリアル → OS のバッファ → ファイルハンドル経由で受信 とかしてれば OS のバッファからはき出すタイミングと
ファイルハンドル経由で読み取るタイミングとの関係で途中で切れることもあるんじゃね。

163 の言ってる USB のパケ単位の受信でも同じ要領なんだろうし。(たぶん)

167 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 23:09:35.66 ID:3PxZRlNz.net]
まあ厳密に言えばUSBだって物理層レベルではただのシリアル通信だし、
232Cだって少なくともPCでは、一番下の水準だってハードウェアバッファに対してまとめて読み書きしてる
だけなんだけどさ。

168 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 23:50:33.81 ID:GlsuvrM1.net]
40バイトしか届いていない瞬間に読み出せば
40バイトしか読みとれないだろう
それを「複数回に分けて送られてくる」とは言わないぜ
100バイト届いているのに40バイトしか読みとれないことは考えにくい

169 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 00:03:40.24 ID:A8PPNIqS.net]
FTDIってUSB-232Cの変換ブリッジICのメーカーのドキュメント見たら
バルク転送のパケットのペイロードの64byteのうち、2バイトはシステム(FTDIのICとドライバーの間のやりとり)が使って
残りの62バイトが正味のペイロードみたいだから、>>163に書いたような理由かもしれんね。

www.ftdichip.com/Support/Documents/AppNotes/AN232B-04_DataLatencyFlow.pdf



170 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 00:30:04.83 ID:KAwMDrmB.net]
と言うか、基本はデータ長を識別出来るようにして送った上で、
データ長分のデータをきちんと受け取ってから処理するようにすれば済む話で、
普通はそういう風に実装するよな。

パケ通信とかでもこの手の質問はよく挙がる。

171 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 08:14:43.34 ID:w2ONMRNp.net]
ソリューションエクスプローラで、自分で作成したフォルダを右クリックして
追加-クラスで新規作成すると、namespace プロジェクト名.Class
って拡張子(.Class)がついてしまうんだけど、これならないように設定できないの?

172 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 09:13:29.49 ID:IIEWzpZc.net]
拡張子ちゃうで

173 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 21:29:35.57 ID:oF9r0LvQ.net]
>>170
ttp://stackoverflow.com/questions/3317141/automatically-add-namespace-when-adding-new-item
これと逆のことをすればいい

174 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 23:51:28.24 ID:iL1w7ncH.net]
特定メソッドのオーバーロードが用意されている型のみを引数で受け取ることは出来ませんか?

175 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 23:56:16.88 ID:/26VfrL0.net]
>>173
何を言ってるのか全然わからない

176 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 23:59:55.94 ID:iL1w7ncH.net]
static int hoge(a args);
static int hoge(b args);
static int hoge(c args);
という関数があったとすると

static int f(hoge() args){
return hoge(args);
}

みたいな事は出来ないかなと思って

177 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 00:03:58.16 ID:XvNYZLvx.net]
ジェネリックを使えばよいんじゃね?

178 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 00:35:45.30 ID:FN3G7dO/.net]
static int f<T>(Func<T, int> hoge, T args)
だな

179 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 00:41:26.06 ID:XvNYZLvx.net]
C#のことは全然知りませんが

static int f<T>( T args )
{
  return hoge( args );
}

これではダメなんですかね?



180 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 08:22:48.75 ID:bMkc0D2x.net]
独学なので教えて欲しいのだけど
メソッド書いたときにほとんどの場合returnに戻り値を付けずにクラスのフィールド値を書き換えて
すませているんだけど、パフォーマンス的にそれでもいいの?
書き方の作法として、できるだけ戻り値で返してフィールドに
値を残さないとかそういうものってあるのかな

181 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 10:58:03.82 ID:/9+8IY9r.net]
パフォーマンスを聞きたいのか作法を聞きたいのか焦点がぼけてる

182 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 10:58:33.71 ID:TCTaTEQd.net]
作法というかメソッドの目的による。
object.ToString が文字列を返さないとか、object.setValue が値を返すがフィールドを変化させないとかが合理的だろうか?

183 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 11:01:30.64 ID:t8SS3rgX.net]
すごい、こんぽんてきなところで、C#とまったくむかんけいなしつもんだ…

184 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 12:36:32.28 ID:NrGyflQ0.net]
>>179
「C# プロパティ」で検索するときっとピッタリのものが見つかる

185 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 17:25:02.26 ID:vLvdh1RP.net]
自動実装プロパティだとJITが最適化してくれるからほぼフィールドアクセスと変わらない。
というか、その程度、気にしたところで誤差の範疇でしかないだろ

186 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 18:39:25.56 ID:DYiNz1wT.net]
ASP.Netが今度色々今っぽいグラントとか載るみたいやけど
皆々様はウェッブ開発はC#とNodeならどちらが樂ですか?
ASPでフロントにReactjs使ってる人、いるのかなあ。日本語のやってます情報ひとつもない

187 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 18:50:00.22 ID:/9+8IY9r.net]
nodeはようやくLTSが出たばっかりだし
C#を使ってるくらいだから「ようやくプロダクション時の候補として選べるな」くらいに思ってんでは

188 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 19:52:42.76 ID:QYO898Dn.net]
web入門にはnodeの方が取っ付きやすいだろう
aspは通信処理が隠蔽され過ぎてて初心者にはかえって入り難いと思う

189 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 21:05:51.44 ID:6ZAFfyFg.net]
>aspは通信処理が隠蔽され過ぎてて
例えば?



190 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 21:12:22.08 ID:vLvdh1RP.net]
ブラックボックスになってて、裏側で何してるかわかりにくいってことだろ

191 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 15:01:52.95 ID:EVhgfJB8.net]
>>160
遅いけども
serialPort1.ReadBufferSize
の、値を大きくしてみ

192 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 16:18:31.37 ID:IMT9I6Q/.net]
>>190
そんなの無関係。
受信バッファをオーバーフローしたデータは単に捨てられるだけ。

193 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 16:22:15.21 ID:IMT9I6Q/.net]
ああ、フロー制御された場合を想定してるのか。
一応ありうるけど可能性は低いな

194 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 06:05:58.46 ID:GwYAWrq0.net]
オブジェクトの初期化(フィールドの復元)は、コンストラクタで行うべきだと痛感した。

このオブジェクトの通常のsetプロパティーを使って、初期化(フィールド復元)コードを作成したら、
妙なバグに悩まされて、6時間!(見当をつけたメソッド内に、デバッグ用の変数をあちこちに設置して、ようやく見つけた。)

この通常のsetプロパティの正常な動作は、同じgetプロパティーに依存するようになっていた。(自分でそのように作っていた)
以下、バグ発生の仕組み↓

1、setアクセサで「プライベート変数を初期化」しようとする。これが目的である。(プライベート変数は初期化できていない。)
2、setアクセサ内には、getアクセサ経由で「同プライベート変数」に依存するコードが存在している。ところが、この変数はまだ初期化されていない。
3、初期化されていない変数の影響で、setアクセサがおかしい動作をする。(変数は初期化されないまま。)!バグ発生!

もし、ここで、コンストラクタを使って、直接プライベート変数を初期化していたら、こんなことにはならなかった。
そしてオブジェクトにアクセスして、setアクセサでさらに値を変更しても、
たとえsetアクセサ内でgetアクセサに依存するコードがあったとしても、動作していた。


長くなりましたが、おねがいします。
(1)setアクセサ内で、同じプロパティのgetアクセサに依存するコードを書くことは、良くないんでしょうか。禁則に当たりますか?
(2)オブジェクトの初期化は、絶対に、コンストラクタで行うべきでしょうか。
(3)熟練プログラマは、デバッグせずとも、エスパーでバグの住処を言い当てられるのでしょうか。
(「思い込み」から逃れられずに、早々に詳細なデバッグをかけず、結局6時間もかかってしまいました。)
(4)バグが、VisualStudioで開いている方のプロジェクトでなくて、
別のソリューションでビルドされたdllファイルに閉じられたクラスに存在する場合、
デバッグをかけるために、わざわざ別ソリューションのその対象のクラスのみをこちらのプロジェクトにコピー&ペーストして一度統合するしかないんでしょうか。

195 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 07:36:25.62 ID:FoOVnDir.net]
>>193
問題を履き違えている
(1) プロパティに限った話ではない。
  今回「デバッグに時間がかかった」のは別のメソッド(getter)経由で未初期化フィールドを参照していたことに
  気づかなかったためであり、同じプロパティのgetアクセサに限らず一般のメソッドであっても
  「同プライベート変数」でなくても問題は発生しうる。
  結局自分の書いたコードの動作を理解していないことが原因であって、規則で縛ってどうにかなる問題ではない。
(2) 問題の本質ではない。絶対に、動作を自分で理解していないコードを書かないこと。
  とはいえ常に最小粒度の命令レベルまで全て把握しろというのは無理な話なので、
  理解しやすくするためにカプセル化や不変オブジェクトなどの様々な手法が存在する。
  コンストラクタでまとめて直接初期化する方が理解しやすいのならそうすればいい。
(3) エスパーできるかどうかは経験の問題だが、デバッグするにしてもコードの各地点でそれぞれ
  どういう状態になっていてほしいのかを正しく理解していれば問題箇所の特定は機械的にやれるはず。
  そのとき把握する必要のある情報の範囲が狭いほどデバッグは容易なので、
  一般的にはなるべくそれを局所化するのがデバッグしやすいコードを書くコツ。
(4) pdbファイルがあればデバッグ可能。

196 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 08:00:05.12 ID:VM5bh9Hg.net]
名前空間を複数形にするかどうかはどうやって決めればいいですか?

197 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 13:10:38.44 ID:7JhC24+l.net]
プロパティ内で色々やらせるのはよくないよな
例外処理できないし

198 名前:デフォルトの名無しさん mailto:sage [2015/10/23(金) 15:02:38.35 ID:+AiXCDdV.net]
なんで例外処理できないと思った?

199 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 12:04:22.22 ID:/s9N4mON.net]
>>179
パフォーマンスも保守性も可読性も最悪
どうしても必要でなければオブジェクトの状態を更新してはならない



200 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 17:04:51.29 ID:dOGyJCjw.net]
>>179
クラス内で使い回すからそうしているんだろうけど、そのメソッドを利用する側はどういう結果を出されたかわからないわけです。まあフィールドを見ればわかるけど。それにクラスを分離しようとするときもフィールドに依存していると面倒なことになる

201 名前:デフォルトの名無しさん mailto:sage [2015/10/24(土) 17:17:56.73 ID:qC5jNYSK.net]
>>199
問題を混同してるな。
それは本来必要のないはずのフィールドを持っちゃった場合の問題。

否定的な意見が多いけど、フィールドなりプロパティなり保持してるデータを更新するのに、

_hoge = GetHoge();

だろうが
UpdateHoge();

だろうが同じこと。
前者の方が分かりやすいとかそんなことないよ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<218KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef