C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
一乙
うんこみたいなC
6 :
デフォルトの名無しさん :2014/12/28(日) 21:59:57.74 ID:/g9XUAft
引数の型・関数がまったく同じで、中身が違うクラスがあるのですが、 まとめて扱うことは可能でしょうか。 たしか、<T> ってのが、 ネットのサンプルにあったのですが、 使い方がよくわかりません。 addcomponent<ClassA>().init(int,float,"String"); addcomponent<ClassB>().init(int,float,"String"); ↓ addcomponent<T>().init(int,float,"String"); こんな感じにまとめたいです。
>>6 違う処理だけabstractメソッドにしてClassA, ClassBそれぞれで別の実装を割り当てればまとまるかもね
>>6 かinterfaceを付けてwhere T:Hogeで制約を指定すればいいと思うけど何がやりたいのかいまいち分からん
>>6 意味がわからないから何がしたいのか目的を教えて
クラスとか引数とか関数とか一般的な表現じゃなくて、
何を作ろうとしててどういうことをしててどこで詰まってるのか
見た感じで言うと ClassA ClassB が BaseClass から派生していて AddComponent(BaseClass component) こんなのがひとつあれば十分そうな見た目だけどね 使うときは AddComponent(new ClassA(1, 1F, "String")) って感じで
元はT AddComponent<T>() where T:new()なのか? でもnew()制約知ってて型制約知らないってことはないよな
13 :
デフォルトの名無しさん :2014/12/28(日) 22:29:36.54 ID:eacLnmbF
プロパティでIEnumerable<継承クラス>を取得して、 それをIEnumerable<基底クラス>を引数に取る関数に渡したいのですが、うまくいきません。 以下のようなコードを書いたのですが、間違っているのでしょうか? public static void test(Base obj) public static void test2(IEnumerable<Base> obj) test(new Inheritance()); //OK test(new Inheritance[]{}); //OK public class IEnumerableTest<T> where T : Base public IEnumerable<T> Get{get { return _Targets; }} test(new IEnumerableTest<Inheritance>.Get()) //NG
>>13 多分プロパティに()つけて呼び出してるのが間違ってるんじゃないの
public IEnumerable<T> Get(){ return _Targets; }
こうじゃダメなの
15 :
デフォルトの名無しさん :2014/12/28(日) 22:40:27.16 ID:eacLnmbF
>>14 申し訳ない、プロパティを()で読んでるのは転記ミスでござる。
関数で受け取れば渡せるが、プロパティで受け取ると渡せない。
何が起こっているの??
test2(new IEnumerableTest<Inheritance>.Get) //NG
test2(new IEnumerableTest<Inheritance>.GetFunk()) //OK
16 :
デフォルトの名無しさん :2014/12/28(日) 22:49:28.57 ID:eacLnmbF
すまん、やっぱどっちもNGだ
お前は何を言っているんだ
一度深呼吸して
コード片じゃなくて完全なコードを
>>1 のideoneにコピペしてみて
19 :
デフォルトの名無しさん :2014/12/28(日) 23:08:30.43 ID:eacLnmbF
つまりだ、 test(new Inheritance[] { }); //OK test((IEnumerable<Inheritance>) new Inheritance[] { }); //NG ってことなんだ。 俺は引数に何のインターフェースを使えばいいんだ?
20 :
デフォルトの名無しさん :2014/12/28(日) 23:08:55.36 ID:eacLnmbF
21 :
デフォルトの名無しさん :2014/12/28(日) 23:22:05.58 ID:eacLnmbF
そういうことだな ジェネリックの共変性と反変性 を調べてみて
場所のキメ打ちではなくexeファイルと同じフォルダーに入っているtxtファイルを読むようにするにはどうすれば言いのですか?
26 :
デフォルトの名無しさん :2014/12/29(月) 02:21:26.92 ID:7EAdwxrq
>>10 すみません…
Unity でシューティングゲームの敵データを、
CSV から読み込もうとしています。
Unity質問スレからこちらに誘導してもらいました。
CSV は1レコードの前半は共通仕様、
後半は読み込むデータ形式は同じですが、
後半データは敵の行動パターンごとに使い方が異なります。
体力や初期位置など共通して使うものは、
共通コンポーネントで持ちました。
差異が発生する後半部分(その敵固有の処理)は
同じデータ形式で取り込むのですが、
使い道や処理が違うので
取り込み先が違うコンポーネントになっている、という感じです。
コンポーネント名だけ書き換えて、
まったく同じ読み込みソースをコピペしてるのが、
スマートじゃないなと思いました。
void yomitori ( GameObject go, Type classType, 引数いっぱい ){
go.getComponent<classType>().init(引数いっぱい);
}
こんな感じにクラス(コンポーネント)を指定できるようにして
まとめたいなと思いました。
27 :
デフォルトの名無しさん :2014/12/29(月) 02:26:56.53 ID:7EAdwxrq
ジェネリックってやつをやればいいんでしょうか
>>26 既に他の人が判りやすく説明しているけどに共通部分をまとめた基底クラスを作ってAとBがその基底クラスを継承する
コンポーネントを追加するときは作成したコンポーネントインスタンスをAddComponent()の引数として渡して
コンポーネントを取得するときはGetComponent<基底クラス>()とすればいい
>>28 出来ました!
継承を実践で使ったことがなかったので
まったく考えてませんでした。
ありがとうございます!
>>26 この場合はテンプレートメソッドかな
abstract class GameObject {
int 共通情報;
public void Yomikomi(CSVの行データ) { 共通情報 = CSV前半; ActionPatternYomikomi(CSV後半); }
protected abstract void ActionPatternYomikomi(CSV後半);
}
class EnemyA : GameObject {
int 固有情報A;
protected override void ActionPatternYomikomi(CSV後半) { 固有情報A = CSV後半; }
}
class EnemyB : GameObject {
int 固有情報B;
protected override void ActionPatternYomikomi(CSV後半) { 固有情報B = CSV後半; }
}
GameObject a = new EnemyA(), b = new EnemyB();
a.Yomikomi(CSV1行目); b.Yomikomi(CSV2行目);
有限状態マシンを使っているときに特定の状態に変化したときに呼ばれたい関数をすっきりと書くにはどのように記述するのがベストでしょうか void OnStateEnter () { } という関数を特定の状態の時に呼び出してほしい用に記述したい Attributeか何かをうまく使って指示できませんかね [StateIs(Running)] void OnStateEnter () { } こんな感じで
yield使う 普通にまっすぐ書いたコードからステートマシンを自動生成してくれる
あとは、どこかにデリゲートとして次に呼び出してほしい関数を登録しておく方法がある 登録先によってStateパターンとか継続渡しとか呼ばれる方法だね 列挙体かなんかをキーにしてデリゲートをディクショナリに登録しとく手もあるけど、 単純に処理の振り分けに使いたいだけなら冗長
35 :
デフォルトの名無しさん :2014/12/30(火) 23:51:20.16 ID:ZXsgTzJD
これをLinqに直すとどこまでスマートになるのか教えてください for (i = 0; i < 100; i++){ list.Add(i); }
>>35 list = Enumerable.Range(0,100).ToList();
37 :
デフォルトの名無しさん :2014/12/31(水) 01:34:01.19 ID:hZ6ACt+c
38 :
デフォルトの名無しさん :2014/12/31(水) 01:37:47.29 ID:hZ6ACt+c
>>37 すみません、これだと型がintになっちゃいますよね。
iがなんかのクラスの場合はどうやるのですか?
Range(0, 100).Select(i => new Hoge(i)).ToList();
partial enumを何とか実現できないでしょうか enumの定義そのものはクラスライブラリ側で行って、 中身だけアプリケーション側で定義したい 文法的には不可能ですが似たような機能を実装できないでしょうか
何がしたいのか全く分からん
ライブラリ側 public struct Color : IEquatable<Color> { public Color(int value) { this.value = value; } /* valueを比較するEqualsを実装 */ } アプリケーション側 static class Colors { public static readonly Color Blue = new Color(0x00FF00); }
IDE上の話ならTypeConverter.GetStandardValuesとか
そもそもEnumって定義側で値を制限するための機能だろ 無制限に外部で作らせてどうする
複数のpartialブロックを作った場合、 数値の割り当てどうするという問題が
46 :
40 :2015/01/01(木) 11:50:50.94 ID:vAAHlH5Q
有限状態マシンを提供したいんですよ Appelaration<State, Trigger> fsm; みたいな。 どういうステートがあるかはアプリケーション側で定義するので partial enumがどうしても必要なのですがいいアイディアが思いつきません
Enumは拡張を意図してないんだから 拡張を意図した構成要素を使えばいいだけだろが そう、クラスだ あほなことを止めろ
有限状態マシンってよく知らんけど、 Stateパターンじゃダメなん? これなら、状態の基底クラス作っとけばユーザー側で継承して 任意に状態クラス作ればいいし
stateを列挙体=定数でしか定義できないって不自由じゃん あとpartial class自体アセンブリを超えて分割できる物じゃないぞ
とりあえずWFでも研究したら
状態を増やしていくっていうのはもうスクリプティングの段階に入ってるから そこでクラスを一つ一つ継承するっていうのは記述に対して実入りが少なすぎる
D(S.Initial, T('a',S.a), T('b',S.b)); D(S.a, T('b',S.ab), T('c', S.ac)); ... まあこんな感じで書ける程度の記述合理性は欲しいよね DはDefine SはState(enum) TはTriggerの略で StateがそれぞれDefineされてるかどうかの整合性チェックも一応リフレクション使って実装しときたいな
Stateのenumはデフォルトのただの連番っていう約束を決めておけば ライブラリ側はenumの具体的な値であるintに対して処理すれば 全てのenumに対して使えるからそれでいいんじゃないかと思った
文字列でいいよそんなもん
せっかくC#使ってインテリセンスのサジェストを受けられるのに 文字列とか無いわw
String型だとseが効かないって誰が決めたんだよ
なぜSE… 上で書いた通り方に関係なくTypeConverterを使えばIntelliSenseは効く
列挙体にしたところで結局実際の値はアプリケーションが勝手に決めるんだから インテリセンスは自動的には効かないだろ どっちにしろ定数クラスに纏めるなら値が数値だろうが文字列だろうが使い勝手は一緒 でも拡張性を持たせるなら文字列の方が管理は容易だ
>>57 俺はenumの代わりにダブルクオートでくくって文字列直打ちするっていう話だと思ったけど
D("Initial", T('a',"a"), T('b',"b"));
これがTypeConverterを使うとどうにかなってインテリセンスが効くようになるの?
>>58 public const string Initial = "Initial";
こんなふうにやってくって話?
これを書くのがまず面倒だし
定義箇所が複数に分かれたら同じ文字列が出てきちゃう場合が考えられるから拡張性も高いとは思えないな
俺だったら複数に分けるほど大きくなる場合は
namespace N1{
enum S{ A, B, C }
class Script : ScriptBase{
void D(S s, params T[] triggers){
StateMacine.Instance.Set(typeof(S), s, triggers);
}
public static void Initialize(){
D(S.A, T('b', S.B), T('c', S.C), T('d', N2.S.D));
}
}
こんな感じでenumの型情報と一緒に登録して型ごとに分かれるようにして
ある型のenumが初回出現した時に対応するScriptクラスをnewして登録するようにすることで
初期化の負荷も分散できるようにするかな
なんか間違いまくってるな namespace N1{ enum S{ A, B, C } class Script : ScriptBase{ static void D(S s, params T[] triggers){ StateMacine.Instance.Set(typeof(S), s, triggers); } public static void Initialize(){ D(S.A, T('b', S.B), T('c', S.C), T('d', N2.S.D)); } }} ある型のenumがTriggerで初回出現した時に 対応するScriptクラスのInitializeメソッドをリフレクションで呼び出して登録するようにすることで 初期化の負荷も分散できるようにする だわ
読みづらすぎ
命名についてはとやかく言うつもりはないが、
呼び出し先の処理と状態遷移の定義が分離されてていいんなら、もう状態遷移表を外部ファイルか配列で持つわ
コード中に書くんであれば、コードとそれに関連する設定はまとめた方が読みやすいし修正ミスが防げる
>>32 みたいに属性使うとか規約ベースでメソッド名使って定義するとかね
そんなこと言ったって一つが膨大になる場合は幾つかに分けないとしょうがないだろう そうでなければ一つにまとめりゃいいし 一つで済むならenum連番を拒む理由もないはず enum連番なら配列に入れられるからパフォーマンスも良いし
>>62 1つに纏めるっていうのは状態遷移表を一つに纏めるって意味じゃないぞ
[State(A), Trigger(B), Trigger(C)]
void OnA() { ... }
[State(B), Trigger(A)]
void OnB() { ... }
こんな風に処理と設定をセットにするってこと
設定は設定、処理は処理でまとめるよりもこのやり方の方が良いかどうかは場合によるが、言いたいのは
・設定は設定でまとめるんならコード中に中途半端に混ぜないで外部ファイルに出せ
・コード中に設定書くなら処理と纏めろ
ということ
64 :
デフォルトの名無しさん :2015/01/01(木) 22:06:23.87 ID:MUP8EK3k
コンソールアプリケーションを他のアプリのデバッグ用に起動したいのですが、 方法がわかりません。 こんなのをイメージしているんですが。 var console = new DebugConsole(new MyScript()); 本体のアプリを実行しながら、コンソールを起動して、 コンソールからの入力をMyScriptに渡して、 本体のアプリとやり取りした結果をコンソールに返したいのです。
Process.StandardOutputとかそのあたり
他のコンソールアプリ(MyScript?)と本体アプリの間でやりとりをしたいってこと?
>>65 の言うように標準入出力使うのが筋だけど結構面倒でまどろっこしいよ
やりとりの内容によるが、複雑な制御が必要ならIPC使ったほうがいいかも
67 :
デフォルトの名無しさん :2015/01/01(木) 22:27:48.27 ID:MUP8EK3k
Process.StandardOutputですが、ちょっと調べてみます。 例えば、コンソールで get "test" とかやると 本体アプリのdictionaryインスタンスからtestを取得して返すみたいなことをしたいんです。
デバッガ使わないのは本体を止めたくないからだよな? なら標準入出力使うよりIPCの方がいいよ 標準入出力だと本体側で入力待ちのための専用スレッドが必要になったりするし 全部文字列でやりとりしなきゃいけないからコマンドの解析などは全部本体側で実装することになってしまう 自分でスレッド立てるのも本体にデバッグ用の処理を全部書くのも嫌でないなら、 コンソールアプリ使うのはやめてAllocConsoleで本体側から直接コンソールを表示することもできる これならプロセス間のやりとりはいらない
69 :
デフォルトの名無しさん :2015/01/01(木) 23:41:37.70 ID:MUP8EK3k
はい、本体は止めたくないです。 本体プログラムの内部でluaインタプリタが動いていて、 デバッグのコンソールからもそのインタプリタに入力を送れるようにしたいです。 IPCについても調べてみます!
>>63 別に設定だけでもC#で書けばインテリセンスの加護は受けられるし可読性も高くできる
外部に書き出すメリットはないよ
処理と設定を一緒にする場合もクラスと属性なんて言う冗長性の高いものじゃなくて
enumとラムダ式にした方がずっと可読性が高く書きやすく出来る
スクリプティングの段階に入ってもC#から離れなければメリットは大きいよ
設定を外部に書き出すメリットはないって、世の中の99.99%のアプリを敵に回したな
設定ファイルにしたって型安全で表現力が高く文法的に一貫している方がメリットは大きいやろ 静的言語をスクリプティングに適用するノウハウが浸透していないだけだと思う まあユーザーがいじることを想定した設定なら外部に書き出すこともあるだろうけど そんなこと出来ても喜ぶのは変態だけで普通はOption画面からGUIで設定するわけだしな
設定を外部に持たずにどうやって保持するんだろ?
スクリプトもC#で記述はありだな
元の質問からすると 63 で正しいと思うけど、遷移表って一か所で読みたくならない? 外だしにしといて悪くはないと思うよ。GUI 自動で作るとか
>>63 を実装するなら遷移表も自動生成すればいいじゃん
どうせリフレクションで情報収集するんだからついでに簡単にできるでしょ
遷移表は作る前提でみんな話してると思うけど?
遷移表は自動生成することにして、遷移表を編集する=
>>63 の属性を編集する
ということにすればいいだろう
表作るんなら
>>63 みたいなスタイルはミスを生みやすくなるだけだから外部ファイルでいいと思う
DRYだよ
79 :
78 :2015/01/02(金) 13:06:53.32 ID:UoXQYS7H
訂正 表作るんなら→手作業で表作るんなら
状態管理は外に出せるけど、対応処理の管理は簡単に出来るの? 今、VS Express2013のC#で作っているけど イベント登録の"+="の使い方が解らなくて、一つのクラスで作っている。 "using"の使い方次第なのかな?
自動生成ったってまずどこかに手で書かなきゃいけないんだから
可読性を上げるためにはひと目で見て把握できる範囲を広げるために冗長性を下げる必要があり
また冗長性が低くないと書いてて嫌になってしまうという問題もある
書いて読んで修正するっていう作業をスムーズにしてスクリプティングの効率を上げるには
属性やなんかで冗長に書いてからプログラムで表を自動生成するのではダメだよ
読んで即編集できるように冗長性の低いフォーマットで記述されている必要がある
C#ならインテリセンスの加護を受けて安全で速く書ける
>>73 編集可能にするにしてもデフォルト設定はどこかにガリガリ書かなきゃいけないわけで
人間が手で書ける形式の設定ファイルを外出ししてそれでデフォルト設定も書くか
デフォルト設定をC#で書いてGUIで編集することにして
人間が読み書きすることを想定しないファイルフォーマットで保存するかといった程度の違いの話だな
まだやってる 馬鹿か
struct(構造体)を作ってnewでインスタンス化するとエラーが出た ↓ コンストラクタを書くとコンパイルが通った これって構造体にはデフォルトのコンストラクタがないという事ですか? クラスと違って必ずコンストラクタ書かないと駄目なんですか?
publicなデフォルトコンストラクタはむしろ強制的に作られる 具体的にどう書いたらエラーになったの?
public struct CoOrds { public int x, y; // フィールド } public class Player_2D : MonoBehaviour { CoOrds coOrds = new CoOrds(); coOrds.x = 10; } ↑★エラー public struct CoOrds { public int x, y; } public CoOrds(int p1, int p2) { x = p1; y = p2; } } public class Player_2D : MonoBehaviour { CoOrds coOrds = new CoOrds(100,50); } ↑★通った こんな感じです
coOrds.y = 10; ↑こうやってyのほうも初期化してやれば大丈夫。
ありがとうございます。 クラスと違って必ず全フィールド初期化する必要があるんですね
そうそれ。もはや定番のトラップともいえる。
自動実装プロパティーを構造体のコンストラクターで初期化する時も 明示的にデフォルトコンストラクタを呼ぶ必要があるけど、書くたびにこんなの自動でやってくれよと思う。
構造体のプロパティに初期値つけたいとき get setで細工するのって悪手なんだろうか public struct Hoge { private int _number; public int Number { get { return _number + 10; } set { _number = value - 10; } } }
Blittableな構造体はポインタ取ったりマーシャリングなしでアンマネージコードとやりとりしたりできるから 見た目と中身が一致してないとトラブルの元になる可能性がある クラスの方が無難
>>85 これってunityのみの話?
デフォルトコンストラクタのインスタンス作成で、int型は0に初期化されるよね?
そもそもエラーって書いてある方は文法的におかしいので意味不明だった
諦めてファクトリメソッド使えば済む話なのに
俺の記憶では structの全てのフィールドを埋めないといけないのは structの自前定義コンストラクタの中とかout変数の中とかだけじゃなかったか
ローカル変数でnewなしで使う場合とかも
100 :
デフォルトの名無しさん :2015/01/04(日) 17:21:16.29 ID:BwoXMWJD
Process特定するときにPidやProcessNameやウィンドウタイトル以外を使って特定する方法ってありますか?
ウィンドウがある前提なら位置とか
クラス名、スタイルとか
>>90 年明け一発目に笑ったのがこれ
会社いきたくねーなー
仕事でこんなコード見たら切れるが、個人なら多少はね
そんなに変かなとおもうけどね。
例えば、Windows FormのSizeとClientSizeなんか
>>90 と似たような実装だろう。
会社!今日一度たりとも口にせず、目にも入れなかったのに!この単語!
>>105 初期値が基点として何らかの意味を持っているなら分かる。即値は勘弁して欲しいが。
上記のような意味が無く初期値を与えるためだけの実装ならあり得ない。誤解を招くだけ。
外から設定された値をそのままで覚えておかないと後からその値使おうとした時にスパゲッティになるよね
Control.AutoScrollPositionの話はやめるんだ
>>108 確かに初期値を与える目的ならありえんね。
>>90 がそう書いてるのを読み飛ばしてたよw
Entity Framework 6.0についてる?のか 最新のEntity Data Model DesignerをVisualStudio2010のExpressで使うことは可能でしょうか? ライブラリはとって来て動いてるけど、デザイナーは古いままのようで、 どこで入手するのかすら分かりません 方法知ってる人がいたら教えてください
MSがいちいち古いVSにバックポートするとも思えないし、ましてやExpress
リストに入れたクラスインスタンスのフィールドにアクセスするにはどう書けばいいですか? @class Hoge(){ public int x = 10; } というクラスを作る ↓ A Hoge hogeinst = new Hoge();でHogeのインスタンス取得 ↓ B ArrayList testlist = new ArrayList();を作り、testlist[0]にhogeinstを入れる ↓ Cclass Hoge2内で Hoge thisClass = testlist[0]; とする この時testlist[0]にはクラスHogeが入っているので、そのフィールドのxに アクセスしたいんですが(できますよね?) int y; y = thisClass.x; とかしても、リスト要素にxなんてものはありませんと言われます。 なぜですか? デバッガ上でthisClassの中を見るとちゃんと実体が入っていて、xの値も見れます。
ArrayList使うの止めてList<Hoge>使いなさい あなたが参考にしている文献は古いので新しいのを探しなさい
MSDNのリファレンスもそうだけど 参照するクラス名がハイパーリンクになっていないのに クラスの名前空間が書かれていないとイラっとする
>>114 継承について勉強すべし
ArrayListはHogeの基底クラスであるObject型で格納するので、
thisClass = testlist[0]; のthisClassはObject型。
Object型に x というメンバーは存在しないので当然アクセス不可。
ただ実体としてはあくまでもHogeクラスなので、デバッガでは見れるようになっている。
なので、Hogeクラスにキャストすれば良い
Hoge thisClass = (Hoge)testlist[0]
とはいえ、ArrayListはジェネリック対応までの古いクラスなので、
>>115 氏と全く同意見。
>>117 ありがとうございます。
すみません、気をつけます・・・。
>>118 ありがとうございます。
Listに直し、キャストも試してみます
追加ですみません、入れる型が不明な時、もしくは複数の型を 一つのリストに入れたい時はList<T>は使えないですよね?
そんな構造が必要ってケースは99.9%ぐらい設計がまずいので そんな構造が不要になるように考える
>>112 VS2010でDbContext使いたい場合はEF5にしとけ
>>120 型が不明ってどんな場合?コードを書く時点で何を格納するか決まってるはず。
複数の型も怪しいけど。
基本的には同じ型、もしくは同じ基底クラスから継承したクラスを格納する。
List<基底クラス>
List<object>
基底すぎぃ
>>121 なるほど・・・今日もう一度考えてみます
>>123 Randam.rangeによって入れるクラスがランダムに変わるんです
なのですが、どうもListに入れる型が入れるまで不明というのは
設計的にまずいようですので、一つのクラス内に複数のメソッドを作って
そのメソッドをlistに入れるという方向でやってみようと思います
>Randam.rangeによって入れるクラスがランダムに変わるんです 斬新すぎるw
恥ずかしい・・・ PGの友人にまずはメソッドで出来ないか考え、どうしても無理ならクラスでやれ と言われたのを今思い出しました メソッドで可能か考えずにいきなりクラスでやる設計にしたのが悪かったようです 普通にメソッドで可能だと思うので、メソッドでやります ArrayListにしたのはListと違って型指定が不要で色んなクラスを入れられたので ArrayListを使いました こちらも言われた通りListに修正しようと思います
どんな物をつくろうとしてるのかさっぱりわかんないけど一から書籍で学習した方がいいよ
本当にArrayListが必要だったら
>>124 が代替になるけどさ…
>入れるクラスがランダムに変わる
ってどういう用途で必要?
本当に必要だったらabstract classかinterfaceで縛った方がいい
初心者が詰まるのはそもそも選んだ道が間違ってる場合が多いので、 無理な道をどう進めばいいかに拘ってはいけない publicフィールドとメソッドだけでも十分何でも作れるよ
>>130 トランプやカード(のような種類のあるもの)をランダムでデッキに積む処理です
それぞれのカードの種類をクラスで作りました
お前はポーカー作るのに52クラス作るつもりか
同じListに突っ込んで処理するって事はそれらに何かしら共通点があるはず その共通点を基底クラスにして派生クラス作ればいいだけさ List<基底クラス>で用意すれば派生クラスをいくら入れてもなんとかなる どこまで基底クラスに機能を持たせるかは経験を積んで判断してくれ
for(int i = 0; i < array.Length; ++i) { var rand = random.Next(array.Length); Swap(array, i, rand); } 俺はこれだなあ 正しいかは知らん
俺は使用頻度の高い順に 標準ライブラリにあるやつ FisherYates 俺俺アルゴ C#じゃない場合も含めて
標準ライブラリにシャッフル関数持ってる奴は だいたいFisherYatesで実装されてると思う
>>132 処理でカードの種類を区別したいだけなら整数値でいいよ
トランプなら百の位でマークを、十と一の位で数字を表すとかで十分すぎる
カードクラスなんかいらない
意味をはっきりさせるために構造体ぐらいは使った方が良いし、値じゃなくて参照の方が適当な処理もあると思うが
ソーシャルゲームのカードみたいにカード自体がいろんな性質を持つならそうだね トランプなら手札クラスや場札クラスまででいいと思うよ カード型があってもアルゴリズム記述の邪魔になるだけ
142 :
141 :2015/01/05(月) 21:13:21.66 ID:X/XHMwki
あとはトランプの中でも特定のゲームを前提にするなら カード型がメソッドやプロパティを持ってる方が便利な場面はあるだろうな ページワンで「約札かどうか」とか、ルール上、各カード自体が特別な性質を持ってると見なせる場合
143 :
デフォルトの名無しさん :2015/01/05(月) 23:46:57.60 ID:i4FQe74T
自分で何入ってるのか分かってるんなら別にarraylistでいいじゃん。 継承関係あろうがなかろうが、ゲームで使うオブジェクトを片っ端からぶちこめ。 取り出すときに、System.Linq.Enumerable.OfType<Hoget>(arraylist)とかで取り出せばいい。
>>143 そうするメリットが皆無なのにする意味がない。
145 :
デフォルトの名無しさん :2015/01/06(火) 00:20:25.34 ID:yfzj11GY
型指定しちゃったら型にはまらない型入れられないじゃん
ArrayListやList<object>だと、
カードクラスを追加したら、他の部分もそれに合わせて変更が必要になるじゃん?
カードクラスを追加しても、他の部分を変更せずに済むようにするのが良い設計だよ
その方法が
>>134
外人のプログラマがcharをキャレットと発音していました なぜですか?
アニモー モータポー ミッソッ ポテイトゥ
>>148 charはキャラって読みそうだけど、
通はシャアって読むよね!
マークがenum 数字がintのクラス一つあれば十分
152 :
デフォルトの名無しさん :2015/01/06(火) 01:03:06.40 ID:yfzj11GY
<<147 ならないよ。 list.OfType<Interface>で取り出せばいいよ。
>>152 それなら、List<Interface>で良いんじゃ。
>>135 これ結構早い段階というか最初から?偏りがあるんじゃないかって疑ってたみたいだけど、そういうのってなんとなく?感覚的に?あるいは論理的に?分かるもんなの?
なんにしても、なんとなく適当にやると簡単に偏りとか出てしまうんだな。
経験的に、だと思う
・Randomは重複する
・OrderByは安定ソートである
この2点さえ知ってれば明らかでしょ
安定ソートでないアルゴリズムでも重複キーの順序は大抵何らかの単純な法則に従うから偏るだろうね
>>136 はNext(i, array.Length)に変えたら一様になるよ
インプレースだから分かりらさ
すまんミス インプレースだから分かりにくいけど、直感的には袋に入れた玉を無作為に取り出して並べるのと等価
rnd.NextDouble使ってれば重複は無視できるレベルになると思うけどね
理解して無視してるならいいよ 理解せずに無視してるとなるとそれは
>>158 等価に思えんけど。
それではインデックスが若い物ほどSwapされる頻度の平均値が上がってしまう。
昨日とりあえずFisherYates使えって言ったじゃん
>>157 >Next(i, array.Length)に変えたら一様になるよ
全く意味不明だな
元がどう一様ではないのか説明してみろよ
あ、元が一様かそうでないかは自分にはわからん
だから初期状態で若いインデックスの物ほどswapされる頻度が高くなるんだから
>>158 の説明は間違い
スワップと考えるから間違える。
やってることはスワップなんだが、論理的には袋の中から一つずつランダムに取り出すのと同じになるんだよ、
>>158 のやり方で。
よく考えれば分かる。
最初のやり方は一様にならない。
>>166 どういうこと?157のように変えたらarray[0]は初回のみしかswapされないと思うんだが
そもそもランダムならばスワップが1回でも2回でもランダムな値であることには変わりないはずだからそこは問題じゃないだろう 元が一様ならばNext(i, array.Length)にするのは無駄な処理が増えるしシンプルさを損なうから無粋だろう
違う、
>>157 のやり方だった。
スワップする事で、袋から選んだボールを並べた上で、選ばなかったボールを袋に返してることになるんだよ。
ちょっとわかりにくいけどよく考えてみれば分かるはず。
>>168 スワップじゃなくて、袋から一つずつ取り出してるんだ。
一回取り出した奴を含めて選びなおしてたらおかしくなるだろ?
>>170 ボールを袋に返すっていうのがまず意味不明だし
袋に返すとどう一様じゃなくなるのかも分からんな
>>170 だから、初期状態の位置によって何度も袋に戻される玉とそうでない玉が出るんだから全然等価じゃありません。
例えばarray.Length == 5の時、初期状態でarray[0]に入ってる値は Swap(0, 1)→Swap(1, 2)→Swap(2, 3)→Swap(3, 4) と最大4回swapされる可能性があるが、初期状態でarray[4]に入ってる値は 最大でも1回だけ。
現実のボールをランダムに並べるには袋から取り出していく事が必要になるが 現実のボールを袋から取り出してるわけではないからそのメタファーに従う必要はない 別にボールを取り出すようにやらないと配列が一様なランダム性を得られないわけではないし さらにいえばボールを袋に返してはいけないのは並べ終わらなくなるからであって一様性とは関係ないはずだ
>>136 のやり方がなぜだめか。
例えばボール3つの場合、ボールの並び方は
123 132 213 231 312 321
の6パターンになる。
一方、スワップの組み合わせ数は3×3×3で27パターン。
つまり6パターンで割り切れない。
ということは、どういうことになるかというと、パターン数に偏りがあるって事になる。
分かる?
>>175 違うよ。
プログラムの動作をメタファーで表現してるのではなくて、元々の袋から一つずつ取り出して並べる操作を、プログラムでシンプルに実装するとこうなるんだ。
論理的に等価なんだよ。
言ってて無理があると思わないんだ...
>>176 一方で、
>>157 のやり方だと、スワップの組み合わせ数は
3×2×1で6パターン
つまりボールの並び順のパターン数と同じになる。
袋から一つずつ取り出して並べるのと等価になるようにプログラムしてるんだから当然だけど。
>>176 まずスワップの組み合わせ数とボールの並べ方の数に何の関係があるんだよ
関係無いものを並べてみただけのただの詭弁だ
ランダム性が一様であるかどうかは「配列のすべてのインデックスで、
全ての項目から均等な確率で一つが選ばれて割り当てられているかどうか」で決まる
だから
>>136 は全く正しいアルゴリズムである
最初の配列は全部袋の中のイメージな。 まず一回目のループで3つのうちどれか選ぶよな。 それが一つ目のボールだ。 配列の1つめと、選んだボールをスワップする。 配列の1つは選んだボールになり、2つ目と3つ目は袋に残ったボールになる。 2回目のループで配列の2つ目と3つ目どちらかを選ぶ。 つまり、袋に残った2つのどちらかを選ぶ。 配列の2つ目と入れ替える。 配列の2つめは、袋から2回目に選んだボールとなり、配列の3つ目には選ばれなかったボールが残る。 こういう事だよ。
>>180 さすがに
確率を勉強し直せとしか言えん。
スワップのパターン数=出来上がる配列の最終的なパターンの総数だろうが。
その総数が、並び方のパターン数の倍数にならないなら、並び方によって出現するパターン数が替わってしまう=一様になってない。
何で分からん?
あ、ご高説終わりましたか?
>>136 を10000回やってみると確かに偏った(初期位置が後ろのものほど前に来にくい)
>>157 だと偏ってないように見えた
ちょっと確率の計算を勉強しなおしてくる
約一名様は中学校からやり直しね
え、一人だけ
結局
>>164 の認識で合ってるという理解になったんだが
合ってるよね?
a[i]とa[j](i≦j≦n, where n = a.Length - 1)を交換する行為は、確かに
a[i]からa[n]までの部分配列を袋とみなして玉を取り出した後、袋とみなす部分配列の始点を
インクリメントするのと同じだから、やっぱり
>>157-158 が正しいなw
すまんかった。
こういう時にideone使えよ 俺はやらないけどな
アルゴリズム的に一様になるとしても、そもそもの乱数に偏りがあったら何にもならんのだが 実際どの程度偏ってるんだろ
193 :
デフォルトの名無しさん :2015/01/06(火) 18:17:27.51 ID:fNWhMhIP
>>192 CのデフォRand()がアレなのは常識だけど、C#デフォのはどうなの?
メルセンヌ・ツイスタとかなら文句はないんだが
クヌースの減算法じゃなかったか
>>182 >スワップのパターン数=出来上がる配列の最終的なパターンの総数
何言ってんだ一体
たとえば同じ箇所を二回スワップすれば同じパターンに戻るんだからスワップの総数は最終的なパターンの総数になんかなるわけないだろう
たしかに俺が間違っていたことは間違いないが
これが詭弁なことにも違いはない
>>191 の結果を見ると
結局最初に0番にスワップされた奴はもう戻って来られない可能性が高いが
0は自由な位置に移動した後もう一度必ず移動するチャンスがあるので
その分移動しやすいってことか
なので自分の数字より若い位置に移動したらもう移動しない可能性が高いので
自分の数字より前の濃度が高くなるのか
>>198 だから確率を勉強しし直すといいよ。
同様に確からしい起こりうる事象のすべての組み合わせのうち、
ある事象が起こる回数の割合が、その事象の起こる確率だ。
同様に確からしい、起こり得るすべての事象の総数がここでは27パターンなわけ。
この27パターンは同じ確率で発生するわけ。
並び方のパターンは6で、総事象が27ってことは、確実に多い並びと少ない並びがあるわけ。
27パターンは同じ確率で発生するんだから、少ない並びのパターンが発生する確率は少なくなるわけ。
確率を分かってたら総パターンの意味なんてすぐ分かるけど、ちゃんと理解してないからピンと来ないんだな。
>>198 詭弁でもなんでもなくて、確率の話ではふつうの言い方だよ。
理解できないおまえがアホなだけ。
結局お前の言ってたこと全部間違ってるじゃんw
そろそろ面会時間終わりですよー
>>200 現象を理解してないから詭弁を使うわけ
俺は現象を理解したから無意味な詭弁で妙な説明をする必要はなくなったの
そしてお前は煽ってるだけで最初からなんにも理解できてないわけ
確率の上っ面を舐めて変な解説に屋上屋を重ねただけ 現象には全く届いていない
そんなハッスルしなくても あと5時間もあるのよ?
言葉ではなく心で現象を理解できたとかそんなん
もう少しだけ正確な言葉でいうなら、
>>136 は、根元事象が27で、表に出てくる、結果の並び順は6事象。
27の根元事象は、結果としてこの6事象はのいずれかに対応している。
偏りがないためには、結果の6事象が同じ確率で発生しなければならない。
しかし、根元事象が27なので、結果の6事象は均等に発生せず、6事象の発生確率は確実に異なる。
だから
>>136 は絶対に偏りが発生する。
それだけの話で、確率としては当たり前の話。
理解できない奴がアホ。
確率の上っ面も何も、確率の入門レベル、超基礎レベルで分かる話だ。
2chでよかったな これがidentifyのあるコミュニティだったらユーザー封印レベルだった
3以上の整数nについてn^nがn!で割り切れないことって一般に証明できるの?
板違い 単純に大小比較で終わりそうな気もするがw
>>210 階乗って事は、n以下の前自然数が因数として含まれてるわけだ。
割り切れる訳ないよね?
>>210 証明できる。
準備:隣合う二つの整数は互いに素
証明:a, b, が d で割り切れるなら、差 a - b も d で割り切れる。(∵a = q1・d, b = q2・d とおくと a - b = d(q1 - q2))
a - b = 1 ならば、a, b, ともに割ることのできる 1より大きい整数は存在しない、もしあったら、a - b = 1 をわることができることになり矛盾。
>>210 の証明
素因数分解は一通りであることを仮定する(これは実はあたりまえじゃない)
n を素因数分解すると p1〜p(n) の m 種類の素数で構成されていたとする。このとき、 n^n も m 種類の素数で構成される。
ここで n >= p1・p2・...・p(n) 、そして、p1・p2・... p(n) とp1・p2・... p(n) - 1 は互いに素
すなわち n! を素因数分解すると p1, p2, ... p(n) のどれとも異なる素数を持つ
ゆえに、n^n は n! で割り切れない Q.E.D
>>213 n >= p1・p2・...・p(n)
じゃなくて、
n = p1・p2・...・p(m)
じゃないの?
ここって高校数学のスレだっけ
何ひとつ現象を説明できないピントのズレた話を繰り返して分かったような気分に浸るだけならともかく C#もプログラムも一切関わりのないことをプログラム板のC#スレにズルズル書き込んでるんじゃない
>>216 自分も見直したけど、あなたも確率の考え方は見直しといた方が良いよ
たぶん何か勘違いしてる
まあ就職したら玉と袋の話程度も理解できない文系SEの奴隷として 搾取されるんですけどね
これで就職できるの?迷惑防止条例違反だわ
玉と袋が有って棒はないの?
完全におっさんの発想
すみません、この流れを作った
>>132 です。
一応、報告と、また低レベルな質問をしに来たのですが
今はやめた方がいい感じでしょうか?
>>224 ロジックを説明されても理解できないなら、せっかく
>>209 でコード書いて
実証したんだからそれ見て納得してよ。
>>225 別にいいよ。
荒れたって死人がでるわけじゃない。
多少スレッドの見通しが悪くなるだけだ。
また私のせいで荒れてしまったらすぐ引き上げます。すみません。 まず、 ・カード・タイプごとにクラスを切るのをやめた ・カード種類の判別は普通のintの数字のみにした ・int型のリストにランダムでカード種類を表す整数リテラルを入れ、それをシャッフルする これでやりました 結果から言うと、やりたかった事は出来ました また、シャッフル(ランダムにする)する処理は昨日一日調べたのですが FisherYatesを最初使っていたのですが、もっと簡単にできるのがあるという記事を見つけて FisherYatesをやめ、以下のように書きました。 private static void Fisher(int[] c) { int[] cardlist = c; //引数の配列を格納 // 1回じゃ偏りが生じるっぽいので念のため何度かシャッフルを繰り返す for (int cnt = 0; cnt < 10; cnt++) { DeckList.cardlist = cardlist.OrderBy(i => Guid.NewGuid()).ToArray(); } } 正直、このグイッドについてはあまり理解してないのですが、要するにOrderByというソートメソッドと 乱数を発生させるグイッドメソッドを組み合わせてランダムにインデックスの値をソートさせると認識しています まず1点目にお聞きしたいのは、上記の処理は何か問題点を含んでいないでしょうか?という事です ちなみに偏りについてですが、あまり起きないに越したことはないと思いますが、そこまで是が非でも 偏りを解消したいというわけでもないので、程々乱れてくれればいいという観点です。
トランプとか麻雀とかで使うシャッフルなら
>>136 で何の問題もない
偏るって、どれだけ偏るんだよ
使い物にならないくらい偏るわけないだろ
シャッフル厨は死ねよ
すみません、少し訂正です ・カード・タイプごとにクラスを切るのをやめた ・カード種類の判別は普通のintの数字のみにした ・カード種類をintで判定するようにしたので、ArrayListをやめてint配列にした(public static int[] cardlist = {・・・}) ・int型のリストにランダムでカード種類を表す整数リテラルを入れ、それをシャッフルする
何度もすみません ・int型の配列にランダムでカード種類を表す整数リテラルを入れ、それをシャッフルする でした
Guid(じーゆーあいでぃー)ソートが許されるのはT-SQLまで
ぐいっどそーと
ま、いいんじゃね? 最初の、入門書も読んでるか怪しい、ど素人にもほどがある質問に比べて、 別人かのようなレベルだし。 コードも自分が納得する動きになっているんであればそれで十分かと。
シャッフルするなら初期状態をランダムにする必要ないんじゃないの?
>>229 シャッフルは FisherYatesが正解だよ。
GUIDでソートは簡単に書くのが目的であって、
わざわざ偏るからループまでするくらいなら FisherYatesでいい。
>>237 GUIDは別に質のいいランダムじゃないしね。
>>216 どう見ても自分に言ってる。
自分に言ってるなら違和感ない。
偏ってることを承知の上で使うならよいが
>>224 みたいな人がゲームを作るとカルドセプトのようになる
>>191 ,209でせっかく実際に偏りを見せてくれてるのに
>>239 偏ってるって言ったところで
なぜそれが偏るのか説明できなきゃ理解したことにはならないんだよ
逆に言えばなぜそれが偏るのか理解できないから
トンチンカンな説明をしだすってこと
おっと再びブーメランか
もう一つ質問があったのですが、また日を改めます 質問するレベルじゃない気もしますし あとシャッフルはGuidやめてFisherYatesにします ありがとうございました。
「可能な手の総数が組み合わせの数の倍数にならない」という理論で なぜ自分より若いインデックスの濃度が高まるのか説明できるか考えてみるといい いかに頓珍漢な説明をしているか分かるだろう
>>244 トンチンカンは消えろって言ってんだよ
自覚ねえのか昨日の地球で人類最低ランキング一位のカス
>>244 やっぱり勝手に勘違いしてるんだな。
一様でないのはこういう理由で明らかと言ってるだけで、どう偏るかについては何も言ってないのに。
こういう理由で一様でないのは明らか。
→こういう風に偏る説明になってない、トンチンカンだ。
アホか。
>>246 しかも実例で偏るの見た後でしか偏るわけがないって言い張ってたくせにw
>>248 198 デフォルトの名無しさん sage 2015/01/06(火) 18:32:22.80 ID:nsrYhV9A
>>191 の結果を見ると
結局最初に0番にスワップされた奴はもう戻って来られない可能性が高いが
0は自由な位置に移動した後もう一度必ず移動するチャンスがあるので
その分移動しやすいってことか
なので自分の数字より若い位置に移動したらもう移動しない可能性が高いので
自分の数字より前の濃度が高くなるのか
これか。
ワロタ。
じゃあ何で可能性が低いどころか絶対に戻ってこれない
>>157 で偏らないんだよ。
ゲームでユニット表やアイテム表を作るのにTupleがたくさんあります Tuple<string, string> Tuple<string, string, sring> Tuple<string, string, sring, sring> これを1つのTableクラスが複数の種類のTupleを扱うためには どういう形で持てばいいのでしょうか Tupleの共通する基底クラスがあればいいのですが・・・あるいはインターフェース
>>250 いまひとつどういう事をしたいのか分からない…
sringってのはstringの間違い?
>>251 要素の数が異なるTupleをまとめて1つの変数で表す方法
ないんだよねー
ようは ITuple があればいいんだけど(内部使用の同名のインターフェースはあるっぽいがちょっと違う)
ブーメランすぎてわざとやってんじゃないかって気がしてきた。
そもそも本当に単純に自分より若いインデックスの濃度が高くなってんのか?
>>209 みるとどうもそういう簡単な話には見えないんだが。
>>250 ,253
全部stringなんだったらArrayとかListとかの別のコレクションに変えたらいいのでは
なぜTupleにしたいの
>>249 自分より前のインデックスに移動する場合、
移動なしだった場合にN+1手目に来る自分が移動するチャンスが消えてしまう
N+1手目でN番目にある数字は自由な位置にランダムに移動できるので
それを経験すれば初期並び順の影響は消える
経験できない場合は初期並び順の影響がガッチリ残ってしまう
それはたとえば最初の1手で5番が0番に移動するケースではそこから9回再移動のチャンスが有る
でも2手目で5番が1番に移動したらあと8回しかチャンスがない
だから0番より1番の方が濃度が大きくなる
同じように9手目で何かの数字が8番に移動すると10手目でもう1回移動のチャンスがあるけど
10手目で9番に移動したらもう移動のチャンスはないので10番目の方が濃度が高い
9手目ともなると8番目に8が入ってる可能性が低くなるので初期と比べると影響は少なくなる
つまり一度でもN+1手目のランダムジャンプによるリセットが入れば初期並び順の影響は消えるので
>>191 では検出できなくなるわけだけど
再移動チャンスを繰り返していけばリセットから時を経るごとに大きいインデックスの方の濃度が高まっていく
自分より大きいインデックスに移動した場合はもう一度再帰的に「N+1手目にN番目のリセットを経験できるか」の
サイコロを振ることになるわけだけどこの影響もまた
>>191 では検出できない
あと「場合の数が並び順の倍数にならない」影響も検出はできないけど理論上存在してるはずだな
再移動なしなら再移動チャンス自体が存在しないので並び順の影響は発生しないわけだな
再移動チャンスの説明がインチキ臭いな 若い番号に移動した後の再移動チャンスは常に大きなインデックスに引き上げられるチャンスなので 大きなインデックスに移動する可能性が高くなり、若いインデックスのものはそこに留まる可能性が低くなるってことだな
そろそろアルゴリズムのスレ探すか立てるかしてそこでやってくれ
表にしてみて気付いたが157はFisher-yatesより1回ループが多いんだね でもその1回はやってもやらなくても確率は均一のままなのか
よく考えたら当たり前だった 最後の1回は入れ替えが起こらない
>>261 いやそんなのは頭のなかに出来てるけど
それを見ると何か新しいことが分かるのか?
頭の中wなら最初から頓珍漢なこと言わずに作っといてよw
世界最低と世界ブービーが実現して欲しくなかった史上最悪のコラボトークを行ってます
つっこみどころが多すぎてもう何も言う気にならない。
>>191 では検出できない云々を言い始めた辺りから言ってることが無茶苦茶になってる。
どうムチャクチャなのか言ってみ
場合の数が並び順の倍数にならない影響も理論的にはあるはずだが検出できないとか、そもそも根本的に意味分かってないじゃん‥
リセットされるから検出できないってどういう意味だよ。 検出できないってどういう意味で書いてんの?
>>270 まあ昨日からアホなことばっか書きながら、言い繕いばかりやって、書けば書くほど余計にアホとしか思われんぜ。
昨日の時点で根本的に頭悪すぎることはもう見えてしまってるから。
>>271 ,272
一旦ランダムな位置に移動したら濃度が全インデックスで均一になるからどうスワップしようと偏らないので検出できない
これをリセットと表現している
並び順の倍数のやつは統計的に検出できるほどの量にならないってこと
>>274 そもそもそのリセットされた場合もされなかった場合も
その後のどんな動きもひっくるめて繰り返し試行した
統計的な結果が
>>191 なんだからリセットされた場合は
検出できないなんて表現自体がとっても変なんだが、
まあそこはおいとく。
後半がぶっ飛びすぎててもはやどうでも良いレベル。
根元事象の数が結果の並び順の倍数になってないことを、
いくつかある偏る原因の一つだとでも思ってるのか…
ほかの理由による偏りは統計的に見えているが、
倍数になってないことによる偏りは統計的に影響が
少なくて見えていないってか?
ユニークな考え方だなおい。
>>274 そもそもそのリセットされた場合もされなかった場合も
その後のどんな動きもひっくるめて繰り返し試行した
統計的な結果が
>>191 なんだからリセットされた場合は
検出できないなんて表現自体がとっても変なんだが、
まあそこはおいとく。
後半がぶっ飛びすぎててもはやどうでも良いレベル。
根元事象の数が結果の並び順の倍数になってないことを、
いくつかある偏る原因の一つだとでも思ってるのか…
ほかの理由による偏りは統計的に見えているが、
倍数になってないことによる偏りは統計的に影響が
少なくて見えていないってか?
ユニークな考え方だなおい。
二回書き込んだのはミス。
根元事象ってのは、ありとあらゆる動きをすべて含んだ全結果だぜ。
お前がいろいろ説明したいろんな理由によって起こる偏りも
全て含んだ結果の集まりが根元事象だぜ。
根元事象をすべて並べてみればどういう偏りになるか見えるといっても良いかな。
倍数になってないのは偏る原因じゃないんだよ、むしろいろんな原因によって偏った結果を意味してるんだよ。
もし統計的に検出できるほどの量にならないとしたら、
それはつまり
>>191 は全く偏ってない結果になるってことだよ。
もうあんまり笑わすな。
今は知らないけど俺の時代は理系でも確率統計って(実は思いっきり有用なのに) 軽視されてたな。 大学ではまったく教わってないし、そもそも入試に出ないところが圧倒的に多かった記憶がある。 高専出身者に聞いたら高専では全く習わないって言ってた。
>>277 倍数になってないことによる影響は10の10乗回試行した時に1差がつくっていうものだ
これを統計的に検出するテストが作れるか作れないかは知らんが
少なくとも俺のPCでは現実時間では実行できない
>>279 倍数になってないのは原因じゃなくて結果だ。
倍数になってないことだけから分かる確実に発生する偏りの最小量ならそうなるとしても、影響って言わないんだよそんなのは。
そもそも分かってたらそんな言い方しない言い方をしてる時点で、ああ分かってないんだなというそれだけの話。
そもそも倍数でないことから分かるのは、少なくとも偏ってるということだけであって、
どの程度偏ってるとか偏ってないとかは何も想定できない。
倍数でないという条件から確実である最低限の偏りだった場合にその影響は見えないと勝手に言ってるだけで、
そんな条件はきちんと言わなきゃ無意味だし、実際もっと偏ってるわけだ。
そんな細かいレベルの話じゃない、これまでの数々の言動で、何も分かってないアホとしか考えられんと言ってるだけのこと。
倍数になってないというのは単なる結果の見方、表現の一つ。 統計的な頻度の表も、結果の見方、表現の一つ。 後で出てきた最終的な確率の数値表も結果の見方、表現の一つ。 どれも結果の表現、見方の一つであって、どれかが原因でどうなるという因果関係ではなく、単なる別の側面での見方。
書き込めてないな
これ279の直後に書いたやつなんで280とかには答えてないけどごめんね
違うか
そもそも論から言えば
Fisher Yatesが決まって完全ランダムな数列が作れたとすれば
012になる場合の数も021になる場合の数も同じだ
だから次に1と2を入れ替えるスワップを行ったとしても偏りは発生しない
スワップは複雑な操作だから倍数になっていないから偏るというものではない
だがFisher Yatesのようなものが決まっておらず元の影響が残っているなら
>>209 で示されているような影響が残る
元の影響が完全に残っている場合は10の10乗回で1の差になるけども
元の影響があまり残らないようにスワップしているわけだからこの影響がどの程度になるのかは見積もることすら俺には出来ないな
お前の見解なんて聞いてねえんだよ これ以上書き込むと殺す
言い合いしてる人ら、いい加減スレ移ってくれませんかね
お前らが頼みにしていた「場合の数が倍数になってないから偏る」っていうのが誤りなのを示したら発狂か まあ悪くないな
>>282 また分かってない。
スワップ回数と場合の数は違う。
スワップ回数は
>>136 も
>>157 も同じだろうが(最後の分は違うとも言えるが)。
シャッフル終わった後に固定場所の二つを入れ替えても、場合の数は変わらない。
ランダム選んで入れ替えたら変わる。
当たり前の話。
>>285 もういい加減にしろよ。
最初から、倍数になってないから一様でない(偏ってる)のは明らか、という話で、間違いも何も、明らかな事実だ。
ていうかおまえ論理的にはあるはずって言ってたじゃんあれは嘘だったのかよw
はいもう終わり。
バカだって表明は事はもう十分だからやめとけ。
お前の見解も聞いてねえよ 黙れ殺すぞ
>>286 場合の数は変わってないから倍数のままと言うことは変わらない。
けど結果の並びは変わるから、全並びが均等のままかどうかは俺には分からない。
ちゃんと考えたら分かるかも知れんが。
倍数になってないことからは、偏ってることが確実と分かるだけ、それ以上の何者でもない。
最初からそういう話しかしてない。
>>288 通報されるぞ
まあ悪かったよもうやめる。
>>292 テメエ自身がそのマルチじゃねえか馬鹿が。
List<Object>
295 :
デフォルトの名無しさん :2015/01/08(木) 16:17:06.20 ID:qIfkunGX
ばれた?
自作ソフトをVectorに登録してみたんだけどさ。 メールで「公開されましたよ〜!」みたいな通知ってこないもんなの? サイト上では既に公開されてるのに・・・。 深夜に一斉送信とかかな? Vectorに登録したことある人教えて。
Vectorとか久しぶりに聞いたわ 人に使ってもらいたいならスマホアプリに行ったほうが楽しいよ
>>298 VS2015でザマリンが標準搭載されるらしいね。
でもたしか無料版は容量制限があるから、
もう少し制限が緩和されたら俺もスマホアプリ開発する予定。
ObjectiveCとJavaの二重開発問題をまさかC#が解決するとはね。
ようやくVSでもAndroidの開発ができるようになるの?
言語がC#でもライブラリがJava(のパチモン)ではあんまり嬉しくないw
VS2015でザクマリンが標準搭載と空目してしまった。 でも本当は水ジムの方が好きです。
>>301 androidの上ではJavaもパチモンだけどなw
真の正体であるDalvikはGoogleが本気だして作ってるから
C#よりも優秀な可能性がある。
それをC#から使えるんだから嬉しい限りだろ。
VM同士が直接競合しているわけでもないのに実行環境の比較をして何の意味があるの
>>303 Dalvikそのものが出来が悪いって散々聞いたけど、4.4になって改善されたの?
っていうか俺が言ってるのはそこじゃなくて、ザマリンって.NET Framework(BCL)使えないよね確か。
ライブラリはSDK(Javaのパチモン)しか使えないはず。
やっぱ紗栄子が悪かったんや
型を型推論型のフィールドに入れる事ってできますか?
型推論型ってなんだよ…
>>305 MonoベースだからBCLは.NETと同じだよ
>>306 アンドロイドOS上で動くシェルが開発された・・・その名は
Dalvish
311 :
デフォルトの名無しさん :2015/01/11(日) 07:34:57.86 ID:6fleKwOw
Action型の変数actに何かの処理を書いて実行します。 その際に、 act()とact.Invoke()どちらを使った方がいいのでしょうか?
>>311 Invokeじゃないとだめな場所以外で
デリゲートを呼び出すのに()を使わない理由が思いつかない
313 :
デフォルトの名無しさん :2015/01/11(日) 07:55:48.50 ID:6fleKwOw
速度とか変わらないの? ActionDictionary[type]() じゃ見にくいから ActionDictionary[type].Invoke()にしようと思って沸いた疑問なんだけど
おそらくIL上では全部Invoke()扱いだと思う
ちゃんとリファレンス読んでるのかね。 「CLRがリフレクションのための自動的にInvokeメソッドを提供しますが コンパイラが自動的に呼び出すのでC#から明示的にInvokeメソッドを呼び出す必要はありません」 という特殊なメソッドなので それが自分の使い方に合ってるならどうぞお好きに。 速度についてはコンパイラの実装は314の通り
リファレンスに書かれてないメソッド使う俺カッコいい
Invokeは実装依存だから将来的なバージョンアップや 別系統の.NETで使えなくなる可能性があるね
>>313 >見にくいから
それは変数名が原因じゃないのか・・・
>>297 [Vector] ライブラリ公開のお知らせ って件名でメール来たけど、公開してから数日後のようだな
正月だからだろうが2日に公開して9日にメール来たよ
あ、2日は修正してUPした日だった。でも、公開してからメールは2,3日はかかっているようだな
MSDNのAPMの項とか見ればInvokeについても記載されていると思うけど
別に言語仕様/MSDNに関係なくなくなる可能性は無くはない
なくなくなる無くない
>>319-320 297だが、おまえは俺かw
俺も2日に修正して9日にメールが来た(・∀・)人(・∀・)ナカーマ
ttp://www.vector.co.jp/vpack/whats/index_1.html この145本の中に俺のソフトとおまえのソフトがあるわけだw
ところで今回はじめてソフトを登録してみたんだけど、
日本でソフトの登録を行ってるサイトとしてはVectorの他に窓の杜が有名だと思うけど、
あそこはソフト作者からの登録は行ってないんだね。
窓の杜側が優秀なソフトを選定して作者に対して採録していいかを問い合わせる、
という形態であるということが色々調べる中でわかった。
ソフト作者からすると自作ソフトが窓の杜に採録されることって名誉なことなの?
楽しそうだね
PowerShellとかで一瞬でできそう
なんで.NET4と.NET3.0用のPresentationFrameworkを両方参照してるの?
TestWindowで何をテストしていたのかが気になる
DataGridViewで、バインドモードでソート列で行の値を変えたとき、 しれっと行が入れ替わってCellStyleとか値以外のプロパティとかを置いてけぼりにしてしまうのですが ちゃんと行に紐付けてプロパティも一緒に移動させる方法はないでしょうか?
>>330 俺の勘違いじゃなければ、外部のライブラリが使用しているという面白くもなんともない理由です
てか、解析するのもいいけど普通に使って下さいよw
>>331 バージョン判定して 7 なら抑止した方がいいんじゃね?
どう見てもエラーメッセージだし、俺なら使うのやめると思う。
>>335 MSご謹製のWixと言うxmlで設定するインストーラー使っているんだが
該当する部分にバージョンで判定する方法がよくわからないです
まあ、大した機能じゃないから削除しましょうかね
Windows8使っている人にはわかると思いますが、インストール時にスタートメニューにピン止めする機能です
もしWix上でバージョンで処理を切り分ける方法を知っている人がいて教えてもらえたら幸いです
もうブログでやれよ
メモリの改ざんを検出したいのですが何か良い方法はありますか?
CRCとかMD5とかSHA1とかを定期的に取るんじゃない?
.Netって直にメモリを触れるの? StreamBufferとかその辺しか無理臭くない?
Marshal.ReadInt32(new IntPtr(0x12345678)); *((int*)0x12345678) = 0x5555aaaa; 触るだけならいくらでも
>>331 ホームページ、よく出来ているけれど、自作か?
どういうツールで作るのか教えてけれ。
俺も似たようなホームページ作りたい。
よほど早死にしたいらしいなお前
C#スレなんだからここで宣伝続けたきゃソース公開しろよ
しなくていいから消えて
>>342 blogspot.com
ここでアカウント作れ
ブログとは全然違うだろ・・・・・・
blogger なら自由度高い 十分ホムペとして通用するよ
>ホムペ
ホムペマンの誕生の瞬間であった
右下に書いてあるやん
using System; public static int[] list = {1,2,3}; var n = list.length; これで エラー 'System.Array' に 'length' の定義が含まれておらず、型 'System.Array' の最初の引数を 受け付ける拡張メソッドが見つかりませんでした。 using ディレクティブまたはアセンブリ参照が不足しています。 と表示されます どこがおかしいのか分かりません
目が悪いのか?
C#はJava原人じゃないんで
もう一度var n = list.length;って打てばVisual Studioが教えてくれるよ
スレチだったら済まない、CsvHelper使ったことある人いる?
http://joshclose.github.io/CsvHelper/ これでCSVを自分のクラスにマッピングするときに
CsvClassMap<T>というabstractクラスを継承しろってことになってるんだけど、
いくら探してもこのパッケージ内にこのCsvClassMapがそもそも存在しないように見える。
using CsvHelperしてもサジェストに出てこないし、
オブジェクトブラウザーで中を見ても、確かに無い。
でもこれ使ってる人をググると普通にこれで使えてるみたいだし、
GitHub覗いてみたらこのクラスは存在するし、
試しに少し昔のバージョンを入れてみたけど変わらずだし、わけわかんなくなってきた…。
ちなみに私のスキルレベルは、C#をちゃんと触るのは今日が初めてレベル。
他の言語の素養はあるので、概ね理解していろいろ調べてるつもり。
using CsvHelper.Configuration;
>>362 それでもダメなんだよ…
ググったりGitHubを見る限り、確かにCsvHelper.Configurationの下にいるはずなんだが
オブジェクトブラウザーで見ると、その下には
CsvHelper.Configuration
├CsvConfigration
└CsvConfigrationException
の二つの要素しか無い。
つい5日前に修正されたりしてるから、何かやらかしてるのかと疑って
半年前のバージョンを入れても同じだった。
>>363 Nugetでバージョン2.10.0入れてみたけど
CsvClassMapってクラス普通にある
>>364 おお、わざわざ試してくれてありがとう。
じゃあ俺の環境だけなんかおかしいんだろうな。
ちなみに、最初はVS2012のメニューにデフォで入ってるNugetから入れて(2.10.0)、
そのあと一度消して、パッケージマネージャーコンソールから2.7.0を入れてみた感じ。
ありがとう、とりあえず入れて再起動消して再起動とかいろいろ試してみることにするよ…。
まだ解決してないけど、このライブラリのパスらしきものが CsvHelper.2.10.0\lib\net20\CsvHelper.dll ってなってるから、.NetFramework2.0用のになってて機能が少ないのかなーと疑ってる。 win7だからデフォで3.5が入ってるはずだけど、どこかの設定で2.0扱いなんだろうか…
やはりnet20になっていたのが原因で、4.5用を参照してほしいのだが 参照が変わってくれる方法がわからない。 ので、このパスに4.5用を置き換えてしまうというひどいゴリ押しをしたところ、 無事CsvClassMapが見つかりました…。 根本解決してないけどいったん自己解決とします。ありがとうございました。 どなたかNugetしたライブラリのFrameworkバージョン参照の左右する要因が わかるかたが居ましたら教えてください…。 ちなみにcsprojと同フォルダに生成されたpackages.configを覗いてみたところ、 ちゃんとtargetFramework="net45"になってました。ここを40や35にしてもダメだった。
>>360 ありがとうございます。
本当に気付きませんでした
>>366 ,367
.NET 3.0、3.5はCLRは2.0のままだからライブラリは2.0用のを使う
.NET 4.5を入れて、VSのプロジェクトの設定を変えないと4.5用のは使われないだろ
でも、4.5って4を置換してしまうんだよね
>>369 win7はデフォで4.5までの勘違いだったので、4.5まで入ってた。
ライブラリのフォルダはnet20,net30,net40と用意されてるので
各段階で使ってくれそうなものなんだけどなぁ。
それはさておき、ひとまずその「CLR」とやらについて理解すればよさそうかな。
調べてみる、ありがとう。
CLR≒.NET Frameworkって程度の意味しかないぞ
>>369 はどっちかと言えばBCLの話のような気がする
同じじゃねーだろ ASP.NETのアプリケーションプールの「.NET」の誤表記が 混乱を招いたために「CLR」に訂正されてんのに 同じとかマジキチ
dictionaryに、stringをキーとして自作クラスを放り込んで使っています。 C++ではmapに放り込んでた自作クラスをデストラクタでdeleteしてたんですが、C#ではプロセス終了で勝手にdeleteしてくれるって認識で問題ないでしょうか?
374 :
デフォルトの名無しさん :2015/01/18(日) 08:20:52.28 ID:sNaTaheH
そうでもない
>>373 スタックとstaticフィールドから参照を辿っていけば、オブジェクトはツリーを構成してると考えられる
そのツリーから一旦外れると、プログラムからはもうそのオブジェクトにアクセスする手段はない
そうなったオブジェクトはGCによって自動的に検出されて削除される
つまり、他のところから参照されてなければ、DictionaryがGCされるタイミングで一緒にGCされる
関係ありそうで質問と関係ないクソレスする明日ぺ
プロセス終了時にデストラクタは呼ばれない 従ってデストラクタが呼ばれる事を保証したい場合はusing使え
それデストラクタとは言わないぞ
>>377 CLRが正常終了する限りは呼ばれるよ
プロセスが異常終了するときには呼ばれないことがあるけど、
その場合はusingもfinallyもファイナライザ(デストラクタ)も、
もっと言えばCriticalFinalizerObjectのファイナライザすらも呼ばれない
>CLRが正常終了する限りは呼ばれるよ >プロセスが異常終了するときには呼ばれないことがあるけど この馬鹿はいったい何を言ってるんだろう
>>380 試してみたら?
それともCLRとプロセスの区別が理解できてないのかな?
厳密に言うともう一つのレイヤーとしてAppDomainも区別するべきなんだけど、
大抵はCLRと一対一だからあまり気にする必要はない
・AppDomainが正常終了→CLRが正常終了→プロセスが正常終了 この場合は ○ファイナライザ、○finally(=using)、○CriticalFinalizerObject.Finalize、○C++のデストラクタ ・AppDomainが強制終了→CLRが正常終了→プロセスが正常終了 この場合は ×ファイナライザ、×finally(=using)、○CriticalFinalizerObject.Finalize、○C++のデストラクタ ・CLRが強制終了→プロセスが正常終了 この場合は ×ファイナライザ、×finally(=using)、×CriticalFinalizerObject.Finalize、○C++のデストラクタ ・プロセスが強制終了 この場合は ×ファイナライザ、×finally(=using)、×CriticalFinalizerObject.Finalize、×C++のデストラクタ まとめるとこうなる もちろんfinallyに意味がないわけじゃなくて、すぐに解放処理を行えばそれだけ強制終了に巻き込まれる可能性が低くなるわけ
本当に呼ばれないと困るものは exitで呼んでもらう
>>375 >DictionaryがGCされるタイミングで一緒にGCされる
同時にGCされる保障はないだろ
そもそも.NETではデストラクタ実行のタイミングは不定であって
自分で後処理する必要があるならIDispoable実装して正しく呼ばれるようにしろって話だ
IDispoable
この手の話は.NETが出始めの頃の入門書にはちゃんと書いてあるものが多かったね。
ただIDisposableを正しく実装しているものをあまり見た記憶がない
確かに
えっ?LINQ以外はちゃんとDisposeしてるだろ普通
TaskだからDisposeしないもん!
IDispoableはアンマネージドコードのリソース開放手段ってことになっているけどね マネージドだけならGCに任せろってことなんだろうか?
>>392 アンマネージコードじゃなくてアンマネージリソースな
この場合のアンマネージリソースというのは必ずしもウィンドウハンドルのように
プラットフォームのネイティブなリソースというわけではなく、
解放タイミングをGC任せにできないリソース的なもの一般を指す
たとえば処理開始時に一時的にstaticフィールドにオブジェクトが登録されて
それが終わったらメモリリークを防ぐためにDispose呼んで登録解除させないといけないような処理をするクラスがあったとしたら
そのインスタンスはアンマネージリソースと考えられる
個人的には ・lock(this) ・Dispose内ではlockしているのに、他のObjectDisposedExceptionをスローするメソッド内ではlockしてない の2点が気になった。 前者はlockにおけるパターンの話なので今回はどうでもいい。 後者はIDisposableをスレッドセーフにしたいなら、 ObjectDisposedExceptionをスローする全メソッドでもlockしてDisposeの実行を阻止しておかないと メソッドの実行中に別スレッドからDisposeできてしまうので破綻する。
IDisposableがロックを必要とするかは要件次第なのに、コメントもなくロックしてんのもいくない
そもそもなんのためにlockしてるんだろうな。 クラス自身をスレッドセーフに作るなら話は別だが、無条件にやるような事じゃないし、 無条件にスレッドセーフにする気がないなら意味はない。 ファイナライザのタイミングが非同期な事から微妙に思い違いをしたのかな?
ファイナライザのスレッドでデッドロックが発生したらどうなるの?
C#プロジェクトに既存追加でC#フォームの.cs追加したらフォーム追加されるはずだよね? VS2010はそれでいけたはず。 だけどVS2013はソースは追加されるけどフォームじゃなくてただのソースとしか認識しない。 マークもフォームのマークになってないし。 ダブルクリックしてもフォームは開かなくてソースが開くだけ。 同じ人いる?
>>399 System.Windows.Formsの参照を追加してないなんて間抜けなオチじゃないよね?
黙ってトンズラかよ みっともねえ奴だな
>>400 もちろん、それはないと思う。
プロジェクトには他のフォームもあってちゃんと動いてるから。
今自宅なんで会社行かないと実際には見れないけど。
とりあえず新規でフォーム作って、追加したいcsとデザインcsの内容を丸々コピペしたら何とかいけたんで。
レスありがとう。
>>401 俺に言ってる?
君みたいに昼からネット出来るほど暇な人間じゃないから。
君、仕事もしてないプー太郎か?
こっちは汗水たらして働いてるんだから夜しかネット見れないんだよ。
くだらん書き込みでスレ汚ししないでちょっとは社会のためになる事しろ。
>>400-401 は同一人物なんだけどねw
別にどうでもいいけど。
社会のためってw
君は社会のため(笑)に無料で勤労奉仕してるのかもしれないが、普通は人が働くのは自分の私利私欲を満たすため。
世のため人のため(笑)はポエマー系の自己陶酔か、せいぜい言ってもついでのこと。
馬鹿じゃないの。
Formとして開かれるかどうかは.csprojに書かれてるから消して再作成で正解
っていうか気に障ったなら悪かったけど、
>>401 みたいに書いたのは
俺なら掲示板、特に2chみたいな人が多いところに質問を書いたら
最低1時間ぐらいはレスがないか確認するから。
そのぐらい煮詰まった状況だから質問してるし、そうなら一刻も早く問題を解決したいと思うから。
それが仕事ならなおさら。
普通は一刻も早く解決したい問題を掲示板に書き込んでレス待ちしたりしません
まして2chなんか・・・
最近煽っていくスタイルの人増えたね
簡単なカードゲーム作る場合に知っておいた方がいいメソッドと処理を適当でいいので教えて下さい
まずは本で基本的なデータ構造とアルゴリズムとAIを勉強しろ 描画とか入力に使うような.NETの機能ははっきり言ってどうでもいい そんなものは必要になってから調べれば十分
>>410 ありがとうございます
お勧めの書籍があれば教えて下さい
分かりやすいヤツがいいです
命令口調クンの言うことなんか聞いちゃだめw アルゴリズムこそ必要な時(そんな時は何年に1度しかないw)に調べればそれで十分だし 今時データ構造って発想が20年ずれてる
だいたい、知らない人にいきなり命令口調でああしろこうしろとのたまうような奴が どんな人間か、ちょっと想像力を働かせればわかるでしょw
丁寧口調で何の情報も出さないとかw
だいたいカードゲームなんてデータ構造がほとんど全てだろうに・・・
まれにUNOを言い忘れるAIつくってくれ
ここまで耳を傾けるに値するレスなし
とにかくさっさと作り始めて、詰まったら詰まるたびに調べる、
これが全ての正しい作り方だよ
仕事ならそうじゃないけど、趣味ならこれでいい
>>418 実際使うだろう情報がごく一部と、
基礎教養として知っておいた方がよく、いつか使うだろう情報が一部と、
基礎教養ではあるいつまでも使わない可能性の高い情報が大部分
もちろん意味はあるだろうけど 必要に迫られていないときに見てもあまり実感がわかない気がする 個人的な興味や趣味で作るんなら 調べるべき内容も見当が付かないようなものはとりあえず作り始めてみるのをおススメ 完成すればそれでいいし、つまづくならつまづいた点をググったり聞いたりして見直せばよい 完成しても動作が遅いとかの不満点がでてそれを解消するために構造見直したりアルゴリズム見直したりすればよい
あらもろかぶり
一般的なものじゃなくてカードゲームに関連したデータやアルゴリズムな C#以外の解説サイト(Flashが多い)みながら移植すると早く覚えられる
パズルやカード作りたがるような人って成果物よりもプログラミング自体を目的にできる人だと思うから 基礎からやってもいいんじゃない? その手のゲームを作るのを楽しめるならアルゴリズムやデータ構造の勉強は同じくらい楽しいよ
IEnumeratorの自力実装すら必要になることはあんま無いのに平衡木とか絶対に使わん というかほとんどの場合組み込み型で十分
結局、コンピュータって、人間がすることを高速且つ正確にやってくれるだけだから、 自分がコンピュータになったつもりで、プレイヤーの操作に対してどう動くかを考える それをそのままコードに書いてみればいい。最初はそれで十分。
10の40乗ぐらいパターンを手入力するだけだよね
>>427 全パターンをデータで用意する実装をするのか?そうじゃないだろ?
アルゴリズムの”手続き”って、別にそれをコンピュータがやろうが人間が手作業でやろうが、
速さと正確さが違うだけ、という話。
以上、鳥は地虫の視界を知らず、逆もまた然りという小話でした
人間は手続きでものを考えないし 常にパターン認識に頼ってるからな
ものを考える人が倒れたよ パターン
new StringBuilder().Insert(0, "w", 7).ToString();
"w"
String^ selectedEmployee = (String^)(ComboBox1->SelectedItem); ^ってどういう意味?
C++CLIは専用スレがある
1123m4455566m889s これ何切ればいいですか?
日本語でお
何切ればいいかって麻雀かよ
日本語おかしい奴多すぎw
取り敢えず5を切って様子を見る
理牌ソート順が不親切 1 1 2 4 4 5 5 5 6 8 8 3m 6m 9s
回答書いてなかった 漏れなら 9s 切る
>>442 6m分けてるけどイーペーコー無視?
9s切りは同意。
6m残すとどこがイーペー?
今更言うと怒られそうですがスレ間違えました あと4455566pのミスです
FormのLoad時にComboに"Name"と"Value"を入れて、 SelectedIndexChangedの時に"Value"を保存するって書いてるんだけど、 Comboのアイテムを変えずにデフォのValueを取得すると その型が"System.Data.DataRowView"ってのが取得できて 値が取得できないんだけど、どうすればいいの?
半端に俺用語使わないで ComboはComboBoxでいいとして、 NameとValueを入れるって具体的にどういう操作? デフォのValueを取得って具体的にどういう操作? アイテム変えたら望ましい値が取れるの?
あーすみません。 comboBoxのselectedValueはGuid型が入るんです。 FormのLoad時に入れてます。 マウスでComboBoxの選択アイテムを変えると正しいGuid型が取得できるのですが、 FormのLoad時に、そのまま選択アイテムを変えずに、 (正確にいうと、たまたまselectedIndex=0のアイテムが選択したいアイテムだった。) comboBox.SelectedValueを取得するとGuid型ではなく、System.Data.DataRowView型が取得される為困っているという状況です。
インターフェイスの使い所がイマイチよく分かりません 作ったり継承したりは出来るんですが、実際のゲーム中で どのように使うのかが分からない・・・ なにかインターフェイスを使う練習みたいなのはありませんか?
練習なんかしなくても 継承したいクラスが2つ以上になったらお前はどうするんだ その時インターフェースに頼ることになる 嫌でも
>>451 つまりその辺が分かってないんです
C言語しかやった事ないんで、インターフェイスと継承がよく分からんのです
よく分からんってのは書けないって事ではなく 継承しろ、とかAというメソッドを持つインターフェイスを作って実装しろ とか局所的な事言われたらできるけど、実際のゲームで使えって言われたら どう使えばいいのか分からない感じなんでうs
使わなくていいなら使わなくていいよ
そのうち「あれ?ここで受け取るクラスにこのメソッドが絶対あることがわかってないと困るやん?」 って思う日が来るさ、来るまで使わなくていいよ
>>453 業務アプリしか作った事ないけど
武器という基底クラスを継承して剣クラスや弓クラス…
攻撃などキャラクター共通の振る舞いをインターフェイス…
みたいな感じじゃないの?
こうゆうのってデザパタも色々あるだろうし正解は無いと思うよ
アプリ毎に実装の仕方はバラバラみたいな事も聞くし
とりあえず自分の思うように作ってみれば良いじゃない
>>454-456 ありがとうございます。
とりあえず、分からないまま進んでみて、必要になったら再度調べてみようと思います
一番分かり易いのがIEnumerable<T>じゃないか? 実装してればforeachできるよって奴
用意されたインターフェースを実装するだけだと、 インターフェースの本質を理解しないまま終わっちゃいそうな気がする
IDispose を実装していればusing(var hair = new husahusa()){ } できるようになる
var hair = new HairMock()
IEnumerableとIDispose以外に用意されているIFでよく使うものがあれば教えて下さい
IComparer ListのSortで使う。
>>463 listのソートって基本的にLINQ(OrderByとかThenBy)使うのかと思ってました
OrderByでもIComparer<T>使うがな クエリ式は知らん
最近プログラムを覚え始めたばかりで恐縮ですが Flot型を文字列にキャストして小数点2桁を含めて可能な限り続く桁数を表示させたいのですが Floatに8桁以上の値を入れた時点で値が丸め込まれてしまってどうにも上手くいきません… 続く限り無限の桁を表示させるソースが公開されていれば教えてもらえませんか
floatの有効桁は7桁ぐらい それ以上の精度が必要ならdoubleで
あ、範囲より精度重視ならdecimalがいいのかな
ひょっとして:ToString
C#のクラスプログラミングで、コアな部分とUIの部分とをしっかりと分離しておけば、 UIの部分で.NETの環境がいくら変わっても、コアな部分との再連携さえしてやれば、再生可能だと思うんですが、 これって常識的な考え方でしょうか。 ASP.NET 4.5系と、ASP.NET 5(vNext)とで、大きくUI部分のフレームワークが変わってしまうらしいんで、 後々にまで使えるようにするには、しっかりと分離する構造にするしか策はないですよね。
471 :
470 :2015/01/30(金) 07:43:21.87 ID:XjEPmedf
>コアな部分とUIの部分とをしっかりと分離 しっかりと、カプセル化をやっておこうと考えています。
Webのモデルなんてたいがい大して複雑なモデルではないし ある程度UIの構造を前提にして作るもんだから、DBとORM以外全とっかえでいいよ それよりサブシステムを丸ごと捨てて差し替えても大丈夫なようにある程度の範囲で縦割りするのが大事
473 :
470 :2015/01/30(金) 09:34:12.93 ID:XjEPmedf
>>472 ありがとうございます。
>DBとORM以外全とっかえでいいよ
アプリのコアな部分を大切にして、UIは何にでも(たとえtuiでも)とっかえが利くようにしたいと思います。
>それよりサブシステムを丸ごと捨てて差し替えても大丈夫なようにある程度の範囲で縦割りするのが大事
サブシステムって、Webのフレームワークのことでしょうか?
縦割りとは、DBとORM(クラス関係・・・私の言うところのコアな部分)と、Web UIとの切り離しのことでしょうか。
続く限り無限の桁を表示したいって話だからStringですら厳しいんじゃない? ググった限りだとStringBuilderが20億バイトだって話だけど、無限には遠く及ばないし。
>>466 FloatなりDoubleなり浮動小数点型に数値を入れた時点で、特定の桁数以下の情報は切り捨てられてる
それをどう表示しようが、持ってる情報以上の桁数は出てこない
整数同士の割り算のひっ算をプログラムにするようにすれば
1桁ずつ続く限りの表示をしてくことは可能
public static void PrintFlaction(int num,int den,int decimal_places){
int mod;
if(den==0){
System.Console.WriteLine("INF");
return;
}
System.Console.Write("{0}.",num/den);
mod = num%den;
for(int i=0;i<decimal_places;i++){
mod *= 10;
System.Console.Write("{0}",mod/den);
mod %= den;
}
System.Console.WriteLine();
}
public static void Main(string[] args)
{
PrintFlaction(1,3,100);// 1/3 を小数点以下100桁表示
PrintFlaction(5,7,100);
PrintFlaction(2,2,100);
PrintFlaction(2,0,100);
Console.ReadKey(true);
}
昨日、C#で作ったexeとdllをILMERGEしたところ、コマンドは成功するのに 出力ファイルがサイズ0になってしまいます。 昨年ごろ、よくILMERGEしていて、全く問題なく出来ていたのですが。 そのC#は今年になって何も変更していません。ということは .NET Frameworkか何かがWindowsUdateか何かで変わったのでしょうか? みなさんILMERGE問題なく使えていますか?
つい最近初めてC#触って、VS2012落として、ILMERGEも初めて落としてきて使ってるけど 何も問題ないよ。
.netのバージョン変えたんじゃないの?
>>477 つい最近でなぜに VS2012 なの?
VS2013 Community か冒険家なら VS2015 CTP とかじゃないのか?
>>479 他人の作ったものを引き継ぐというクソ業務で、念のため元のと同じのにしておきたいって理由と、
2013の商用利用のセーフ範囲がよくわかんなかったから念のため2012にしておいた。
まぁ、使い道は社内のちょっとしたツールだからあまり心配してないけど。
>>480 ああ、仕事ならしょうがないね
納得したわ
Replaceメソッドを使用し、下記strから2,5,8と複数の文字を消したい場合 スマートな書き方はありますか? string str = "123465789" str= str.Replace("2", ""); str= str.Replace("5", ""); str= str.Replace("8", "");
Regex.Replace(str, "[258]", "")
>>483 ありがとうございます。早速やってみます!
485 :
デフォルトの名無しさん :2015/01/31(土) 16:57:42.32 ID:pjmSNE++
複数のテキストボックスとボタンがあり ボタンを押すと「ファイルを開く」ダイアログボックスを表示され 選択されたファイルのパスがテキストボックスに表示されます。 ボタンクリック時のイベントには同じような処理が入るため 共通化したいがテキストボックスに値をセットしてあげる部分がそれぞれで違うため どう共通化してあげればいいのかわかりません。 どなたかご教授お願い致します。
private void button1_Click(object sender, EventArgs e) { OnButtonClick(textBox1); } private void button2_Click(object sender, EventArgs e) { OnButtonClick(textBox2); }
>>486 ありがとうございます
バカな質問をして失礼しました・・・
ん?俺はわからん
クリックイベントを登録する関数を同じのにすればいいんじゃね?
最後にやりたい事だけ匿名メソッドで渡すようにする手もある、初心者向けじゃないけど
public interface OnUpdate { void onUpdate(); } というインターフェイスと public void addWatchTarget(,OnUpdate callback) {} というメソッドを定義して、 hoge.addWatchTarget(new OnUpdate{ public void onUpdate(){ /*ここにアップデートした時の処理*/ }; }); と書こうとしたのですが、エラーが出てしまいます。 一つのインターフェイスの為だけにクラスを作りたくないし、javaで言うところの b.setCallback(new Runnable() { public void run() { ... } }); の様に書きたいのですが、c#ではどのように表記すればよろしいでしょうか。
492 :
デフォルトの名無しさん :2015/02/01(日) 05:00:58.39 ID:82CyRnjV
>>491 イベントを使う
コールバックで値を返したいのならFuncデリゲートを使う
>>492 ありがとうございます。
すいません、例が悪かったです。インターフェイスにはn個のメソッドが宣言されています。
public interface OnUpdate {
void onUpdate();
void onFiled(int errorCode);
}
hoge.addWatchTarget(new OnUpdate{
public void onUpdate(){};
public void onFailed(int code){};
});
c# interface method arguments 等でググったのですが
「インターフェイスを実装したクラスを作って、それをインスタンス化すればいいよ!」という回答ばかりで、インターフェイスを直接引数に与える方法は見つかりませんでした。
>493 C#にはそのような文法はありません。 addWatchTarget(new MyCallbackSet{ Update = ()=>{}, Fail = ()=>{} }); としてください。 大体JAVAだって、そこはラムダで書くだろ普通 b.setCallback(() -> { ... });
おまえらなんでこんな朝早くからこのスレにいるの? さすがにおかしいだろ・・
まだ土曜の31時じゃないか
高階関数が使える言語ならいちいち名前付けずに
addWatchTarget(() => { /* Update */ }, error => { /* Fail * });
とするのが普通だと思う
もしくは、実装に少々手間はかかるが
addWatchTarget(() => { /* Update */ }).OnFailed(error => { /* Fail * });
だね
一般的に
>>494 のような渡し方は格好悪いからあまりやらない
2個ぐらいならそうかもね
>>496 ソフトウェア従事者の多くは趣味プログラミング
もちろん俺を含むw
趣味プログラマがC#スレにいるわけない
趣味ではない。 使命である。
義務 宿命 運命
最近のC# 5.0あたりの紹介が充実している本って何がお薦めですか
C# Language Specification Version 5.0
今度、ASP.NETのサーバコントロールを使うC#のプログラムをつくりたいと思っています。 Visual Studio 2010 proを持っていて、ASP.NETプログラムを作ったことがあるんですが、 無料のVS communityと、どちらを使えば良いんでしょうか。 悩みます。
ライセンスが許せば2013Communityでいいよ Web Essentialsとかあるし
>>507 ライセンスの面では大丈夫です。やはり、新しいバージョンの方がいいですよね。
せっかく、VS 2010 PROを購入したのに、ちょっともったいなーい。
VS community 2013って、.NETフレームワーク 4.5.1に対応しているのですよね。(下記サイトを参考)
https://msdn.microsoft.com/ja-jp/library/bb822049%28v=vs.110%29.aspx 質問があります。
(1).NET 4.5.1をベースとしてASP.NETが動作するものだと思うのですが、(合ってますでしょうか)
そのASP.NETのバージョンは任意に選べるような仕組みなんでしょうか。
それとも、.NET 4.5.1内部にASP.NETは内包されているのでしょうか。
(2).NETフレームワーク4.5.1とIDE(VS community 2013)の関係がすっきりしません。community 2013単なるIDEだと思うので、
これをつかって.NET 2.0用のプログラムを開発することはできるのではないかと思うんですが、
どうして駄目なんでしょうか。
おねがいします。
両方とも2.0以降の任意のバージョンが選べる
>>509 (1)IISの設定
(2)できるけどむしろなんで「どうして駄目なんでしょうか」なの?
>>509 > (2).NETフレームワーク4.5.1とIDE(VS community 2013)の関係がすっきりしません。community 2013単なるIDEだと思うので、
> これをつかって.NET 2.0用のプログラムを開発することはできるのではないかと思うんですが、
> どうして駄目なんでしょうか。
勘違いしてる。VS2013自体が動くのに.NET Framework4.5.1が必要。作成するプログラムの対象フレームワークは選べる。
レスありがとうございました。
1、そもそも、VS community 2013(IDE)の動作に、.NET Framework4.5.1が必要であること。(
>>512 )
2、IDEのプログラム開発では、.NET 2.0以上の任意のフレームワークを対象したプログラムを作れる。(
>>510 )
3、ASP.NETの開発においては、(IDEというよりも)とくにIISで設定するASP.NETのヴァージョンが大事。(
>>511 >>510 )
3については、aspxを処理するのは、IISですものね。IISで、処理できるASP.NETのバージョンを絞り込むということでしょうか。
古いバージョンのaspx(ASP.NET 2.0用)も動かしたいなとおもいまして。
2については、ASP.NETを開発する場合、IDEに内蔵されたWEBサーバ機能が複数のASP.NETのバージョンに対応しているのでしょうか。
514 :
デフォルトの名無しさん :2015/02/07(土) 15:57:28.04 ID:o5egNras
foreach文でindexを取得するとき、 Select( (value,index)=>new{value,index})で取得できると思うんですが、 どういう処理がされているか教えていただけないでしょうか
public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, int, TResult> selector) { if (source == null) throw Error.ArgumentNull("source"); if (selector == null) throw Error.ArgumentNull("selector"); return SelectIterator<TSource, TResult>(source, selector); } static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector) { int index = -1; foreach (TSource element in source) { checked { index++; } yield return selector(element, index); } }
516 :
デフォルトの名無しさん :2015/02/07(土) 17:06:07.21 ID:o5egNras
>> 515 ありがとう。直感的にだけど理解できました。
>>508 そのもったいない精神、命取りになるぞ。
単純に比較して良いものを使えば良い
518 :
デフォルトの名無しさん :2015/02/07(土) 22:46:54.91 ID:j6Fd7dob
>>513 IISアプリケーションプールの設定で選択できる
大抵は最新Verのにしときゃ動くがな
>>517 レスありがとう。
VS communityをインストールします!
>>518 アプリケーションプールってありましたね。
変わった概念だなと思いました。
しばらく触っていないんで、すっかり遠い記憶になっていました。
520 :
デフォルトの名無しさん :2015/02/08(日) 17:29:33.54 ID:s109R4ug
インスタンスを自分自身で破壊することはできますか? 変数にnullを設定するのでなく、 特定のメソッドを呼び出したら自動的に参照を外すようにしたいのですが。 var obj = new Hoge(); obj.Destroy(); print(obj); //null
無理
意味わかんないw
>>520 何のためにそんなことするの?
たぶん、IDisposable実装してDispose()を呼び出すのがやりたいことに近いと思うけど。
>>523 それやったとしてもマネージド部分はGC任せなんでは?
ローカルスコープではそんなこと気にしなくてもJIT/インタープリターが不要と判断した時点で参照は切れる
>特定のメソッドを呼び出したら自動的に参照を外すようにしたいのですが。 デリゲートの話だとばっかり思っていた。
無理。事情を話してくれないなら以上。
>>520 var obj = new Hoge(&obj);
みたいにしとけばできると思う
531 :
デフォルトの名無しさん :2015/02/08(日) 18:57:37.53 ID:s109R4ug
520です。 Destroyを呼び出すとアプリケーション内で そのオブジェクトが消滅することを確定させたいです。 nullのセットし忘れとか防ぎたいんです。
534 :
デフォルトの名無しさん :2015/02/08(日) 19:03:01.86 ID:s109R4ug
複数のオブジェクトがそれを参照しているわけで、 それらすべてにnullを設定していかないといけないんでしょうか?
参照があれば生きてるしなければそのうち死ぬから大丈夫
>>531 なんか根本的に考え違いをしてるようにしか思えんけど...
まあ、
pubic event EventHandler SetMeFree = () => {};
....
public void Destroy() { SetMeFree(); }
とかしておいて、
private Destroyable _hoge;
....
void Hoge()
{
....
_hoge = new Destroyable();
_hoge.SetMeFree += () => { _hoge = null; };
....
}
とか(笑)
スコープから抜ける前にobjにnull代入しないと 消えないと勘違いしてるのか?
>>534 当然
だって、その参照している人はまだそのオブジェクトにアクセスするかもしれんでしょ?終了処理だとかで。
だから、あくまでも参照している所の、不要となったタイミングでnullを設定するようにすべき
539 :
デフォルトの名無しさん :2015/02/08(日) 19:33:07.31 ID:Pwx84Qtq
Twitter乗っ取られたんだが奪い返すことは可能?
540 :
デフォルトの名無しさん :2015/02/08(日) 19:34:46.24 ID:Pwx84Qtq
Twitter乗っ取られたんだが奪い返すことは可能?
>>534 Hogeインスタンスを参照してるオブジェクトが自作クラスなら可能
そうでないなら無理
null代入よりも、出来るだけローカルスコープでオブジェクトを保持するようにしようよ。 いちいちnull代入するコードは例外とかに弱いし。
543 :
デフォルトの名無しさん :2015/02/08(日) 20:05:43.65 ID:s109R4ug
ローカルで処理できたら聞いていません。 オブジェクトの参照は勝手に破棄できないから、 マネージャークラスを作って監視しないといけないんですね。
>>531 IDisposable実装してないクラスだったら放置プレーで良いんじゃないの?
IDisposableならusing使えばエエだよ
>>543 じゃ、放置プレーで。
.NETオブジェクトはどMだから大丈夫だよw
そうじゃなくて、そもそも同じインスタンスを、プログラマが管理できなくなるぐらい多くの変数で 参照してるのが間違ってるんだよたぶんw
>>546 それなw
GCの無い言語をやったことがないか
やってはいるが中途半端にしか修めて来なかった者の末路だな
548 :
デフォルトの名無しさん :2015/02/08(日) 20:26:17.79 ID:s109R4ug
分かった。 Nullっぽい挙動させればいいんだ。 そうすればマネージャー作らなくていいし。
単なるObjectDisposedExceptionの予感 初めから見えた答えだったのにずいぶん遠まわしでしたね
WeakReferenceというのもある
低レベルなオイラは話についていけん orz
>>548 nullっぽい挙動って何?
IDisposableを実装するのか、もしくは単にIsValidプロパティみたいなフラグを作るとか?
結局
>>549 ってことだよな
Streamとかといっしょ
554 :
デフォルトの名無しさん :2015/02/08(日) 21:53:59.43 ID:s109R4ug
>>549 ObjectDisposedExceptionとかそういうんじゃないです。
>>552 単にプロパティつけるか、
自分自身をラップするかとか考え中です。
ああ、分かってますよ 初心者には違うように思えるんでしょうね
>>554 もっと具体的な状況がわからないと
他のクラスも参照持ってるのに勝手に破棄して良くて、破棄後のアクセスはバグとしない状況がわからん
開放時にDisposedイベントが起こるやつはあるけど
単にプロパティをつけるって結局IDisposableにのフラグを公開してるだけだし
557 :
デフォルトの名無しさん :2015/02/08(日) 22:52:52.09 ID:s109R4ug
あるターゲットを引数に取ったアクション?イベント?クラスを登録していき、 あるタイミングでターゲットにダメージを与えたりする。 ダメージが致死量になると、destroyが発生する。 後続が同じターゲットをとっていた場合は、 すでに破壊されているのでそのターゲットはnullになっていて欲しいです。 じゃあ、IDisposableというの勉強してみます。
>>557 その用途だとIDisposableは関係無いな。
何したいのか分からんがオブジェクトの破棄じゃなくオブジェクトのプロパティで良い気がする。
それ以前にオブジェクト指向に毒され杉だねw
>>557 破壊された状況=nullという設計をした時点で詰んでる
蓄積ダメージを元にIsDestroyedプロパティを実装するんだな
>>558 毒され過ぎ同意見w
>>557 ゲームみたいなものか
nullにしなくてもターゲットに破壊フラグをつけて、攻撃時に判定すればいい
むしろ、破壊時にそのターゲットを対象にしているアクションをすべて消すほうがわかりやすい
どれにせよ、ゲームに不慣れなオブジェクト思考持ち込みすぎると破綻するぞ
個別のインスタンス作らなくても、何らかのデータ構造で管理出来そうだが。
562 :
デフォルトの名無しさん :2015/02/08(日) 23:35:36.87 ID:4RGx9zBt
大昔に有った”インベーダーゲーム”みたいに、数が少なくなると処理を早くしたいのかな
Reactive Extensions使えよ
良くわかってないのに非同期処理を使うとデッドロックしまくりになりそうw
565 :
デフォルトの名無しさん :2015/02/08(日) 23:56:50.95 ID:s109R4ug
ゲーム作ってみて分かったんですが、 オブジェクト指向を変に意識すると 基礎から先が複雑になってきて、わけわからなくなってきちゃいますね。 オブジェクトが気を効かせてやるべき処理をやってくれんだけど、 手続き的な記述を減らすと逆に分かりにくくなったり。 プログラムって難しいですね。
ゲームだと全く関係ないオブジェクトの数値が計算式に絡んできたりするからきれいに作るのは難しい
全てをオブジェクト指向で作る必要はないし、向いてるところは使ったらいい 臨機応変て言葉知らないか
だーからオブジェクト指向の是非なんて大層は話じゃないってw 単に質問者がまともな設計ができないだけ。 だから何で同じインスタンスをプログラマが管理できないような数の変数で参照する必要があるんだってw そんなの間違いなく質問者がそれが必用だと思い込んでるだけだと断言できる。
569 :
デフォルトの名無しさん :2015/02/09(月) 00:25:23.82 ID:mz/setD5
趣味グラマなんで勘弁してください
神様クラス
(神クラス作っちゃ)いかんのか?
八百万の神クラスとして責務を分割しよう
八百万の神クラスは 基底に神クラスを作って派生、じゃなくて完全に別々の神クラスにしたほうがいいのだろうか?
みんなWeakReference使ってる?
フレームワーク的なライブラリ作ってるんならともかく アプリでWeakReference使うのは設計が破綻してる証拠
>>572 8,000,000万のメソッドを持ったクラス?
>>574 イベントハンドラに寿命短めのオブジェクトを追加しまくるときくらいしか使わない
GCは相互参照になってても効くし
桁間違えたw
>>578 100億万円とか言っちゃう小学生いるよなw
580 :
デフォルトの名無しさん :2015/02/09(月) 08:24:17.80 ID:iJdyGTL3
>>576 やおよろずの神って知らんのか?
教養がないとそのようか反応になるのだな
いやいやw
この場合
>>581 のレスこそが一番教養が無いw
馬鹿の代表だな
>>581 神クラスって知らんのか?
教養がないとそのような反応になるのだな
まあ、教養ある奴はむやみに学歴持ち出さないしな
588 :
デフォルトの名無しさん :2015/02/09(月) 13:47:23.34 ID:jsF3Jw1x
同級生も高学歴だからな
>>586 全知全能の神クラスだね。
八百万の神じゃ全てのものが神になってしまうので意味が違う。
IPv6対応が必要
唯一神はシングルトンにしとけよ
592 :
デフォルトの名無しさん :2015/02/09(月) 19:40:41.41 ID:sBN76GX2
移民族
>>591 abstractクラスになってるんで色々面倒な事が中東で起きてるんだが。
ばっか、あれはabstractじゃなくて仕様が既にバグだろ。無能営業の三枚舌。
だから八百万の神クラスは基本クラスを作って派生させるか 完全に別個のクラスを作るのかが問題なんだって。 仮に基本クラス派生だとするとメンバーやIFは何を持たせるのかが問題。
カンブリア爆発
八百万の神はインスタンスが別なだけで同じクラスだったり
すべてのクラスには神が宿っているから それぞれのクラスを大切にしてあげてねみたいなフワフワした話じゃないのか
神も人間も草木も虫も、基底クラスはObjectなのである
神はObjectなのかなあw
602 :
デフォルトの名無しさん :2015/02/10(火) 12:02:55.08 ID:U2zkTKp9
神は、霊です。宇宙全体におよぶ
面白いと思って書いてんのかこれ? 八百万の最初のあたりで終わった冗談をなにぐだぐだやってんだか
お、おう
(もともとの意味の)ヲタっていうか、コミュニケーション能力が欠如してる奴独特のノリだね。 きっとモニターの前で自分のレスに例の独特の引き笑いをしてると思うよw 気色悪い。
おっとそれ鏡だぜお兄さんw
既に派生クラスに分化したオブジェクトに、簡単な刺激を加えるだけで基底クラスに!
Objectが自分で分化して勝手に育ってくれたらいいのに
STAPオブジェクト
>>610 var aStap = new STAP();
return aStap.Exist;
は、以下のプログラムと等価
return false;
STAPはあります!
もう休め
c#のオブジェクト指向は、あくまでも型定義の拡張だから、Smalltalkのようなメッセージ指向の 使い方をしようとすると破綻する。 それ以前に底辺デジタル土方にオブジェクト指向は要らない。
いるだろ なんぼ底辺でも 今のシステムVB6に置き換えろとか言われたら死ぬ
>>615 VB6のIDEがVisual Studio並みの機能を持てば要らないのでは?
底辺デジドカの作る難解なオレオレOOスパゲティコードをメンテするよりVB6のが遥にマシ。
理想的な結末じゃん
ハンドルの山に埋もれて死ね
C#が向かってるのはSmalltalk的なOOではなくイミュータブルなオブジェクト+関数だろ ある意味COBOL的なスタイルだから「賢いオブジェクト」よりはドカタ向きだよ
オブジェクト指向って機能じゃなくて設計の考え方でしょ 別にVB6でもオブジェクト指向で設計してコード書くことはできる メンテがつらいのはそもそも設計がおかしいか設計書が残ってないか設計と実装が合ってないかのどれか
設計が学べるおすすめの書籍ってないかな 出来れば電子書籍化されてるもので
とりあえず、1ファイル1000行越えず構造化できてれば、なんでもいい
wikiか何かによると、バッファオーバーラン問題で、Cプログラマをサイズ判定付きの言語に移行させるためにC#を作った部分もあると でもサイズ判定→タイプセーフ→タイプセーフなのだ→intとint?は違うのだって、当初の目的忘れてやり過ぎじゃないの? void OpenGate( int gatekey ) { } int? mykey = null; OpenGate( (int)mykey ); こんなことしてコンパイラ黙らせてもnullで実行時エラーが起きるのは同じだし、開発効率悪いだけで何の役にも立ってない OpenGate( mykey ); これで実行時エラーが起きれば十分 mykeyのnullはRPGの旅人がまだ鍵を入手してない状態に相当し、鍵がなくとも旅人は存在しうる OpenGateは鍵が必要な門で、gatekeyが必須という性質 鍵がなければ門を開けようとしてエラーになるのは正しい現象で、その現象は門の性質に由来するもの (int)で旅人が自分でチェックするのは性質の所在がおかしい
・黙らせ方が間違ってる ・DB用に作った機能なので お引取りを。
初心者あるある 自己批判の欠如 釈迦に説法
必ずしも安全でない操作であることをプログラマに意識させることに役立ってるじゃないか お前がそこでイラッとしたのがまさにその証拠だろ? nullがタイプセーフじゃないのは典型的な普通の静的言語の大きな欠陥として昔から言われてることで、 そもそもそこが問題だと思うならHaskellとかガチな静的型に行くと幸せになれる
もっと言うと、NullableはC#じゃなく.NETの機能なんで 煽るなら.NETについて煽った方がよいと思います
未設定を0や-1で代替すると値として0や-1が使えなくなる 日付の未設定を何かの日付で代替すると気持ち悪いことになる 別途未設定フラグを持って分岐処理すると開発効率が悪くなる
>>629 そりゃちょっと無理があるな
C#の構文糖衣で使う前提で#のために導入された機能だ
>>628 必須エラーは正しい現象であって、エラーが起きるから安全なんだよ
まさかエラーが起きないことを安全だと勘違いしている?
>>632 俺がこう思ってるかどうかはともかく、一つの考え方として聞いてくれ
if (x == null) return hoge((int)x); else return null;
例えばこれ、hogeを呼ぶ時点でxがnullでないことは明らかだろ? キャストは辻褄合わせでしかない。
ガチな静的型の関数型だと、このような操作を行うとき
コンパイラが強制するべきなのはif (x==null)のチェックの方だと考える。
そして条件がtrueになった文脈であればxの値はint?ではなくint型として扱うことができ(同じ変数名xを使うかどうかは別にして)、
逆にfalseの文脈ではxの値にアクセスしようとするとコンパイルエラーになるわけ。
634 :
633 :2015/02/14(土) 12:40:52.27 ID:ISQup94G
すまんx==nullじゃなくてx!=nullだな
C#はデフォルトNull禁止にしてほしかった… なんでもかんでもJavaのマネしやがって 後発なんだから不味い場所も分かってただろうに
バカでもデリゲートが理解できるサイトを教えて下さい
c# デリゲート ってgoogleでやる知恵すらないんだったら どこ見てもムダだと思うよ
デリゲートよりC# Func Actionで検索した方がわかりやすいんじゃないかと思う
>>635 ディフォルト値として null より適切な値があるなら提案してみたら?
たぶんそれでミスを減らせると思ってるんだろうけど、 恐らく実際に起こることは、単に発見困難なバグを増やすだけ。 こんな当たり前のことが分からない人って絶望的にセンスないと思う。
>>639 ユーザーに設定強制すればいいじゃない。
配列は基本コレクションで。
>>640 減るよ!減らないわけがない。
コンストラクタで設定し忘れとか想像して言ってるんだったら心配ない
初期値なしで宣言して、コンストラクタが終了する時点までに初期化されてりゃいいんだよ。
パスを辿ってコンパイル時に判断するのも今時ならそんなに難しくないだろう
あとセンスとかいうな臭いスレに帰れ
>>641 > ユーザーに設定強制すればいいじゃない。
class X { }
class Y: X { }
class Z: X { }
X x;
if( ){
x = new Y;
} else {
x = new Z;
}
みたいな奴はどうするのさ?
>>642 ん?何が問題?
今だって、C#もJavaもそれで初期化されてるって判定してくれるだろ。
かたっぽ抜いたらエラーになるはず。
ようは初期化前に変数にアクセスできなきゃいいんだ
>>643 ごめん、お前さんが何を主張してるのかさっぱりわからんわ
要するにローカル変数みたいに未割り当て云々って事かね コンストラクタまでに強制されるとなぁ… 結局確保しておいても割り当てない事もあるのだし 引数が.NETにはじかれるようなオブジェクトは作れないし C++++でunsafeが有るような言語で堅牢性を追求するのもなんだ マネーコードとはいえコンパイラオプションが関の山かね
それでnullによる問題が改善するなら安いもんだと思うがなぁ。 どうせGCだし、多少無駄なコンストラクタが呼ばれることくらい誤差のうちだろう。
Nullを許容するときだけMyClass? hoge; みたいに?つけて宣言するとかだったらよかった。 てかもうScalaとかKotlinとかその他もろもろ デフォルトNull禁止の言語は山ほどあって上手くいってるのに 何を今更…
ヘルスバーグも参照型とnull許容は独立させるべきだったとか言ってたっけ? しかしながら前例が山ほどあっても、C#ほどには流行ってないのが全てかもね ってかいつのまにジどっか行ったんだよ、Moneyコードじゃねーか
デフォルトnull禁止の言語ってイニシャライズでコストかかるオブジェクトとかどうしてんの? いやかけんなって話になるんだろうけどさ 3値論理の論争みたいに収束はしなさそうだな
DataContract使えよ stringの初期値が""とか気持ち悪いわ
Code Contractsの間違いっす
>>635 nullを禁止するのなら元から断たねばならぬ。
NULL撲滅員会の非公認常任理事としては、データベースの実テーブルからNULLを排除するべきだと切に願う。
そーいうのはC#スレ以外でやってくれ せめてRoslynで実装してからまたおいで
NullableってRDBのためじゃないの?
.NetがEntityFrameworkという翼を得た今 DB用でもNullableそんなにいらないかなーと思うことしきり
オプション引数
3値論理は神の論理
そんなnullが嫌いなのか・・・
ぬるぽ
カッ
DB用ならDBNull.Valueが入らないと寸法が合いませんわな
EntityFrameworkでもDBNullなんだっけ?
int?の逆バージョンのMyClass!みたいなのくれ
構造体でも使ってろ
構造体型のtupleが導入されるから、何でもやり放題だよ!
>>662 昔からその手のもんは検討もせずスルーすんのがプロのデフォなので…
他人が考えた自動処理はどっかで行き詰る
特にメーカー品は徹底的にプリミティヴな非連結だよ
ごめん日本語がわからん もう寝るべき
>>666 DataGridViewも非連結で使うんかいな。
>>668 それは使うだろうけど
従来の連結ものと違って非連結と変わらんシンプルなコピーだし
メーカーは今でも1個1個セットかもしれんが
下手するとグリッド使わずテキストボックス並べて単体のスクロールバーに反応して中身入れ替えたりするし
ユーザー側の偉いおっさんが気まぐれで口走ったことを真に受けて クソ面倒臭いだけのアホみたいな作業をして 出来上がった後で当のおっさんもなんでこうしたか忘れてる意味不明な仕様のアプリが 利用者にファックファック言われながら10年運用されるんだよな…
長く使えることが果たして安く上がる方法なのかはよく分からん 10年前に考えた10年後は予想の通りだったろうか
>>671 システムなんて日々増改築だろう。
で、最終的にスパでメンテ不能になってスクラップ&ビルド。
コンパイラーが起動しない
Don't mind.
どんマイケル
ハーレールーーーヤ
C#で動的にLinqを使うにはどのような手段があるでしょうか
式木でggr?
すいません、言葉足らずでした。 式木で自前のクラスライブラリ作って実装は済んでいます。 他に面白い方法などないか聞いてみただけです。
デリゲートとかいうのに関して質問があります delegate string StringHandler(); static void Main(string[] args) { string user01 = ""; string user02 = ""; List<StringHandler> userList = new List<StringHandler>(); userList.Add(delegate { return user01; }); userList.Add(delegate { return user02; }); user01 = "ABC"; user02 = "DEF"; foreach (StringHandler user in userList) { Console.WriteLine(user()); } 続く
これでforeachで取り出されたList内には"ABC"と"DEF"が入ってるらしいのですが 原理が分かりません デリゲートでぐぐると、「メソッドの実行を関節的に行う」 「C言語でいう関数ポインタである」という説明を見ました。 これってつまり { return user01; }); ここはuser01というフィールドの参照をリターンしているという事なんですか? ちなみにUnityなんですが、Debug.Logで出力してもdelegate型名がログウィンドウに 表示されるだけで、中身が確認できませんでした
デリゲートとは直接関係ない 外部変数のキャプチャとか表現される機能 匿名メソッド/ラムダ式で外部の変数が使用される場合、 その変数はメソッドのローカル変数じゃなくてコンパイラが生成するクラスのフィールドになる 簡略化すればこんな感じ class anonymous { public string value; } static void Main() { anonymous _user01 = new anonymous() { value = "" }; StringHandler handler = delegate { return _user01.value; }; _user01.value = "ABC"; handler(); }
>>684 キャプチャ機能は一応、目を通しました
匿名メソッド内で上位スコープの変数が使われている場合、その変数の延命が行われる、とか
あと
string x;
x = userList[0];
とかできないのもよく分かりません
stringにキャストできませんとか言われます
userList[0]で匿名メソッド「{ return user01; }」が動いてuser01の中身(string)を返すのでは・・・?
すみません >user01の中身(string)を返すのでは・・・? 返すのはstring型ではなく、「参照」ですよね? その中身とかどうやって見れるんでしょうか
自分で型宣言してるじゃん > List<StringHandler> userList = new List<StringHandler>(); userList[0]が返すのはStringHandler型であってstring型じゃない StringHandler型つまりデリゲート型は特別に()演算子で委譲されたメソッドを実行できる StringHandler handler = userList[0]; string result = hander();
>>687 アホな質問ですみませんが、delegate使ってメソッド呼ぶのと
普通にメソッド呼ぶのではキャプチャ機能以外で何が違うんでしょうか
>>688 そこのSelectメソッドをデリゲート無しで「普通にメソッド呼ぶ」ってどうやって?
条件毎にSelect1メソッド、Select2メソッド、って書いていく?
>>690 そこもちょっとよく理解できていませんが、
>StringHandler handler = userList[0];
>string result = hander();
当初の目的としてはここが知りたかったんです
今まで
string result = userList[0];
としていましたが、delegate型が帰るので、一度その型で受けてから
hander();と書いてメソッド実行してreturn user01の型であるstringで受ける、
という認識でいいんですよね
もちろん変数を介在させなくても良いけどね string result = userList[0]();
>>692 () ←は、メソッド(匿名メソッド)をコールしているから必要、という事ですよね?
それが分かっていなかったようです。
ありがとうございました
分からない内は確かに分からんよね ただ、デリゲート自体は関数ポインタの親戚な上に、ないとマトモにプログラム組む気起きないぐらい基本的な言語仕様なので、初心者の範疇やな ラムダ式(匿名デリゲート)、キャプチャも慣れるまでイミフだけど、他の言語でも類似機能ある頻出な言語仕様系だからしっかり理解するのオススメ。 キャプチャ理解したら、キャプチャとforeachの仕様変更も理解するとモアベター。ふぁいと
関数ポインタというよりはオブジェクト指向の移譲パターンを簡略化したものと見做すのが本来正しい 実体はオブジェクト参照+関数ポインタに他ならないけど
マルチキャストの立場は
>>695 それは(自分で言ってるように)そう「見做してる」だけ。
正しいって何だよ。
delegateは、「委任する」だから移譲で良いんじゃない。
eventも含めるとさらに混乱するな
仕事で必要になり、visual studio 2013でC#のコンソールアプリを作りました。 期待した機能は問題ないのですが、コンパイルしたプログラムが、 起動させると数秒して再起動(閉じてまた起動する)します。 Hello Worl表示のようなソースでも同様なのですが、普通に1回で起動させるために何か必要なことがあるのでしょうか?
702 :
700 :2015/02/19(木) 05:44:51.30 ID:rPtIBISB
>>700 ソースはこんなんです。
シリアルポートをチェックするだけのものです。
コンパイルしたプログラムを実行させると起動して数秒で再起動します。
703 :
700 :2015/02/19(木) 06:24:34.41 ID:rPtIBISB
自己解決しました。 セキュリティソフトの問題でしたorz
フィードバックはきてたけど当選メールないな残念
おいC# Withステートメント使えないじゃねーか
お前の巣が呼んでるぜ?
オレの巣はドコ?
withが必要なケースって何さ
COBOLみたいに代入並べるんだろ
ブビ厨スレに帰れ 川俣先生がお呼びだぞ
コンボボックスを20個並べたフォームを表示するのに1秒ぐらいかかるんだけど、遅すぎね? なんとか早くならない?
普通にデザイナで貼り付けただけならそれは遅すぎるから別のところが原因だろう 動的に追加してるならSuspendLayoutしてないとかじゃないか
ESP能力がなきゃ答えられないような質問を投げる人はプログラマ向いてないからとっとと辞めた方が絶対にいい。
>>716 真面目に質問レス書いてたら投稿する前に解決してしまうじゃないか
自己解決してやがるw
項目追加に時間かかってんだろ
コンボ20個も同時表示ってのがそもそも疑問だけど
5秒かかるのを2秒にする方法はいろいろあるけどさ
次のプログラムがArgumentExceptionを出すのは何故でしょうか? using (var ms = new MemoryStream()) { using (var sw = new StreamWriter(ms)) { sw.WriteLine("hello"); sw.WriteLine("world"); } using (var sr = new StreamReader(ms)) { Console.WriteLine(sr.ReadLine()); Console.WriteLine(sr.ReadLine()); } }
>>722 デフォルトではReader/Writerが破棄される時
対象のストリームも一緒に閉じるから
ついでにストリーム位置戻し忘れてない?
using使わずに書いた方が、どこが悪いのかがわかって良さそうだな
>>723 writer閉じた後シークすらできなかったので
ストリームが閉じているというのは納得です
ありがとうございました
dynamicを使いまくったプログラムに遭遇しました。 異常に保守性が悪く、バグの特定に苦労しましたが、これを使ってメリットありますか?
エメロンならあります
>>726 動的云々くらいにしか使い道はないんじゃないか、結局実装はobjectらしいのでパフォーマンスも悪い
インターフェイス、抽象クラス、ジェネリック等で解決出来るならそれに越したことはないと思う
ダックタイピングなんてコンパイラ言語でやるこっちゃあないね、foreach?LINQ?…。
729 :
デフォルトの名無しさん :2015/03/06(金) 14:00:42.17 ID:aMLLgYQ/
BinaryFormatterでシリアライズされたデータをもとの型にもどすとき シリアライズしたアセンブリのバージョンにバリバリ依存するので それをなんとか回避するためにdynamic使いまくったことはある まあ設計ミスなんだが
dynamicというか匿名型はローカル変数やprivateメソッドの戻り値とかならあり
未確認飛行の人の検証ではdynamicは(動的コード生成の中では)そこそこ速いって書いてあるけどな
732 :
560 :2015/03/06(金) 20:43:33.84 ID:n9/U+gAr
>>730 > dynamicというか匿名型は
dynamic と匿名型は全然別
頭、大丈夫か?
匿名型を使いたいけど型推論できない変数や戻り値にdynamicを使うってことでしょ? 設計としては全く賛同しないけど意味不明というほどでもない
Dictionary<string, object>の代わりに匿名型をdynamic型として引数で受けるのはあるね
匿名型は禁止でいいよ アホが糞ソース量産するの防止
736 :
LINQer :2015/03/06(金) 22:44:07.67 ID:P4OmJ7lr
えっ
匿名型で糞ソースってどんなの?
匿名型使うような意識高い系はむしろコード綺麗だろ var見たら脊髄反射してVariantだ〜品質が〜とか騒ぎ出す阿呆よりよほど使える
自分で書いておきながら俺もそんな気がしてきた
匿名型をdynamicやobject使って外に出すのはたぶん設計が間違ってる
実装上の都合だから設計は関係ない
発端の730的には外に出してない 単に使い捨てクラス作るのが面倒ってだけっしょ それならいっそTupleでいいじゃんとは思わないでもない
Tuple使うくらいならdynamicの方がまだマシ タプルってのは言語のサポートがある上で int age, string name = GetPerson(); みたいに都度展開して使うもんなんだよ Item1とかアホか
匿名型をdynamicで返すなんて事をやる奴は他人のソースのメンテとかした事ない趣味プログラマだな
未だにOption Strict Offとかやってる土方さんたちもいるんですよ
テストをしっかり書く習慣があればdynamicに実行速度以外の問題はない
C#はもともとstatic strong typingな言語でダックタイプも必要に応じて使えますよっていう言語 ダックタイプが好きな人とそうでない人が 自分の志向を押しつけ合っても無駄
ダックタイピングでやれますよ、っていう点は評価したい C#でそれをやりたがる発想もわからんが
>>746 strong typingを捨てたらリファクタリング(名前変更とか)の精度が落ちるだろう
750 :
560 :2015/03/07(土) 12:46:46.51 ID:jaly8+RG
>>744 > 匿名型をdynamicで返す
そんなことをしたくなったことがないんだが、どんな状況で必要になるんだ?
こういう時だろ <return>結果を格納した配列 0:◯◯の値、1:△△の値</return> たまにやってしまう
プロジェクト作ったら真っ先にMicrosoft.CSharp.dllを含む不要な参照を削るからdynamicで手を抜くという発想自体が無い
メタプログラミングやるけど書くのめんどくさいなぁって時に使うものだからな
メタプログラミングと遅延バインドはあまり関係ないと思うが Dynamic Assemblyじゃないんだから
リフレクションを使うのは一種のメタプログラミングだし、 dynamicは実行時コード生成のルールを完全に自分で定義できる高度なメタプログラミングの仕組みを備えてるよ
分かった分かった Enum.HasFlagもリフレクション使ってるからメタプログラミングだし、dynamic型とDLRの区別をつける必要もないよね
HasFlagの実装はリフレクションでプログラムそのものの情報を使用しているんだから 一種のメタプログラミングと言えるね DLR? DLRなんてもう死語だし言ってもお前にしか伝わらんだろ それに.NETに組み込まれてるのは本来のDLRのごく一部だ ちなみにdynamicの仕組み(DynamicMetaObject/DynamicMetaObjectBinder)はコード生成にDynamicMethodを使うけどアセンブリの動的生成は使わんぞ
一般PGがメタプロするときにdynamicキーワードを使うかどうか(
>>753 )って点について
「メンバー名が決め打ちになるからあまり役に立たない。他のダイナミック○○と混同しているんじゃないか」(
>>754 )つー主張をしているつもりなんだけど
メタデータは読めても文脈は無理なのかな
あとDLRを勝手に殺すな
メタプログラミングの定義次第だなそれは C#に限定した話でなく広義的に見ると コンパイル前のコード生成もメタプログラミングだし C++テンプレート的なメタプログラミングもある 実行時に文字列やDOMなどをコンパイルするのもメタプログラミングだし 実行時にメンバのメタ情報の読み書きを行うのもメタプログラミングだし ビルドプロセスに介入するのもメタプログラミングだし 生成物を後で書き換えるのもメタプログラミングだ dynamicは実行時にメンバのメタ情報の読み書きを行うタイプのメタプログラミングで便利な時があるね
まあ演算子の動的解決なんかはdynamic導入でMethodInfoと比べて劇的に楽になったと思う BinaryExpressionでも一発で出来る例なのが微妙だが
unityで2秒間停止後にシーン切り替えをしたいのですが StartCoroutine(WaitFor(2.0f)); // 一時停止 Application.LoadLevel("game"); // シーン切り替え public IEnumerator WaitFor(float waittime) { // ストップ実施 yield return new WaitForSeconds(waittime); } とすると一時停止せずシーン切り替えされます StartCoroutine(WaitFor(2.0f)); // 一時停止 public IEnumerator WaitFor(float waittime) { // ストップ実施 yield return new WaitForSeconds(waittime); Application.LoadLevel("game"); // シーン切り替え } とコルーチン内にシーン切り替えを持ってくると想定動作になるのですが これはどういう事ですか?理屈か分かりません。
Unityは知らんけどStartCoroutineが非同期処理なんじゃねえの
知らんがな
>>761 > StartCoroutine(WaitFor(2.0f)); // 一時停止
まず自分が書いたコードで呼び出してる関数の説明ぐらい読んだらどうだ低脳
知らないならレスしないでくださいうざいだけです
知らなくても分かる程度の事しか書いてないからなあ…
Action[] actions = new Action[1]{ new Action( () => Baka.Sleep(1000) ) }; Baka.InvoveActionsLater(actions); Baka.StopSomething(); これと同じこと。当然だな
フレームワークに弄ばれてる雑魚PGってほんとダサいよね 最初っからフレームワークに頼り切らないでフレームワーク自作するぐらいの気概と学習意欲がないからそうなるんだよ
同意します
知らんがな
雑魚PGですまん
773 :
デフォルトの名無しさん :2015/03/08(日) 15:34:31.03 ID:rEcSRQEG
とりあえず、サードパーティなんだから個別スレで相談してくれよ、とは思う
>>761 は取り下げさせて頂きます
申し訳ございませんでした
C#プログラマって比較的フレームワークに頼ってないと思うけどな PHPやRubyみたいなWebサイトツクールに比べりゃ遥かにマシ まあUnityは素のC#をほとんど理解してない人が結構いたりしてアレだが
フレームワークに頼らないのは勉強するときだけでいいんじゃないかな。 仕事でそんな事言って作業時間アホほど延ばされたら困る。
仕事なら逆のケースが多い フレームワークのほんの少しの学習コストを嫌って 直接低レベルな実装をしたりアホみたいな社内フレームワークが生み出されたりする
ドメインモデル構築時にフレームワークへの依存性って課題が追加されるのがネックかな
781 :
560 :2015/03/08(日) 20:53:49.52 ID:6GiElWFY
>>777 > C#プログラマって比較的フレームワークに頼ってないと思うけどな
.NETFramework
782 :
デフォルトの名無しさん :2015/03/08(日) 21:13:15.13 ID:z3dYg3sm
c#プログラミングって.NETFrameworkの活用だよなあ
.NET Frameworkは特にアプリの構造を規定しないから、 一般的にいうフレームワークとはかなり違う ASP.NETあたりはフレームワークと呼べなくもないけど
言語だけでどうしろって時代じゃないしな
単なるC#は「プログラムがクラスのMainから実行される」ってだけで フレームワークへの依存は極小だな。 フレームワークの依存が大きいのはおもに Webアプリケーションの乱立フレームワーク
実装レベルだとLINQ他のライブラリ依存がヤバい それで他言語で書けなくなるってことはないけど
C#のライブラリ依存は少なくとも自分が何を使っているのか把握して使っている分だけ大幅にマシ いわゆるWebフレームワークだと、何がどこにあるのか今何を使っているのかどういう仕組みなのかよくわからないけど なんとなくこう書くものらしいし変にさわるとおかしくなるから気にしないでおこうというのが基本だからな
ところでこの馬鹿げたコードを見てくれ
ttps://ideone.com/YJ6bBz Blittable構造体を読み出すジェネリック拡張メソッドをスレッドセーフで実装しながら
パフォーマンスを維持するにはこんな方法しか思いつかなかった
バッファが静的フィールドだとvolatile付けたってlockしないとスレッドセーフに成らんよな?
というかbyte[]インスタンスのTypeHandleはどっから来てるの?__makerefから取れるTypeHandleは
typeof(byte[]).TypeHandleともtypeof(Array).TypeHandleともtypeof(byte).TypeHandleとも異なる…
Type.GetTypeFromHandleUnsafeしてみりゃSystem.Byte[]が返ってくるArrayだけ構造違うの?
>>783 ひとつに限定していないというだけで普通にフレームワーク提供してるだろ、
System.Windows.Applicationとか。
例外としてASP.NETを挙げてるのにWPFでツッコミを入れている人を見たときの悲しさ
>>790 アプリの構造を規定しないとか嘘を言うから突っ込まれたんだろ。
言語の実行基盤としてのフレームワークはあまり規定しないかも知れんが
Webアプリ・GUIアプリ・Windowサービスのフレームワーク
としては規定しまくりだろう
792 :
デフォルトの名無しさん :2015/03/08(日) 22:51:51.87 ID:rJrv12ko
>>790 WPFとFormsも例外だった?例外多いなw
>>791 Webフレームワーク触ったことある?
規定のレベルが違う
まあWPFもFormsも純粋にVしか担当してないし、デザインパターン限定しない程度には高機能だからあまりフレームワーク的じゃないと思うけど
>>793 うーん済まないがThreadStatic使うとnew byteするのと大してパフォーマンス変わらないんだよね
スレッドセーフじゃない静的フィールドならReadInt32を上回る速度が出るんだけど…
inputがMemoryStreamだとInternalReadInt32呼ばれて負けますがね!もはやC++/CLIでも使えって話だけど
他に最適化出来るとこ探したほうが健全だよ
まぁミリ秒単位の話なんでそうなんだけどね 結局unsafeコードなら直にfixedキャスト書いた方が速いし マネージコードならSafeBuffer使えば良いし(AlignedSizeなのが玉に瑕だが Marshal.SizeOfTypeにもthe lack of a suitable generic constraint.なんて書かれてるし MSILで出来る事がC#で書けないのがなんかもにょる.NETの為の言語じゃねーのかよって感じで
801 :
560 :2015/03/09(月) 06:46:27.93 ID:R+XoG9o+
>>794 レベルが違うだけで、フレームワークとしての仕組みは同じ
仕組み理解できない奴には全然違うものに見えるのかもしれないけど w
>>796 WPFもFormsも、イベントドリブンなアプリケーションの構造とその根幹であるイベントループを提供しているがな。
それはビュー層以外の仕事なの?
あえてMVCのどれに分類されるかと言うなら、アプリケーションのメインイベントループを 持つクラスはCだろうな。 ただ、設計論としてのMVCはプログラマ自身が設計するクラスをどれに分類するかを 考えるだけで、フレームワーク自体はその背後に存在するとみなすのが普通じゃないかな。 たとえばMVVMでも、VとVMのバインディングを誰がやっているのかなんて考えないように。
MVC厨はMVCしか知らないから 他の考えがあるという認識が無く すべてをMVCに当てはめようとする
そういう奴に限ってMVVMがWPFの事情に依存している以上に MVCがSmalltalkのGUIフレームワーク特有の事情に依存した仕組みであることを知らない
VS2013のアドイン開発ってここで聞いても大丈夫? やってる人居ませんか?
VS2013の拡張として自前で簡易的なキーマクロ作りたいんですが、 キー入力を取得するにはどうすればいいんでしょうか? フォームアプリなら分かるんですが、DTEからはどうすればいいのか、分からない、、
vsのアドインってどうやって作るの?
EnvDTEとかいうビチクソCOMは撤廃されて C#でMEFのコンポーネントとして作るという超モダンな仕組みに置き換わった
811 :
デフォルトの名無しさん :2015/03/11(水) 00:19:41.57 ID:53MZ6hm2
.netにはクールなsshクライアントクラスは無いのですか?
813 :
デフォルトの名無しさん :2015/03/11(水) 04:17:10.81 ID:s98Ts5Op
VS2013を使ってます。 windowsフォームアプリケーションで、効果音を鳴らすためにDirectSoundを 使いたいんですが、usingに何を定義してやればいいのかわからないんですが どなたかわかりますか VS2012以降はDirectXがWindows SDKに統合されたと聞いたので DirectX SDKをインストールしないでDirectSoundを使いたいです。
System.Media.SoundPlayer
>>811 アドイン(COMでDTE系使うやつ)は廃止予定で非推奨になっている
今は拡張機能といって
>>810 のやり方で作る
覚えておけロートル
今はこんな便利になっているんだな。 その昔。vsじゃなくて自前アプリ用だけど、 ほとんど同じことをリフレクション使って自力実装していたよ
817 :
デフォルトの名無しさん :
2015/03/11(水) 10:23:32.79 ID:33mlLn1H