トップページ⇒tech
1001コメント323KB

C#, C♯, C#相談室 Part86 [転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2014/12/27(土) 00:37:39.56ID:CxSn36ZM
■Visual Studio 2013 Express(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

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

■前スレ
C#, C♯, C#相談室 Part85
http://peace.2ch.net/test/read.cgi/tech/1412298752/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
0002デフォルトの名無しさん2014/12/27(土) 14:06:36.30ID:Cc0RXd7d
一乙
0003デフォルトの名無しさん2014/12/27(土) 15:54:09.50ID:tQpEEr8J
>>1乙
0004デフォルトの名無しさん2014/12/27(土) 18:35:29.91ID:GhEDQNHO
うんこみたいな�C
0005デフォルトの名無しさん2014/12/27(土) 19:22:08.64ID:Iiyigm9/
>>4
DQN
0006デフォルトの名無しさん2014/12/28(日) 21:59:57.74ID:/g9XUAft
引数の型・関数がまったく同じで、中身が違うクラスがあるのですが、
まとめて扱うことは可能でしょうか。

たしか、<T> ってのが、
ネットのサンプルにあったのですが、
使い方がよくわかりません。

addcomponent<ClassA>().init(int,float,"String");
addcomponent<ClassB>().init(int,float,"String");
  ↓
addcomponent<T>().init(int,float,"String");

こんな感じにまとめたいです。
0007デフォルトの名無しさん2014/12/28(日) 22:03:54.64ID:3UhPoklt
>>6
違う処理だけabstractメソッドにしてClassA, ClassBそれぞれで別の実装を割り当てればまとまるかもね
0008デフォルトの名無しさん2014/12/28(日) 22:06:04.30ID:hI2mx2NI
>>6かinterfaceを付けてwhere T:Hogeで制約を指定すればいいと思うけど何がやりたいのかいまいち分からん
0009デフォルトの名無しさん2014/12/28(日) 22:06:44.69ID:hI2mx2NI
おっと>>6じゃなくて抽象クラスね
0010デフォルトの名無しさん2014/12/28(日) 22:09:22.41ID:PN+Ts2DK
>>6
意味がわからないから何がしたいのか目的を教えて
クラスとか引数とか関数とか一般的な表現じゃなくて、
何を作ろうとしててどういうことをしててどこで詰まってるのか
0011デフォルトの名無しさん2014/12/28(日) 22:10:21.56ID:3UhPoklt
見た感じで言うと

ClassA ClassB が BaseClass から派生していて

AddComponent(BaseClass component) こんなのがひとつあれば十分そうな見た目だけどね

使うときは

AddComponent(new ClassA(1, 1F, "String"))

って感じで
0012デフォルトの名無しさん2014/12/28(日) 22:15:04.90ID:hI2mx2NI
元はT AddComponent<T>() where T:new()なのか?
でもnew()制約知ってて型制約知らないってことはないよな
0013デフォルトの名無しさん2014/12/28(日) 22:29:36.54ID: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
0014デフォルトの名無しさん2014/12/28(日) 22:34:12.29ID:3UhPoklt
>>13
多分プロパティに()つけて呼び出してるのが間違ってるんじゃないの

public IEnumerable<T> Get(){ return _Targets; }

こうじゃダメなの
0015デフォルトの名無しさん2014/12/28(日) 22:40:27.16ID:eacLnmbF
>>14
申し訳ない、プロパティを()で読んでるのは転記ミスでござる。
関数で受け取れば渡せるが、プロパティで受け取ると渡せない。
何が起こっているの??

test2(new IEnumerableTest<Inheritance>.Get) //NG
test2(new IEnumerableTest<Inheritance>.GetFunk()) //OK
0016デフォルトの名無しさん2014/12/28(日) 22:49:28.57ID:eacLnmbF
すまん、やっぱどっちもNGだ
0017デフォルトの名無しさん2014/12/28(日) 22:57:31.63ID:d8VFVXkn
お前は何を言っているんだ
0018デフォルトの名無しさん2014/12/28(日) 23:02:31.11ID:m3FY95E3
一度深呼吸して
コード片じゃなくて完全なコードを>>1のideoneにコピペしてみて
0019デフォルトの名無しさん2014/12/28(日) 23:08:30.43ID:eacLnmbF
つまりだ、
test(new Inheritance[] { }); //OK
test((IEnumerable<Inheritance>) new Inheritance[] { }); //NG

ってことなんだ。
俺は引数に何のインターフェースを使えばいいんだ?
0020デフォルトの名無しさん2014/12/28(日) 23:08:55.36ID:eacLnmbF
>>18
少々お待ちください。
0021デフォルトの名無しさん2014/12/28(日) 23:22:05.58ID:eacLnmbF
http://ideone.com/Mkn9IN

ビルドターゲット4.5だといけたけど、
3.5だとダメだった。そーいうこと??
0022デフォルトの名無しさん2014/12/28(日) 23:26:25.33ID:m3FY95E3
そういうことだな
ジェネリックの共変性と反変性 を調べてみて
0023デフォルトの名無しさん2014/12/29(月) 00:53:11.30ID:GGNnGKbX
場所のキメ打ちではなくexeファイルと同じフォルダーに入っているtxtファイルを読むようにするにはどうすれば言いのですか?
0024デフォルトの名無しさん2014/12/29(月) 01:05:40.29ID:aPtCKv3Y
>>23
http://dobon.net/vb/dotnet/vb6/apppath.html
0025デフォルトの名無しさん2014/12/29(月) 01:15:04.67ID:GGNnGKbX
>>24
アリガ�d
0026デフォルトの名無しさん2014/12/29(月) 02:21:26.92ID:7EAdwxrq
>>10
すみません…

Unity でシューティングゲームの敵データを、
CSV から読み込もうとしています。
Unity質問スレからこちらに誘導してもらいました。

CSV は1レコードの前半は共通仕様、
後半は読み込むデータ形式は同じですが、
後半データは敵の行動パターンごとに使い方が異なります。

体力や初期位置など共通して使うものは、
共通コンポーネントで持ちました。
差異が発生する後半部分(その敵固有の処理)は
同じデータ形式で取り込むのですが、
使い道や処理が違うので
取り込み先が違うコンポーネントになっている、という感じです。

コンポーネント名だけ書き換えて、
まったく同じ読み込みソースをコピペしてるのが、
スマートじゃないなと思いました。

void yomitori ( GameObject go, Type classType, 引数いっぱい ){
  go.getComponent<classType>().init(引数いっぱい);
}

こんな感じにクラス(コンポーネント)を指定できるようにして
まとめたいなと思いました。
0027デフォルトの名無しさん2014/12/29(月) 02:26:56.53ID:7EAdwxrq
ジェネリックってやつをやればいいんでしょうか
0028デフォルトの名無しさん2014/12/29(月) 03:13:02.84ID:lr1HMbxN
>>26
既に他の人が判りやすく説明しているけどに共通部分をまとめた基底クラスを作ってAとBがその基底クラスを継承する

コンポーネントを追加するときは作成したコンポーネントインスタンスをAddComponent()の引数として渡して
コンポーネントを取得するときはGetComponent<基底クラス>()とすればいい
0029デフォルトの名無しさん2014/12/29(月) 09:40:21.83ID:7EAdwxrq
>>28
出来ました!
継承を実践で使ったことがなかったので
まったく考えてませんでした。
ありがとうございます!
0030デフォルトの名無しさん2014/12/29(月) 09:44:40.00ID:tirsBVZi
>>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行目);
0031デフォルトの名無しさん2014/12/29(月) 14:46:23.53ID:nnY+ZM/3
>>29
解決したコード書いて
0032デフォルトの名無しさん2014/12/30(火) 22:22:27.97ID:WbPDupBZ
有限状態マシンを使っているときに特定の状態に変化したときに呼ばれたい関数をすっきりと書くにはどのように記述するのがベストでしょうか

 void OnStateEnter () {
 
 }

という関数を特定の状態の時に呼び出してほしい用に記述したい
Attributeか何かをうまく使って指示できませんかね

[StateIs(Running)]
 void OnStateEnter () {
 
 }

こんな感じで
0033デフォルトの名無しさん2014/12/30(火) 23:12:51.79ID:dxBK7ujR
yield使う
普通にまっすぐ書いたコードからステートマシンを自動生成してくれる
0034デフォルトの名無しさん2014/12/30(火) 23:32:31.80ID:dxBK7ujR
あとは、どこかにデリゲートとして次に呼び出してほしい関数を登録しておく方法がある
登録先によってStateパターンとか継続渡しとか呼ばれる方法だね
列挙体かなんかをキーにしてデリゲートをディクショナリに登録しとく手もあるけど、
単純に処理の振り分けに使いたいだけなら冗長
0035デフォルトの名無しさん2014/12/30(火) 23:51:20.16ID:ZXsgTzJD
これをLinqに直すとどこまでスマートになるのか教えてください

for (i = 0; i < 100; i++){
list.Add(i);
}
0036デフォルトの名無しさん2014/12/31(水) 00:05:13.74ID:UsUXYvH4
>>35
list = Enumerable.Range(0,100).ToList();
0037デフォルトの名無しさん2014/12/31(水) 01:34:01.19ID:hZ6ACt+c
>>36
ありがとうございます。天才ですね
0038デフォルトの名無しさん2014/12/31(水) 01:37:47.29ID:hZ6ACt+c
>>37
すみません、これだと型がintになっちゃいますよね。
iがなんかのクラスの場合はどうやるのですか?
0039デフォルトの名無しさん2014/12/31(水) 02:59:13.00ID:0KovdbRl
Range(0, 100).Select(i => new Hoge(i)).ToList();
0040デフォルトの名無しさん2015/01/01(木) 11:23:54.13ID:vAAHlH5Q
partial enumを何とか実現できないでしょうか
enumの定義そのものはクラスライブラリ側で行って、
中身だけアプリケーション側で定義したい
文法的には不可能ですが似たような機能を実装できないでしょうか
0041デフォルトの名無しさん2015/01/01(木) 11:25:47.35ID:iDo75q0v
何がしたいのか全く分からん
0042デフォルトの名無しさん2015/01/01(木) 11:28:34.71ID:dlaa3g2E
ライブラリ側
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); }
0043デフォルトの名無しさん2015/01/01(木) 11:32:29.49ID:aZRx2Zh3
IDE上の話ならTypeConverter.GetStandardValuesとか
0044デフォルトの名無しさん2015/01/01(木) 11:37:16.67ID:2oZHmgl+
そもそもEnumって定義側で値を制限するための機能だろ
無制限に外部で作らせてどうする
0045 【大吉】 【748円】 2015/01/01(木) 11:43:03.89ID:g7S+XSL4
複数のpartialブロックを作った場合、
数値の割り当てどうするという問題が
0046402015/01/01(木) 11:50:50.94ID:vAAHlH5Q
有限状態マシンを提供したいんですよ
Appelaration<State, Trigger> fsm;
みたいな。
どういうステートがあるかはアプリケーション側で定義するので
partial enumがどうしても必要なのですがいいアイディアが思いつきません
0047デフォルトの名無しさん2015/01/01(木) 11:54:38.11ID:2oZHmgl+
Enumは拡張を意図してないんだから
拡張を意図した構成要素を使えばいいだけだろが
そう、クラスだ
あほなことを止めろ
0048 【大凶】 【1104円】 2015/01/01(木) 11:57:00.72ID:g7S+XSL4
有限状態マシンってよく知らんけど、
Stateパターンじゃダメなん?
これなら、状態の基底クラス作っとけばユーザー側で継承して
任意に状態クラス作ればいいし
0049デフォルトの名無しさん2015/01/01(木) 11:59:42.03ID:JpKW+t0f
stateを列挙体=定数でしか定義できないって不自由じゃん
あとpartial class自体アセンブリを超えて分割できる物じゃないぞ
0050デフォルトの名無しさん2015/01/01(木) 12:01:02.14ID:aZRx2Zh3
とりあえずWFでも研究したら
0051デフォルトの名無しさん2015/01/01(木) 13:47:07.08ID:iDo75q0v
状態を増やしていくっていうのはもうスクリプティングの段階に入ってるから
そこでクラスを一つ一つ継承するっていうのは記述に対して実入りが少なすぎる
0052デフォルトの名無しさん2015/01/01(木) 14:24:36.87ID:iDo75q0v
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されてるかどうかの整合性チェックも一応リフレクション使って実装しときたいな
0053デフォルトの名無しさん2015/01/01(木) 14:34:57.74ID:iDo75q0v
Stateのenumはデフォルトのただの連番っていう約束を決めておけば
ライブラリ側はenumの具体的な値であるintに対して処理すれば
全てのenumに対して使えるからそれでいいんじゃないかと思った
0054デフォルトの名無しさん2015/01/01(木) 19:33:21.08ID:dlaa3g2E
文字列でいいよそんなもん
0055デフォルトの名無しさん2015/01/01(木) 19:37:46.81ID:iDo75q0v
せっかくC#使ってインテリセンスのサジェストを受けられるのに
文字列とか無いわw
0056デフォルトの名無しさん2015/01/01(木) 19:40:12.35ID:aZRx2Zh3
String型だとseが効かないって誰が決めたんだよ
0057デフォルトの名無しさん2015/01/01(木) 19:41:24.67ID:aZRx2Zh3
なぜSE…
上で書いた通り方に関係なくTypeConverterを使えばIntelliSenseは効く
0058デフォルトの名無しさん2015/01/01(木) 19:48:03.68ID:dlaa3g2E
列挙体にしたところで結局実際の値はアプリケーションが勝手に決めるんだから
インテリセンスは自動的には効かないだろ
どっちにしろ定数クラスに纏めるなら値が数値だろうが文字列だろうが使い勝手は一緒
でも拡張性を持たせるなら文字列の方が管理は容易だ
0059デフォルトの名無しさん2015/01/01(木) 20:19:41.93ID:iDo75q0v
>>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して登録するようにすることで
初期化の負荷も分散できるようにするかな
0060デフォルトの名無しさん2015/01/01(木) 20:23:00.17ID:iDo75q0v
なんか間違いまくってるな
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メソッドをリフレクションで呼び出して登録するようにすることで
初期化の負荷も分散できるようにする
だわ
0061デフォルトの名無しさん2015/01/01(木) 20:59:03.53ID:dlaa3g2E
読みづらすぎ
命名についてはとやかく言うつもりはないが、
呼び出し先の処理と状態遷移の定義が分離されてていいんなら、もう状態遷移表を外部ファイルか配列で持つわ
コード中に書くんであれば、コードとそれに関連する設定はまとめた方が読みやすいし修正ミスが防げる
>>32みたいに属性使うとか規約ベースでメソッド名使って定義するとかね
0062デフォルトの名無しさん2015/01/01(木) 21:05:29.97ID:iDo75q0v
そんなこと言ったって一つが膨大になる場合は幾つかに分けないとしょうがないだろう
そうでなければ一つにまとめりゃいいし
一つで済むならenum連番を拒む理由もないはず
enum連番なら配列に入れられるからパフォーマンスも良いし
0063デフォルトの名無しさん2015/01/01(木) 21:31:21.13ID:dlaa3g2E
>>62
1つに纏めるっていうのは状態遷移表を一つに纏めるって意味じゃないぞ
[State(A), Trigger(B), Trigger(C)]
void OnA() { ... }
[State(B), Trigger(A)]
void OnB() { ... }
こんな風に処理と設定をセットにするってこと
設定は設定、処理は処理でまとめるよりもこのやり方の方が良いかどうかは場合によるが、言いたいのは
・設定は設定でまとめるんならコード中に中途半端に混ぜないで外部ファイルに出せ
・コード中に設定書くなら処理と纏めろ
ということ
0064デフォルトの名無しさん2015/01/01(木) 22:06:23.87ID:MUP8EK3k
コンソールアプリケーションを他のアプリのデバッグ用に起動したいのですが、
方法がわかりません。

こんなのをイメージしているんですが。
var console = new DebugConsole(new MyScript());

本体のアプリを実行しながら、コンソールを起動して、
コンソールからの入力をMyScriptに渡して、
本体のアプリとやり取りした結果をコンソールに返したいのです。
0065デフォルトの名無しさん2015/01/01(木) 22:14:19.48ID:aZRx2Zh3
Process.StandardOutputとかそのあたり
0066デフォルトの名無しさん2015/01/01(木) 22:20:27.58ID:dlaa3g2E
他のコンソールアプリ(MyScript?)と本体アプリの間でやりとりをしたいってこと?
>>65の言うように標準入出力使うのが筋だけど結構面倒でまどろっこしいよ
やりとりの内容によるが、複雑な制御が必要ならIPC使ったほうがいいかも
0067デフォルトの名無しさん2015/01/01(木) 22:27:48.27ID:MUP8EK3k
Process.StandardOutputですが、ちょっと調べてみます。

例えば、コンソールで
get "test" とかやると
本体アプリのdictionaryインスタンスからtestを取得して返すみたいなことをしたいんです。
0068デフォルトの名無しさん2015/01/01(木) 23:22:14.46ID:dlaa3g2E
デバッガ使わないのは本体を止めたくないからだよな?
なら標準入出力使うよりIPCの方がいいよ
標準入出力だと本体側で入力待ちのための専用スレッドが必要になったりするし
全部文字列でやりとりしなきゃいけないからコマンドの解析などは全部本体側で実装することになってしまう

自分でスレッド立てるのも本体にデバッグ用の処理を全部書くのも嫌でないなら、
コンソールアプリ使うのはやめてAllocConsoleで本体側から直接コンソールを表示することもできる
これならプロセス間のやりとりはいらない
0069デフォルトの名無しさん2015/01/01(木) 23:41:37.70ID:MUP8EK3k
はい、本体は止めたくないです。

本体プログラムの内部でluaインタプリタが動いていて、
デバッグのコンソールからもそのインタプリタに入力を送れるようにしたいです。

IPCについても調べてみます!
0070デフォルトの名無しさん2015/01/02(金) 11:37:09.11ID:+yHd1Kpb
>>63
別に設定だけでもC#で書けばインテリセンスの加護は受けられるし可読性も高くできる
外部に書き出すメリットはないよ

処理と設定を一緒にする場合もクラスと属性なんて言う冗長性の高いものじゃなくて
enumとラムダ式にした方がずっと可読性が高く書きやすく出来る

スクリプティングの段階に入ってもC#から離れなければメリットは大きいよ
0071デフォルトの名無しさん2015/01/02(金) 11:41:48.09ID:UoXQYS7H
設定を外部に書き出すメリットはないって、世の中の99.99%のアプリを敵に回したな
0072デフォルトの名無しさん2015/01/02(金) 11:51:03.67ID:+yHd1Kpb
設定ファイルにしたって型安全で表現力が高く文法的に一貫している方がメリットは大きいやろ
静的言語をスクリプティングに適用するノウハウが浸透していないだけだと思う

まあユーザーがいじることを想定した設定なら外部に書き出すこともあるだろうけど
そんなこと出来ても喜ぶのは変態だけで普通はOption画面からGUIで設定するわけだしな
0073デフォルトの名無しさん2015/01/02(金) 12:34:57.51ID:MtiBaX+Y
設定を外部に持たずにどうやって保持するんだろ?
0074デフォルトの名無しさん2015/01/02(金) 12:37:56.70ID:3oVUtplv
スクリプトもC#で記述はありだな
0075デフォルトの名無しさん2015/01/02(金) 12:40:50.06ID:5Yq30nMG
元の質問からすると 63 で正しいと思うけど、遷移表って一か所で読みたくならない?
外だしにしといて悪くはないと思うよ。GUI 自動で作るとか
0076デフォルトの名無しさん2015/01/02(金) 12:46:10.56ID:UoXQYS7H
>>63を実装するなら遷移表も自動生成すればいいじゃん
どうせリフレクションで情報収集するんだからついでに簡単にできるでしょ
0077デフォルトの名無しさん2015/01/02(金) 12:55:28.12ID:5Yq30nMG
遷移表は作る前提でみんな話してると思うけど?
0078デフォルトの名無しさん2015/01/02(金) 13:00:33.89ID:UoXQYS7H
遷移表は自動生成することにして、遷移表を編集する=>>63の属性を編集する
ということにすればいいだろう
表作るんなら>>63みたいなスタイルはミスを生みやすくなるだけだから外部ファイルでいいと思う
DRYだよ
0079782015/01/02(金) 13:06:53.32ID:UoXQYS7H
訂正
表作るんなら→手作業で表作るんなら
0080デフォルトの名無しさん2015/01/02(金) 13:10:06.15ID:JU2xwz8d
状態管理は外に出せるけど、対応処理の管理は簡単に出来るの?
今、VS Express2013のC#で作っているけど
イベント登録の"+="の使い方が解らなくて、一つのクラスで作っている。

"using"の使い方次第なのかな?
0081デフォルトの名無しさん2015/01/02(金) 13:15:33.00ID:+yHd1Kpb
自動生成ったってまずどこかに手で書かなきゃいけないんだから

可読性を上げるためにはひと目で見て把握できる範囲を広げるために冗長性を下げる必要があり
また冗長性が低くないと書いてて嫌になってしまうという問題もある

書いて読んで修正するっていう作業をスムーズにしてスクリプティングの効率を上げるには
属性やなんかで冗長に書いてからプログラムで表を自動生成するのではダメだよ
読んで即編集できるように冗長性の低いフォーマットで記述されている必要がある
C#ならインテリセンスの加護を受けて安全で速く書ける

>>73
編集可能にするにしてもデフォルト設定はどこかにガリガリ書かなきゃいけないわけで
人間が手で書ける形式の設定ファイルを外出ししてそれでデフォルト設定も書くか
デフォルト設定をC#で書いてGUIで編集することにして
人間が読み書きすることを想定しないファイルフォーマットで保存するかといった程度の違いの話だな
0082デフォルトの名無しさん2015/01/02(金) 14:19:29.57ID:h8FNsbbo
まだやってる
馬鹿か
0083デフォルトの名無しさん2015/01/03(土) 13:04:04.79ID:xZbaMjzc
struct(構造体)を作ってnewでインスタンス化するとエラーが出た
↓
コンストラクタを書くとコンパイルが通った


これって構造体にはデフォルトのコンストラクタがないという事ですか?
クラスと違って必ずコンストラクタ書かないと駄目なんですか?
0084デフォルトの名無しさん2015/01/03(土) 13:08:04.43ID:j/TgmM2H
publicなデフォルトコンストラクタはむしろ強制的に作られる
具体的にどう書いたらエラーになったの?
0085デフォルトの名無しさん2015/01/03(土) 13:32:40.25ID:xZbaMjzc
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);
}
↑★通った


こんな感じです
0086デフォルトの名無しさん2015/01/03(土) 13:35:18.49ID:0VTOA39G
coOrds.y = 10;

↑こうやってyのほうも初期化してやれば大丈夫。
0087デフォルトの名無しさん2015/01/03(土) 13:41:01.42ID:xZbaMjzc
ありがとうございます。
クラスと違って必ず全フィールド初期化する必要があるんですね
0088デフォルトの名無しさん2015/01/03(土) 13:41:51.03ID:0VTOA39G
そうそれ。もはや定番のトラップともいえる。
0089デフォルトの名無しさん2015/01/03(土) 13:44:08.10ID:W1+QD1Kd
自動実装プロパティーを構造体のコンストラクターで初期化する時も
明示的にデフォルトコンストラクタを呼ぶ必要があるけど、書くたびにこんなの自動でやってくれよと思う。
0090デフォルトの名無しさん2015/01/03(土) 14:03:25.84ID:EzY/doXv
構造体のプロパティに初期値つけたいとき
get setで細工するのって悪手なんだろうか

public struct Hoge
{
private int _number;
public int Number { get { return _number + 10; } set { _number = value - 10; } }
}
0091デフォルトの名無しさん2015/01/03(土) 15:01:28.05ID:C22WgX+v
Blittableな構造体はポインタ取ったりマーシャリングなしでアンマネージコードとやりとりしたりできるから
見た目と中身が一致してないとトラブルの元になる可能性がある
クラスの方が無難
0092デフォルトの名無しさん2015/01/04(日) 00:00:53.54ID:Knmlwtn7
>>85
これってunityのみの話?

デフォルトコンストラクタのインスタンス作成で、int型は0に初期化されるよね?
0093デフォルトの名無しさん2015/01/04(日) 01:08:25.59ID:+rZjO+Yw
そもそもエラーって書いてある方は文法的におかしいので意味不明だった
0094デフォルトの名無しさん2015/01/04(日) 01:12:49.99ID:+tHlT8u4
>>90キチガイは去れ
0095デフォルトの名無しさん2015/01/04(日) 01:17:48.81ID:+rZjO+Yw
諦めてファクトリメソッド使えば済む話なのに
0096デフォルトの名無しさん2015/01/04(日) 04:52:16.18ID:BYramH0M
>>90
悪手じゃないと思える方が不思議。
0097デフォルトの名無しさん2015/01/04(日) 11:35:01.06ID:VztenZHc
>>90
(´・ω・`)いろんな人がいるわね
0098デフォルトの名無しさん2015/01/04(日) 11:54:41.15ID:V2qD8ALg
俺の記憶では
structの全てのフィールドを埋めないといけないのは
structの自前定義コンストラクタの中とかout変数の中とかだけじゃなかったか
0099デフォルトの名無しさん2015/01/04(日) 11:59:37.45ID:pmYq5Gj4
ローカル変数でnewなしで使う場合とかも
0100デフォルトの名無しさん2015/01/04(日) 17:21:16.29ID:BwoXMWJD
Process特定するときにPidやProcessNameやウィンドウタイトル以外を使って特定する方法ってありますか?
0101デフォルトの名無しさん2015/01/04(日) 17:36:24.77ID:+rZjO+Yw
ウィンドウがある前提なら位置とか
0102デフォルトの名無しさん2015/01/04(日) 18:07:18.39ID:SGTkLy8I
クラス名、スタイルとか
0103デフォルトの名無しさん2015/01/04(日) 18:10:21.89ID:Rixhug78
>>90
年明け一発目に笑ったのがこれ
会社いきたくねーなー
0104デフォルトの名無しさん2015/01/04(日) 18:15:58.07ID:XBKS/x+u
仕事でこんなコード見たら切れるが、個人なら多少はね
0105デフォルトの名無しさん2015/01/04(日) 18:40:07.66ID:W7Dn89Wi
そんなに変かなとおもうけどね。
例えば、Windows FormのSizeとClientSizeなんか>>90と似たような実装だろう。
0106デフォルトの名無しさん2015/01/04(日) 18:45:20.74ID:+rZjO+Yw
会社!今日一度たりとも口にせず、目にも入れなかったのに!この単語!
0107デフォルトの名無しさん2015/01/04(日) 18:55:47.56ID:SGTkLy8I
>>105
実装こんなんだったよ
ちなみにControlクラスね
ttp://ideone.com/wLGaud
0108デフォルトの名無しさん2015/01/04(日) 19:00:01.67ID:BYramH0M
>>105
初期値が基点として何らかの意味を持っているなら分かる。即値は勘弁して欲しいが。
上記のような意味が無く初期値を与えるためだけの実装ならあり得ない。誤解を招くだけ。
0109デフォルトの名無しさん2015/01/04(日) 19:01:01.11ID:XBKS/x+u
外から設定された値をそのままで覚えておかないと後からその値使おうとした時にスパゲッティになるよね
0110デフォルトの名無しさん2015/01/04(日) 19:13:30.05ID:pmYq5Gj4
Control.AutoScrollPositionの話はやめるんだ
0111デフォルトの名無しさん2015/01/04(日) 19:51:19.43ID:F+SkZ8NF
>>108
確かに初期値を与える目的ならありえんね。
>>90がそう書いてるのを読み飛ばしてたよw
0112デフォルトの名無しさん2015/01/04(日) 23:08:11.87ID:zeAkgQcd
Entity Framework 6.0についてる?のか

最新のEntity Data Model DesignerをVisualStudio2010のExpressで使うことは可能でしょうか?
ライブラリはとって来て動いてるけど、デザイナーは古いままのようで、
どこで入手するのかすら分かりません

方法知ってる人がいたら教えてください
0113デフォルトの名無しさん2015/01/04(日) 23:14:59.80ID:pmYq5Gj4
MSがいちいち古いVSにバックポートするとも思えないし、ましてやExpress
0114デフォルトの名無しさん2015/01/05(月) 00:24:57.21ID:CcrdyzYe
リストに入れたクラスインスタンスのフィールドにアクセスするにはどう書けばいいですか?

�@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の値も見れます。
0115デフォルトの名無しさん2015/01/05(月) 00:27:41.19ID:Y6BCcXgq
ArrayList使うの止めてList<Hoge>使いなさい
あなたが参考にしている文献は古いので新しいのを探しなさい
0116デフォルトの名無しさん2015/01/05(月) 00:40:39.01ID:sgWfPCE2
MSDNのリファレンスもそうだけど
参照するクラス名がハイパーリンクになっていないのに
クラスの名前空間が書かれていないとイラっとする
0117デフォルトの名無しさん2015/01/05(月) 00:42:18.63ID:Y6BCcXgq
あと

>Hoge thisClass = testlist[0];

これコンパイル通らないだろ。
質問するときは下手に省略しない。
理想的には、エラーが出る最低限のコードをどこかに貼る。

http://ideone.com/zC9Ig5
0118デフォルトの名無しさん2015/01/05(月) 01:33:11.62ID:0eh7fjHk
>>114
継承について勉強すべし

ArrayListはHogeの基底クラスであるObject型で格納するので、
thisClass = testlist[0]; のthisClassはObject型。
Object型に x というメンバーは存在しないので当然アクセス不可。
ただ実体としてはあくまでもHogeクラスなので、デバッガでは見れるようになっている。

なので、Hogeクラスにキャストすれば良い
Hoge thisClass = (Hoge)testlist[0]

とはいえ、ArrayListはジェネリック対応までの古いクラスなので、
>>115 氏と全く同意見。
0119デフォルトの名無しさん2015/01/05(月) 02:21:12.29ID:CcrdyzYe
>>117
ありがとうございます。
すみません、気をつけます・・・。

>>118
ありがとうございます。
Listに直し、キャストも試してみます
0120デフォルトの名無しさん2015/01/05(月) 03:18:54.29ID:CcrdyzYe
追加ですみません、入れる型が不明な時、もしくは複数の型を
一つのリストに入れたい時はList<T>は使えないですよね?
0121デフォルトの名無しさん2015/01/05(月) 05:25:09.73ID:kYxtbyc6
そんな構造が必要ってケースは99.9%ぐらい設計がまずいので
そんな構造が不要になるように考える
0122デフォルトの名無しさん2015/01/05(月) 09:16:26.05ID:+R2flTDU
>>112
VS2010でDbContext使いたい場合はEF5にしとけ
0123デフォルトの名無しさん2015/01/05(月) 10:06:37.33ID:0eh7fjHk
>>120
型が不明ってどんな場合?コードを書く時点で何を格納するか決まってるはず。
複数の型も怪しいけど。

基本的には同じ型、もしくは同じ基底クラスから継承したクラスを格納する。
List<基底クラス>
0124デフォルトの名無しさん2015/01/05(月) 11:38:55.66ID:FTlsmlFT
List<object>
0125デフォルトの名無しさん2015/01/05(月) 12:00:57.25ID:QplnPHvB
基底すぎぃ
0126デフォルトの名無しさん2015/01/05(月) 14:58:15.89ID:CcrdyzYe
>>121
なるほど・・・今日もう一度考えてみます

>>123
Randam.rangeによって入れるクラスがランダムに変わるんです

なのですが、どうもListに入れる型が入れるまで不明というのは
設計的にまずいようですので、一つのクラス内に複数のメソッドを作って
そのメソッドをlistに入れるという方向でやってみようと思います
0127デフォルトの名無しさん2015/01/05(月) 15:16:16.37ID:X/XHMwki
>Randam.rangeによって入れるクラスがランダムに変わるんです
斬新すぎるw
0128デフォルトの名無しさん2015/01/05(月) 15:22:49.76ID:CcrdyzYe
恥ずかしい・・・
PGの友人にまずはメソッドで出来ないか考え、どうしても無理ならクラスでやれ
と言われたのを今思い出しました
メソッドで可能か考えずにいきなりクラスでやる設計にしたのが悪かったようです
普通にメソッドで可能だと思うので、メソッドでやります

ArrayListにしたのはListと違って型指定が不要で色んなクラスを入れられたので
ArrayListを使いました
こちらも言われた通りListに修正しようと思います
0129デフォルトの名無しさん2015/01/05(月) 15:37:14.65ID:F0b7DCdm
どんな物をつくろうとしてるのかさっぱりわかんないけど一から書籍で学習した方がいいよ
0130デフォルトの名無しさん2015/01/05(月) 16:12:57.15ID:wIPFuinN
本当にArrayListが必要だったら>>124が代替になるけどさ…

>入れるクラスがランダムに変わる
ってどういう用途で必要?

本当に必要だったらabstract classかinterfaceで縛った方がいい
0131デフォルトの名無しさん2015/01/05(月) 16:27:36.40ID:mE5biZZS
初心者が詰まるのはそもそも選んだ道が間違ってる場合が多いので、
無理な道をどう進めばいいかに拘ってはいけない
publicフィールドとメソッドだけでも十分何でも作れるよ
0132デフォルトの名無しさん2015/01/05(月) 17:04:56.11ID:CcrdyzYe
>>130
トランプやカード(のような種類のあるもの)をランダムでデッキに積む処理です
それぞれのカードの種類をクラスで作りました
0133デフォルトの名無しさん2015/01/05(月) 17:08:59.64ID:0G+rQibS
お前はポーカー作るのに52クラス作るつもりか
0134デフォルトの名無しさん2015/01/05(月) 17:40:38.34ID:QplnPHvB
同じListに突っ込んで処理するって事はそれらに何かしら共通点があるはず
その共通点を基底クラスにして派生クラス作ればいいだけさ
List<基底クラス>で用意すれば派生クラスをいくら入れてもなんとかなる
どこまで基底クラスに機能を持たせるかは経験を積んで判断してくれ
0135デフォルトの名無しさん2015/01/05(月) 18:36:45.06ID:P8usTFQm
シャッフルってどうやるのがいい?
やっぱり定石といってるやり方の方が正しいのかね?
最近ランダムソートをよく見る気がするが。
ttp://bbs.wankuma.com/index.cgi?mode=al2&namber=74460
0136デフォルトの名無しさん2015/01/05(月) 18:47:09.51ID:FTlsmlFT
for(int i = 0; i < array.Length; ++i)
{
 var rand = random.Next(array.Length);
 Swap(array, i, rand);
}

俺はこれだなあ
正しいかは知らん
0137デフォルトの名無しさん2015/01/05(月) 18:55:57.15ID:Y6BCcXgq
俺は使用頻度の高い順に

標準ライブラリにあるやつ
FisherYates
俺俺アルゴ

C#じゃない場合も含めて
0138デフォルトの名無しさん2015/01/05(月) 18:59:01.09ID:Y6BCcXgq
標準ライブラリにシャッフル関数持ってる奴は
だいたいFisherYatesで実装されてると思う
0139デフォルトの名無しさん2015/01/05(月) 20:34:33.21ID:X/XHMwki
>>132
処理でカードの種類を区別したいだけなら整数値でいいよ
トランプなら百の位でマークを、十と一の位で数字を表すとかで十分すぎる
カードクラスなんかいらない
0140デフォルトの名無しさん2015/01/05(月) 20:54:34.70ID:O5Cj2lUa
意味をはっきりさせるために構造体ぐらいは使った方が良いし、値じゃなくて参照の方が適当な処理もあると思うが
0141デフォルトの名無しさん2015/01/05(月) 21:04:57.32ID:X/XHMwki
ソーシャルゲームのカードみたいにカード自体がいろんな性質を持つならそうだね
トランプなら手札クラスや場札クラスまででいいと思うよ
カード型があってもアルゴリズム記述の邪魔になるだけ
01421412015/01/05(月) 21:13:21.66ID:X/XHMwki
あとはトランプの中でも特定のゲームを前提にするなら
カード型がメソッドやプロパティを持ってる方が便利な場面はあるだろうな
ページワンで「約札かどうか」とか、ルール上、各カード自体が特別な性質を持ってると見なせる場合
0143デフォルトの名無しさん2015/01/05(月) 23:46:57.60ID:i4FQe74T
自分で何入ってるのか分かってるんなら別にarraylistでいいじゃん。
継承関係あろうがなかろうが、ゲームで使うオブジェクトを片っ端からぶちこめ。
取り出すときに、System.Linq.Enumerable.OfType<Hoget>(arraylist)とかで取り出せばいい。
0144デフォルトの名無しさん2015/01/05(月) 23:55:32.16ID:4ygqeEMH
>>143
そうするメリットが皆無なのにする意味がない。
0145デフォルトの名無しさん2015/01/06(火) 00:20:25.34ID:yfzj11GY
型指定しちゃったら型にはまらない型入れられないじゃん
0146デフォルトの名無しさん2015/01/06(火) 00:35:48.24ID:9rh5iKlf
>>145
List<Object>
0147デフォルトの名無しさん2015/01/06(火) 00:45:48.08ID:thA/82xL
ArrayListやList<object>だと、
カードクラスを追加したら、他の部分もそれに合わせて変更が必要になるじゃん?

カードクラスを追加しても、他の部分を変更せずに済むようにするのが良い設計だよ
その方法が>>134
0148デフォルトの名無しさん2015/01/06(火) 00:49:55.98ID:Sh5lmqQg
外人のプログラマがcharをキャレットと発音していました
なぜですか?
0149デフォルトの名無しさん2015/01/06(火) 00:51:16.47ID:P27SxgEV
アニモー
モータポー
ミッソッ
ポテイトゥ
0150デフォルトの名無しさん2015/01/06(火) 00:58:06.22ID:dzcmrdpW
>>148
charはキャラって読みそうだけど、
通はシャアって読むよね!
0151デフォルトの名無しさん2015/01/06(火) 01:00:32.54ID:nsrYhV9A
マークがenum
数字がintのクラス一つあれば十分
0152デフォルトの名無しさん2015/01/06(火) 01:03:06.40ID:yfzj11GY
<<147
ならないよ。
list.OfType<Interface>で取り出せばいいよ。
0153デフォルトの名無しさん2015/01/06(火) 03:41:49.07ID:lXgSl7Ko
>>152
それなら、List<Interface>で良いんじゃ。
0154デフォルトの名無しさん2015/01/06(火) 06:50:09.33ID:Gue0XuXV
>>153
それだと入れられなくないか?
0155デフォルトの名無しさん2015/01/06(火) 10:00:22.93ID:tMvZ7xD7
>>135
これ結構早い段階というか最初から?偏りがあるんじゃないかって疑ってたみたいだけど、そういうのってなんとなく?感覚的に?あるいは論理的に?分かるもんなの?
なんにしても、なんとなく適当にやると簡単に偏りとか出てしまうんだな。
0156デフォルトの名無しさん2015/01/06(火) 10:23:55.04ID:IQcBbcwX
経験的に、だと思う
0157デフォルトの名無しさん2015/01/06(火) 12:36:40.69ID:M5IoxY0a
・Randomは重複する
・OrderByは安定ソートである
この2点さえ知ってれば明らかでしょ
安定ソートでないアルゴリズムでも重複キーの順序は大抵何らかの単純な法則に従うから偏るだろうね
>>136はNext(i, array.Length)に変えたら一様になるよ
インプレースだから分かりらさ
0158デフォルトの名無しさん2015/01/06(火) 12:38:49.14ID:M5IoxY0a
すまんミス
インプレースだから分かりにくいけど、直感的には袋に入れた玉を無作為に取り出して並べるのと等価
0159デフォルトの名無しさん2015/01/06(火) 12:52:09.52ID:RdEZdnsU
rnd.NextDouble使ってれば重複は無視できるレベルになると思うけどね
0160デフォルトの名無しさん2015/01/06(火) 13:05:59.44ID:IQcBbcwX
理解して無視してるならいいよ
理解せずに無視してるとなるとそれは
0161デフォルトの名無しさん2015/01/06(火) 13:10:43.51ID:9BIJAN3Y
>>158
等価に思えんけど。
それではインデックスが若い物ほどSwapされる頻度の平均値が上がってしまう。
0162デフォルトの名無しさん2015/01/06(火) 13:13:38.84ID:IQcBbcwX
昨日とりあえずFisherYates使えって言ったじゃん
0163デフォルトの名無しさん2015/01/06(火) 14:53:07.88ID:nsrYhV9A
>>157
>Next(i, array.Length)に変えたら一様になるよ

全く意味不明だな
元がどう一様ではないのか説明してみろよ
0164デフォルトの名無しさん2015/01/06(火) 14:59:54.65ID:3sTwSoye
>>136に>>157の修正したものがFisherYatesと同じでしょ
でそれは>>158の解釈通りでしょ
0165デフォルトの名無しさん2015/01/06(火) 15:01:16.62ID:3sTwSoye
あ、元が一様かそうでないかは自分にはわからん
0166デフォルトの名無しさん2015/01/06(火) 15:02:50.44ID:9BIJAN3Y
だから初期状態で若いインデックスの物ほどswapされる頻度が高くなるんだから>>158の説明は間違い
0167デフォルトの名無しさん2015/01/06(火) 15:07:35.47ID:A5fXnf9K
スワップと考えるから間違える。
やってることはスワップなんだが、論理的には袋の中から一つずつランダムに取り出すのと同じになるんだよ、>>158のやり方で。
よく考えれば分かる。
最初のやり方は一様にならない。
0168デフォルトの名無しさん2015/01/06(火) 15:09:36.32ID:3sTwSoye
>>166
どういうこと?157のように変えたらarray[0]は初回のみしかswapされないと思うんだが
0169デフォルトの名無しさん2015/01/06(火) 15:09:40.81ID:nsrYhV9A
そもそもランダムならばスワップが1回でも2回でもランダムな値であることには変わりないはずだからそこは問題じゃないだろう

元が一様ならばNext(i, array.Length)にするのは無駄な処理が増えるしシンプルさを損なうから無粋だろう
0170デフォルトの名無しさん2015/01/06(火) 15:10:38.19ID:A5fXnf9K
違う、>>157のやり方だった。

スワップする事で、袋から選んだボールを並べた上で、選ばなかったボールを袋に返してることになるんだよ。
ちょっとわかりにくいけどよく考えてみれば分かるはず。
0171デフォルトの名無しさん2015/01/06(火) 15:12:21.30ID:A5fXnf9K
>>168
スワップじゃなくて、袋から一つずつ取り出してるんだ。
一回取り出した奴を含めて選びなおしてたらおかしくなるだろ?
0172デフォルトの名無しさん2015/01/06(火) 15:17:05.25ID:nsrYhV9A
>>170
ボールを袋に返すっていうのがまず意味不明だし
袋に返すとどう一様じゃなくなるのかも分からんな
0173デフォルトの名無しさん2015/01/06(火) 15:17:15.48ID:9BIJAN3Y
>>170
だから、初期状態の位置によって何度も袋に戻される玉とそうでない玉が出るんだから全然等価じゃありません。
0174デフォルトの名無しさん2015/01/06(火) 15:21:19.22ID:9BIJAN3Y
例えばarray.Length == 5の時、初期状態でarray[0]に入ってる値は
Swap(0, 1)→Swap(1, 2)→Swap(2, 3)→Swap(3, 4)
と最大4回swapされる可能性があるが、初期状態でarray[4]に入ってる値は
最大でも1回だけ。
0175デフォルトの名無しさん2015/01/06(火) 15:22:15.54ID:nsrYhV9A
現実のボールをランダムに並べるには袋から取り出していく事が必要になるが
現実のボールを袋から取り出してるわけではないからそのメタファーに従う必要はない
別にボールを取り出すようにやらないと配列が一様なランダム性を得られないわけではないし

さらにいえばボールを袋に返してはいけないのは並べ終わらなくなるからであって一様性とは関係ないはずだ
0176デフォルトの名無しさん2015/01/06(火) 15:27:31.97ID:A5fXnf9K
>>136のやり方がなぜだめか。
例えばボール3つの場合、ボールの並び方は
123 132 213 231 312 321
の6パターンになる。
一方、スワップの組み合わせ数は3×3×3で27パターン。
つまり6パターンで割り切れない。
ということは、どういうことになるかというと、パターン数に偏りがあるって事になる。
分かる?
0177デフォルトの名無しさん2015/01/06(火) 15:30:16.08ID:A5fXnf9K
>>175
違うよ。
プログラムの動作をメタファーで表現してるのではなくて、元々の袋から一つずつ取り出して並べる操作を、プログラムでシンプルに実装するとこうなるんだ。
論理的に等価なんだよ。
0178デフォルトの名無しさん2015/01/06(火) 15:31:51.57ID:9BIJAN3Y
言ってて無理があると思わないんだ...
0179デフォルトの名無しさん2015/01/06(火) 15:34:02.23ID:A5fXnf9K
>>176
一方で、>>157のやり方だと、スワップの組み合わせ数は
3×2×1で6パターン
つまりボールの並び順のパターン数と同じになる。
袋から一つずつ取り出して並べるのと等価になるようにプログラムしてるんだから当然だけど。
0180デフォルトの名無しさん2015/01/06(火) 15:35:29.20ID:nsrYhV9A
>>176
まずスワップの組み合わせ数とボールの並べ方の数に何の関係があるんだよ
関係無いものを並べてみただけのただの詭弁だ

ランダム性が一様であるかどうかは「配列のすべてのインデックスで、
全ての項目から均等な確率で一つが選ばれて割り当てられているかどうか」で決まる
だから>>136は全く正しいアルゴリズムである
0181デフォルトの名無しさん2015/01/06(火) 15:40:01.80ID:A5fXnf9K
最初の配列は全部袋の中のイメージな。
まず一回目のループで3つのうちどれか選ぶよな。
それが一つ目のボールだ。
配列の1つめと、選んだボールをスワップする。
配列の1つは選んだボールになり、2つ目と3つ目は袋に残ったボールになる。

2回目のループで配列の2つ目と3つ目どちらかを選ぶ。
つまり、袋に残った2つのどちらかを選ぶ。
配列の2つ目と入れ替える。
配列の2つめは、袋から2回目に選んだボールとなり、配列の3つ目には選ばれなかったボールが残る。

こういう事だよ。
0182デフォルトの名無しさん2015/01/06(火) 15:43:07.32ID:A5fXnf9K
>>180
さすがに
確率を勉強し直せとしか言えん。

スワップのパターン数=出来上がる配列の最終的なパターンの総数だろうが。
その総数が、並び方のパターン数の倍数にならないなら、並び方によって出現するパターン数が替わってしまう=一様になってない。
何で分からん?
0183デフォルトの名無しさん2015/01/06(火) 15:43:43.21ID:IQcBbcwX
あ、ご高説終わりましたか?
0184デフォルトの名無しさん2015/01/06(火) 15:46:15.23ID:3sTwSoye
>>136を10000回やってみると確かに偏った(初期位置が後ろのものほど前に来にくい)
>>157だと偏ってないように見えた

ちょっと確率の計算を勉強しなおしてくる
0185デフォルトの名無しさん2015/01/06(火) 15:51:38.69ID:IQcBbcwX
約一名様は中学校からやり直しね
0186デフォルトの名無しさん2015/01/06(火) 15:57:49.21ID:3sTwSoye
え、一人だけ
0187デフォルトの名無しさん2015/01/06(火) 16:04:24.60ID:3sTwSoye
結局>>164の認識で合ってるという理解になったんだが
合ってるよね?
0188デフォルトの名無しさん2015/01/06(火) 16:04:38.57ID:9BIJAN3Y
a[i]とa[j](i≦j≦n, where n = a.Length - 1)を交換する行為は、確かに
a[i]からa[n]までの部分配列を袋とみなして玉を取り出した後、袋とみなす部分配列の始点を
インクリメントするのと同じだから、やっぱり>>157-158が正しいなw

すまんかった。
0189デフォルトの名無しさん2015/01/06(火) 16:22:27.74ID:W2F4pWSu
こういう時にideone使えよ
俺はやらないけどな
0190デフォルトの名無しさん2015/01/06(火) 16:41:32.07ID:A5fXnf9K
>>187
合ってる。
0191デフォルトの名無しさん2015/01/06(火) 16:41:49.09ID:3sTwSoye
貼ってみたよ
http://ideone.com/Uic7zf
0192デフォルトの名無しさん2015/01/06(火) 18:03:02.39ID:GG94B219
アルゴリズム的に一様になるとしても、そもそもの乱数に偏りがあったら何にもならんのだが
実際どの程度偏ってるんだろ
0193デフォルトの名無しさん2015/01/06(火) 18:17:27.51ID:fNWhMhIP
>>192
CのデフォRand()がアレなのは常識だけど、C#デフォのはどうなの?
メルセンヌ・ツイスタとかなら文句はないんだが
0194デフォルトの名無しさん2015/01/06(火) 18:21:06.20ID:W2F4pWSu
クヌースの減算法じゃなかったか
0195デフォルトの名無しさん2015/01/06(火) 18:27:12.50ID:pqQorvDT
>>194
うん。
0196デフォルトの名無しさん2015/01/06(火) 18:29:24.17ID:pqQorvDT
>>160,180
>>184
ジワジワくるw
息してないけど。
0197デフォルトの名無しさん2015/01/06(火) 18:30:35.79ID:pqQorvDT
>>160じゃなくて>>169だた。
0198デフォルトの名無しさん2015/01/06(火) 18:32:22.80ID:nsrYhV9A
>>182
>スワップのパターン数=出来上がる配列の最終的なパターンの総数

何言ってんだ一体
たとえば同じ箇所を二回スワップすれば同じパターンに戻るんだからスワップの総数は最終的なパターンの総数になんかなるわけないだろう

たしかに俺が間違っていたことは間違いないが
これが詭弁なことにも違いはない

>>191の結果を見ると
結局最初に0番にスワップされた奴はもう戻って来られない可能性が高いが
0は自由な位置に移動した後もう一度必ず移動するチャンスがあるので
その分移動しやすいってことか
なので自分の数字より若い位置に移動したらもう移動しない可能性が高いので
自分の数字より前の濃度が高くなるのか
0199デフォルトの名無しさん2015/01/06(火) 18:42:43.31ID:pqQorvDT
>>198
だから確率を勉強しし直すといいよ。
同様に確からしい起こりうる事象のすべての組み合わせのうち、
ある事象が起こる回数の割合が、その事象の起こる確率だ。

同様に確からしい、起こり得るすべての事象の総数がここでは27パターンなわけ。
この27パターンは同じ確率で発生するわけ。
並び方のパターンは6で、総事象が27ってことは、確実に多い並びと少ない並びがあるわけ。
27パターンは同じ確率で発生するんだから、少ない並びのパターンが発生する確率は少なくなるわけ。

確率を分かってたら総パターンの意味なんてすぐ分かるけど、ちゃんと理解してないからピンと来ないんだな。
0200デフォルトの名無しさん2015/01/06(火) 18:45:28.69ID:pqQorvDT
>>198
詭弁でもなんでもなくて、確率の話ではふつうの言い方だよ。

理解できないおまえがアホなだけ。
結局お前の言ってたこと全部間違ってるじゃんw
0201デフォルトの名無しさん2015/01/06(火) 18:52:03.53ID:W2F4pWSu
そろそろ面会時間終わりですよー
0202デフォルトの名無しさん2015/01/06(火) 19:15:40.97ID:nsrYhV9A
>>200
現象を理解してないから詭弁を使うわけ
俺は現象を理解したから無意味な詭弁で妙な説明をする必要はなくなったの
そしてお前は煽ってるだけで最初からなんにも理解できてないわけ
確率の上っ面を舐めて変な解説に屋上屋を重ねただけ 現象には全く届いていない
0203デフォルトの名無しさん2015/01/06(火) 19:18:01.57ID:W2F4pWSu
そんなハッスルしなくても
あと5時間もあるのよ?
0204デフォルトの名無しさん2015/01/06(火) 19:59:29.97ID:d8xiUFfP
>>202
おまえは何を言ってるんだ…
0205デフォルトの名無しさん2015/01/06(火) 20:06:27.17ID:Q7R46vB5
言葉ではなく心で現象を理解できたとかそんなん
0206デフォルトの名無しさん2015/01/06(火) 20:10:09.17ID:d8xiUFfP
もう少しだけ正確な言葉でいうなら、>>136は、根元事象が27で、表に出てくる、結果の並び順は6事象。
27の根元事象は、結果としてこの6事象はのいずれかに対応している。
偏りがないためには、結果の6事象が同じ確率で発生しなければならない。
しかし、根元事象が27なので、結果の6事象は均等に発生せず、6事象の発生確率は確実に異なる。

だから>>136は絶対に偏りが発生する。
それだけの話で、確率としては当たり前の話。
理解できない奴がアホ。
0207デフォルトの名無しさん2015/01/06(火) 20:13:24.83ID:d8xiUFfP
確率の上っ面も何も、確率の入門レベル、超基礎レベルで分かる話だ。
0208デフォルトの名無しさん2015/01/06(火) 20:20:40.77ID:Q7R46vB5
2chでよかったな
これがidentifyのあるコミュニティだったらユーザー封印レベルだった
0209デフォルトの名無しさん2015/01/06(火) 21:11:12.98ID:qlHRI5QU
>>206
つまりこういうことか。
https://ideone.com/crwsk4
0210デフォルトの名無しさん2015/01/06(火) 21:24:47.79ID:MYBQVLqU
3以上の整数nについてn^nがn!で割り切れないことって一般に証明できるの?
0211デフォルトの名無しさん2015/01/06(火) 21:36:10.21ID:O9PzdG7T
板違い
単純に大小比較で終わりそうな気もするがw
0212デフォルトの名無しさん2015/01/06(火) 21:46:17.93ID:Z/uJ2lW6
>>210
階乗って事は、n以下の前自然数が因数として含まれてるわけだ。
割り切れる訳ないよね?
0213 ◆QZaw55cn4c 2015/01/06(火) 22:05:21.43ID:3D6Su9d8
>>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
0214デフォルトの名無しさん2015/01/06(火) 22:23:51.73ID:qlHRI5QU
>>213
n >= p1・p2・...・p(n)
じゃなくて、
n = p1・p2・...・p(m)
じゃないの?
0215デフォルトの名無しさん2015/01/06(火) 22:28:02.85ID:uMZjRgvb
ここって高校数学のスレだっけ
0216デフォルトの名無しさん2015/01/06(火) 22:30:35.81ID:nsrYhV9A
何ひとつ現象を説明できないピントのズレた話を繰り返して分かったような気分に浸るだけならともかく
C#もプログラムも一切関わりのないことをプログラム板のC#スレにズルズル書き込んでるんじゃない
0217デフォルトの名無しさん2015/01/06(火) 22:39:13.30ID:Z/uJ2lW6
>>216
とっとと失せろよ
0218デフォルトの名無しさん2015/01/06(火) 22:47:05.72ID:3D6Su9d8
>>214
ああ、m と n の使い分けがごちゃごちゃだ‥てきとーに読み替えて

>>216
ごめん
0219デフォルトの名無しさん2015/01/06(火) 22:55:20.05ID:3sTwSoye
>>216
自分も見直したけど、あなたも確率の考え方は見直しといた方が良いよ
たぶん何か勘違いしてる
0220デフォルトの名無しさん2015/01/06(火) 23:01:15.45ID:Bc4EA3Wj
まあ就職したら玉と袋の話程度も理解できない文系SEの奴隷として
搾取されるんですけどね
0221デフォルトの名無しさん2015/01/06(火) 23:08:04.94ID:Q7R46vB5
これで就職できるの?迷惑防止条例違反だわ
0222デフォルトの名無しさん2015/01/06(火) 23:16:03.06ID:/zWcLRCZ
玉と袋が有って棒はないの?
0223デフォルトの名無しさん2015/01/06(火) 23:28:31.96ID:Q7R46vB5
完全におっさんの発想
0224デフォルトの名無しさん2015/01/06(火) 23:59:07.16ID:fH0Fgns+
>>136と>>157両方試したけど、136でも全然偏ってないけどな
0225デフォルトの名無しさん2015/01/07(水) 00:03:39.74ID:kDJhAAzR
すみません、この流れを作った>>132です。
一応、報告と、また低レベルな質問をしに来たのですが
今はやめた方がいい感じでしょうか?
0226デフォルトの名無しさん2015/01/07(水) 00:04:29.36ID:dafMrNYg
>>224
ロジックを説明されても理解できないなら、せっかく>>209でコード書いて
実証したんだからそれ見て納得してよ。
0227デフォルトの名無しさん2015/01/07(水) 00:05:35.11ID:dafMrNYg
>>225
別にいいよ。
荒れたって死人がでるわけじゃない。
多少スレッドの見通しが悪くなるだけだ。
0228デフォルトの名無しさん2015/01/07(水) 00:05:49.11ID:2DuSSq4q
>>225
いや、むしろこの流れを変えて欲しい
0229デフォルトの名無しさん2015/01/07(水) 00:15:10.63ID:kDJhAAzR
また私のせいで荒れてしまったらすぐ引き上げます。すみません。

まず、
・カード・タイプごとにクラスを切るのをやめた
・カード種類の判別は普通の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点目にお聞きしたいのは、上記の処理は何か問題点を含んでいないでしょうか?という事です
ちなみに偏りについてですが、あまり起きないに越したことはないと思いますが、そこまで是が非でも
偏りを解消したいというわけでもないので、程々乱れてくれればいいという観点です。
0230デフォルトの名無しさん2015/01/07(水) 00:15:59.95ID:PZkMwQ+l
トランプとか麻雀とかで使うシャッフルなら>>136で何の問題もない
偏るって、どれだけ偏るんだよ
使い物にならないくらい偏るわけないだろ
シャッフル厨は死ねよ
0231デフォルトの名無しさん2015/01/07(水) 00:17:03.97ID:kDJhAAzR
すみません、少し訂正です

・カード・タイプごとにクラスを切るのをやめた
・カード種類の判別は普通のintの数字のみにした
・カード種類をintで判定するようにしたので、ArrayListをやめてint配列にした(public static int[] cardlist = {・・・})
・int型のリストにランダムでカード種類を表す整数リテラルを入れ、それをシャッフルする
0232デフォルトの名無しさん2015/01/07(水) 00:23:45.46ID:kDJhAAzR
何度もすみません
・int型の配列にランダムでカード種類を表す整数リテラルを入れ、それをシャッフルする

でした
0233デフォルトの名無しさん2015/01/07(水) 00:24:43.11ID:qh26SAEn
Guid(じーゆーあいでぃー)ソートが許されるのはT-SQLまで
0234デフォルトの名無しさん2015/01/07(水) 00:26:17.95ID:/xILHur9
ぐいっどそーと
0235デフォルトの名無しさん2015/01/07(水) 00:29:02.69ID:BcMWINqr
ま、いいんじゃね?
最初の、入門書も読んでるか怪しい、ど素人にもほどがある質問に比べて、
別人かのようなレベルだし。
コードも自分が納得する動きになっているんであればそれで十分かと。
0236デフォルトの名無しさん2015/01/07(水) 00:35:27.18ID:GJGYE4EM
シャッフルするなら初期状態をランダムにする必要ないんじゃないの?
0237デフォルトの名無しさん2015/01/07(水) 00:39:17.83ID:+paEBoih
>>229
シャッフルは FisherYatesが正解だよ。
GUIDでソートは簡単に書くのが目的であって、
わざわざ偏るからループまでするくらいなら FisherYatesでいい。
0238デフォルトの名無しさん2015/01/07(水) 00:41:20.08ID:+paEBoih
>>237
GUIDは別に質のいいランダムじゃないしね。
0239デフォルトの名無しさん2015/01/07(水) 00:45:57.08ID:+paEBoih
>>216
どう見ても自分に言ってる。
自分に言ってるなら違和感ない。
0240デフォルトの名無しさん2015/01/07(水) 00:49:11.22ID:6g40PNLQ
偏ってることを承知の上で使うならよいが
>>224みたいな人がゲームを作るとカルドセプトのようになる

>>191,209でせっかく実際に偏りを見せてくれてるのに
0241デフォルトの名無しさん2015/01/07(水) 01:06:06.00ID:nug8jEZh
>>239
偏ってるって言ったところで
なぜそれが偏るのか説明できなきゃ理解したことにはならないんだよ

逆に言えばなぜそれが偏るのか理解できないから
トンチンカンな説明をしだすってこと
0242デフォルトの名無しさん2015/01/07(水) 01:19:30.07ID:6g40PNLQ
おっと再びブーメランか
0243デフォルトの名無しさん2015/01/07(水) 01:26:30.11ID:kDJhAAzR
もう一つ質問があったのですが、また日を改めます
質問するレベルじゃない気もしますし

あとシャッフルはGuidやめてFisherYatesにします
ありがとうございました。
0244デフォルトの名無しさん2015/01/07(水) 01:31:14.45ID:nug8jEZh
「可能な手の総数が組み合わせの数の倍数にならない」という理論で
なぜ自分より若いインデックスの濃度が高まるのか説明できるか考えてみるといい
いかに頓珍漢な説明をしているか分かるだろう
0245デフォルトの名無しさん2015/01/07(水) 07:13:52.16ID:AKPWQzMr
>>244
トンチンカンは消えろって言ってんだよ
自覚ねえのか昨日の地球で人類最低ランキング一位のカス
0246デフォルトの名無しさん2015/01/07(水) 07:14:44.59ID:+paEBoih
>>244
やっぱり勝手に勘違いしてるんだな。
一様でないのはこういう理由で明らかと言ってるだけで、どう偏るかについては何も言ってないのに。

こういう理由で一様でないのは明らか。
→こういう風に偏る説明になってない、トンチンカンだ。
アホか。
0247デフォルトの名無しさん2015/01/07(水) 07:20:08.78ID:+paEBoih
>>246
しかも実例で偏るの見た後でしか偏るわけがないって言い張ってたくせにw
0248デフォルトの名無しさん2015/01/07(水) 08:36:08.25ID:lse0FVq2
>>244による自称正しい説明ってどれだ?
0249デフォルトの名無しさん2015/01/07(水) 08:40:58.67ID:lse0FVq2
>>248
198 デフォルトの名無しさん sage 2015/01/06(火) 18:32:22.80 ID:nsrYhV9A
>>191の結果を見ると
結局最初に0番にスワップされた奴はもう戻って来られない可能性が高いが
0は自由な位置に移動した後もう一度必ず移動するチャンスがあるので
その分移動しやすいってことか
なので自分の数字より若い位置に移動したらもう移動しない可能性が高いので
自分の数字より前の濃度が高くなるのか

これか。
ワロタ。
じゃあ何で可能性が低いどころか絶対に戻ってこれない>>157で偏らないんだよ。
0250デフォルトの名無しさん2015/01/07(水) 09:20:24.53ID:pOoHqu3J
ゲームでユニット表やアイテム表を作るのにTupleがたくさんあります
Tuple<string, string>
Tuple<string, string, sring>
Tuple<string, string, sring, sring>
これを1つのTableクラスが複数の種類のTupleを扱うためには
どういう形で持てばいいのでしょうか
Tupleの共通する基底クラスがあればいいのですが・・・あるいはインターフェース
0251デフォルトの名無しさん2015/01/07(水) 10:09:33.54ID:NB6nt07B
>>250
いまひとつどういう事をしたいのか分からない…
sringってのはstringの間違い?
0252デフォルトの名無しさん2015/01/07(水) 10:16:24.34ID:NB6nt07B
>>241
>>244

>>249

ジワる
0253デフォルトの名無しさん2015/01/07(水) 10:29:32.20ID:pOoHqu3J
>>251
要素の数が異なるTupleをまとめて1つの変数で表す方法
ないんだよねー
ようは ITuple があればいいんだけど(内部使用の同名のインターフェースはあるっぽいがちょっと違う)
0254デフォルトの名無しさん2015/01/07(水) 12:41:40.75ID:DpCzErqF
ブーメランすぎてわざとやってんじゃないかって気がしてきた。
0255デフォルトの名無しさん2015/01/07(水) 12:44:31.50ID:DpCzErqF
そもそも本当に単純に自分より若いインデックスの濃度が高くなってんのか?
>>209みるとどうもそういう簡単な話には見えないんだが。
0256デフォルトの名無しさん2015/01/07(水) 13:20:09.53ID:6g40PNLQ
>>250,253
全部stringなんだったらArrayとかListとかの別のコレクションに変えたらいいのでは
なぜTupleにしたいの
0257デフォルトの名無しさん2015/01/07(水) 13:45:38.44ID:CxxL7eUt
>>255
三下は引っ込んでろ
0258デフォルトの名無しさん2015/01/07(水) 13:48:40.68ID:nug8jEZh
>>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では検出できない
あと「場合の数が並び順の倍数にならない」影響も検出はできないけど理論上存在してるはずだな

再移動なしなら再移動チャンス自体が存在しないので並び順の影響は発生しないわけだな
0259デフォルトの名無しさん2015/01/07(水) 14:10:00.61ID:nug8jEZh
再移動チャンスの説明がインチキ臭いな
若い番号に移動した後の再移動チャンスは常に大きなインデックスに引き上げられるチャンスなので
大きなインデックスに移動する可能性が高くなり、若いインデックスのものはそこに留まる可能性が低くなるってことだな
0260デフォルトの名無しさん2015/01/07(水) 17:11:30.38ID:7MvMVdqp
そろそろアルゴリズムのスレ探すか立てるかしてそこでやってくれ
0261デフォルトの名無しさん2015/01/07(水) 17:48:52.70ID:6g40PNLQ
>>258,259
確率の遷移を表にしてあげたから見ながら考えてみてね
http://ideone.com/Sc1TQ4
0262デフォルトの名無しさん2015/01/07(水) 18:04:15.93ID:6g40PNLQ
表にしてみて気付いたが157はFisher-yatesより1回ループが多いんだね
でもその1回はやってもやらなくても確率は均一のままなのか
0263デフォルトの名無しさん2015/01/07(水) 18:27:39.03ID:6g40PNLQ
よく考えたら当たり前だった 最後の1回は入れ替えが起こらない
0264デフォルトの名無しさん2015/01/07(水) 18:31:20.23ID:nug8jEZh
>>261
いやそんなのは頭のなかに出来てるけど
それを見ると何か新しいことが分かるのか?
0265デフォルトの名無しさん2015/01/07(水) 18:36:15.77ID:6g40PNLQ
頭の中wなら最初から頓珍漢なこと言わずに作っといてよw
0266デフォルトの名無しさん2015/01/07(水) 18:45:01.14ID:XLZDHvL7
世界最低と世界ブービーが実現して欲しくなかった史上最悪のコラボトークを行ってます
0267デフォルトの名無しさん2015/01/07(水) 18:55:05.79ID:dA3MQeHU
つっこみどころが多すぎてもう何も言う気にならない。
0268デフォルトの名無しさん2015/01/07(水) 19:05:27.61ID:nug8jEZh
>>265
そんなん見たって解釈しないと何も分からんがな
解釈した結果は>>258に書いたし
0269デフォルトの名無しさん2015/01/07(水) 20:25:41.50ID:48bxsm4k
>>191では検出できない云々を言い始めた辺りから言ってることが無茶苦茶になってる。
0270デフォルトの名無しさん2015/01/07(水) 20:26:36.75ID:nug8jEZh
どうムチャクチャなのか言ってみ
0271デフォルトの名無しさん2015/01/07(水) 20:30:21.32ID:48bxsm4k
場合の数が並び順の倍数にならない影響も理論的にはあるはずだが検出できないとか、そもそも根本的に意味分かってないじゃん‥
0272デフォルトの名無しさん2015/01/07(水) 20:34:01.48ID:48bxsm4k
リセットされるから検出できないってどういう意味だよ。

検出できないってどういう意味で書いてんの?
0273デフォルトの名無しさん2015/01/07(水) 20:37:32.30ID:48bxsm4k
>>270
まあ昨日からアホなことばっか書きながら、言い繕いばかりやって、書けば書くほど余計にアホとしか思われんぜ。
昨日の時点で根本的に頭悪すぎることはもう見えてしまってるから。
0274デフォルトの名無しさん2015/01/07(水) 22:43:01.26ID:nug8jEZh
>>271,272
一旦ランダムな位置に移動したら濃度が全インデックスで均一になるからどうスワップしようと偏らないので検出できない
これをリセットと表現している

並び順の倍数のやつは統計的に検出できるほどの量にならないってこと
0275デフォルトの名無しさん2015/01/07(水) 23:37:56.54ID:+paEBoih
>>274
そもそもそのリセットされた場合もされなかった場合も
その後のどんな動きもひっくるめて繰り返し試行した
統計的な結果が>>191なんだからリセットされた場合は
検出できないなんて表現自体がとっても変なんだが、
まあそこはおいとく。

後半がぶっ飛びすぎててもはやどうでも良いレベル。
根元事象の数が結果の並び順の倍数になってないことを、
いくつかある偏る原因の一つだとでも思ってるのか…

ほかの理由による偏りは統計的に見えているが、
倍数になってないことによる偏りは統計的に影響が
少なくて見えていないってか?

ユニークな考え方だなおい。
0276デフォルトの名無しさん2015/01/07(水) 23:38:36.58ID:+paEBoih
>>274
そもそもそのリセットされた場合もされなかった場合も
その後のどんな動きもひっくるめて繰り返し試行した
統計的な結果が>>191なんだからリセットされた場合は
検出できないなんて表現自体がとっても変なんだが、
まあそこはおいとく。

後半がぶっ飛びすぎててもはやどうでも良いレベル。
根元事象の数が結果の並び順の倍数になってないことを、
いくつかある偏る原因の一つだとでも思ってるのか…

ほかの理由による偏りは統計的に見えているが、
倍数になってないことによる偏りは統計的に影響が
少なくて見えていないってか?

ユニークな考え方だなおい。
0277デフォルトの名無しさん2015/01/07(水) 23:54:35.46ID:+paEBoih
二回書き込んだのはミス。

根元事象ってのは、ありとあらゆる動きをすべて含んだ全結果だぜ。
お前がいろいろ説明したいろんな理由によって起こる偏りも
全て含んだ結果の集まりが根元事象だぜ。
根元事象をすべて並べてみればどういう偏りになるか見えるといっても良いかな。

倍数になってないのは偏る原因じゃないんだよ、むしろいろんな原因によって偏った結果を意味してるんだよ。
もし統計的に検出できるほどの量にならないとしたら、
それはつまり>>191は全く偏ってない結果になるってことだよ。

もうあんまり笑わすな。
0278デフォルトの名無しさん2015/01/08(木) 00:38:57.21ID:VH1XIADf
今は知らないけど俺の時代は理系でも確率統計って(実は思いっきり有用なのに)
軽視されてたな。

大学ではまったく教わってないし、そもそも入試に出ないところが圧倒的に多かった記憶がある。
高専出身者に聞いたら高専では全く習わないって言ってた。
0279デフォルトの名無しさん2015/01/08(木) 09:56:01.78ID:1y8mGCEd
>>277
倍数になってないことによる影響は10の10乗回試行した時に1差がつくっていうものだ
これを統計的に検出するテストが作れるか作れないかは知らんが
少なくとも俺のPCでは現実時間では実行できない
0280デフォルトの名無しさん2015/01/08(木) 10:14:37.49ID:jnBNhdgx
>>279
倍数になってないのは原因じゃなくて結果だ。
倍数になってないことだけから分かる確実に発生する偏りの最小量ならそうなるとしても、影響って言わないんだよそんなのは。
そもそも分かってたらそんな言い方しない言い方をしてる時点で、ああ分かってないんだなというそれだけの話。

そもそも倍数でないことから分かるのは、少なくとも偏ってるということだけであって、
どの程度偏ってるとか偏ってないとかは何も想定できない。
倍数でないという条件から確実である最低限の偏りだった場合にその影響は見えないと勝手に言ってるだけで、
そんな条件はきちんと言わなきゃ無意味だし、実際もっと偏ってるわけだ。

そんな細かいレベルの話じゃない、これまでの数々の言動で、何も分かってないアホとしか考えられんと言ってるだけのこと。
0281デフォルトの名無しさん2015/01/08(木) 10:20:55.79ID:jnBNhdgx
倍数になってないというのは単なる結果の見方、表現の一つ。
統計的な頻度の表も、結果の見方、表現の一つ。
後で出てきた最終的な確率の数値表も結果の見方、表現の一つ。
どれも結果の表現、見方の一つであって、どれかが原因でどうなるという因果関係ではなく、単なる別の側面での見方。
0282デフォルトの名無しさん2015/01/08(木) 11:27:33.77ID:1y8mGCEd
書き込めてないな
これ279の直後に書いたやつなんで280とかには答えてないけどごめんね


違うか

そもそも論から言えば
Fisher Yatesが決まって完全ランダムな数列が作れたとすれば
012になる場合の数も021になる場合の数も同じだ
だから次に1と2を入れ替えるスワップを行ったとしても偏りは発生しない
スワップは複雑な操作だから倍数になっていないから偏るというものではない

だがFisher Yatesのようなものが決まっておらず元の影響が残っているなら
>>209で示されているような影響が残る
元の影響が完全に残っている場合は10の10乗回で1の差になるけども
元の影響があまり残らないようにスワップしているわけだからこの影響がどの程度になるのかは見積もることすら俺には出来ないな
0283デフォルトの名無しさん2015/01/08(木) 11:54:11.86ID:5iJyKn99
お前の見解なんて聞いてねえんだよ 
これ以上書き込むと殺す
0284デフォルトの名無しさん2015/01/08(木) 11:54:30.55ID:c12syUmk
言い合いしてる人ら、いい加減スレ移ってくれませんかね
0285デフォルトの名無しさん2015/01/08(木) 12:00:03.43ID:1y8mGCEd
お前らが頼みにしていた「場合の数が倍数になってないから偏る」っていうのが誤りなのを示したら発狂か
まあ悪くないな
0286デフォルトの名無しさん2015/01/08(木) 12:12:29.97ID:WfhjodiB
>>282
また分かってない。
スワップ回数と場合の数は違う。
スワップ回数は>>136も>>157も同じだろうが(最後の分は違うとも言えるが)。

シャッフル終わった後に固定場所の二つを入れ替えても、場合の数は変わらない。
ランダム選んで入れ替えたら変わる。
当たり前の話。
0287デフォルトの名無しさん2015/01/08(木) 12:15:13.71ID:WfhjodiB
>>285
もういい加減にしろよ。
最初から、倍数になってないから一様でない(偏ってる)のは明らか、という話で、間違いも何も、明らかな事実だ。

ていうかおまえ論理的にはあるはずって言ってたじゃんあれは嘘だったのかよw

はいもう終わり。
バカだって表明は事はもう十分だからやめとけ。
0288デフォルトの名無しさん2015/01/08(木) 12:20:17.80ID:5iJyKn99
お前の見解も聞いてねえよ
黙れ殺すぞ
0289デフォルトの名無しさん2015/01/08(木) 12:23:11.97ID:GXT9U931
>>132「この流れいつ終わるんだろう・・・」
0290デフォルトの名無しさん2015/01/08(木) 12:24:28.44ID:WfhjodiB
>>286
場合の数は変わってないから倍数のままと言うことは変わらない。
けど結果の並びは変わるから、全並びが均等のままかどうかは俺には分からない。
ちゃんと考えたら分かるかも知れんが。
倍数になってないことからは、偏ってることが確実と分かるだけ、それ以上の何者でもない。
最初からそういう話しかしてない。

>>288
通報されるぞ
0291デフォルトの名無しさん2015/01/08(木) 12:25:57.51ID:WfhjodiB
まあ悪かったよもうやめる。
0292デフォルトの名無しさん2015/01/08(木) 12:34:30.60ID:qIfkunGX
マルチは相手にしてはいけない
http://peace.2ch.net/test/read.cgi/tech/1197620454/
0293デフォルトの名無しさん2015/01/08(木) 13:00:28.01ID:VLjg/Twc
>>292
テメエ自身がそのマルチじゃねえか馬鹿が。
0294デフォルトの名無しさん2015/01/08(木) 16:07:45.40ID:G25LXaeS
List<Object>
0295デフォルトの名無しさん2015/01/08(木) 16:17:06.20ID:qIfkunGX
ばれた?
0296デフォルトの名無しさん2015/01/08(木) 19:50:35.56ID:gLCA3hvH
>>294
基底すぎぃ
0297デフォルトの名無しさん2015/01/08(木) 22:17:56.21ID:RxvcgyHB
自作ソフトをVectorに登録してみたんだけどさ。
メールで「公開されましたよ〜!」みたいな通知ってこないもんなの?
サイト上では既に公開されてるのに・・・。
深夜に一斉送信とかかな?

Vectorに登録したことある人教えて。
0298デフォルトの名無しさん2015/01/08(木) 22:24:38.99ID:ZIphMHjt
Vectorとか久しぶりに聞いたわ
人に使ってもらいたいならスマホアプリに行ったほうが楽しいよ
0299デフォルトの名無しさん2015/01/08(木) 22:30:24.54ID:RxvcgyHB
>>298
VS2015でザマリンが標準搭載されるらしいね。
でもたしか無料版は容量制限があるから、
もう少し制限が緩和されたら俺もスマホアプリ開発する予定。
ObjectiveCとJavaの二重開発問題をまさかC#が解決するとはね。
0300デフォルトの名無しさん2015/01/08(木) 22:31:31.93ID:0wZdKCPg
ようやくVSでもAndroidの開発ができるようになるの?
0301デフォルトの名無しさん2015/01/08(木) 22:56:29.91ID:NRtGS2+4
言語がC#でもライブラリがJava(のパチモン)ではあんまり嬉しくないw
0302デフォルトの名無しさん2015/01/08(木) 23:01:07.37ID:NTFJsV9R
VS2015でザクマリンが標準搭載と空目してしまった。

でも本当は水ジムの方が好きです。
0303デフォルトの名無しさん2015/01/08(木) 23:06:40.76ID:RxvcgyHB
>>301
androidの上ではJavaもパチモンだけどなw
真の正体であるDalvikはGoogleが本気だして作ってるから
C#よりも優秀な可能性がある。
それをC#から使えるんだから嬉しい限りだろ。
0304デフォルトの名無しさん2015/01/08(木) 23:14:44.73ID:m9BFGJK5
VM同士が直接競合しているわけでもないのに実行環境の比較をして何の意味があるの
0305デフォルトの名無しさん2015/01/08(木) 23:14:56.87ID:NRtGS2+4
>>303
Dalvikそのものが出来が悪いって散々聞いたけど、4.4になって改善されたの?

っていうか俺が言ってるのはそこじゃなくて、ザマリンって.NET Framework(BCL)使えないよね確か。
ライブラリはSDK(Javaのパチモン)しか使えないはず。
0306デフォルトの名無しさん2015/01/09(金) 02:41:15.95ID:gjp6+33N
やっぱ紗栄子が悪かったんや
0307デフォルトの名無しさん2015/01/09(金) 03:28:42.14ID:oCewwXo0
型を型推論型のフィールドに入れる事ってできますか?
0308デフォルトの名無しさん2015/01/09(金) 06:13:54.32ID:Yt8mQXej
型推論型ってなんだよ…
0309デフォルトの名無しさん2015/01/09(金) 07:58:15.25ID:Xchv982B
>>305
MonoベースだからBCLは.NETと同じだよ
0310デフォルトの名無しさん2015/01/10(土) 11:29:27.83ID:W1xS5lAE
>>306
アンドロイドOS上で動くシェルが開発された・・・その名は
Dalvish
0311デフォルトの名無しさん2015/01/11(日) 07:34:57.86ID:6fleKwOw
Action型の変数actに何かの処理を書いて実行します。

その際に、
act()とact.Invoke()どちらを使った方がいいのでしょうか?
0312デフォルトの名無しさん2015/01/11(日) 07:45:18.43ID:6BuzDaMr
>>311
Invokeじゃないとだめな場所以外で
デリゲートを呼び出すのに()を使わない理由が思いつかない
0313デフォルトの名無しさん2015/01/11(日) 07:55:48.50ID:6fleKwOw
速度とか変わらないの?

ActionDictionary[type]() じゃ見にくいから
ActionDictionary[type].Invoke()にしようと思って沸いた疑問なんだけど
0314デフォルトの名無しさん2015/01/11(日) 08:03:03.08ID:YzoMt1+V
おそらくIL上では全部Invoke()扱いだと思う
0315デフォルトの名無しさん2015/01/11(日) 08:26:15.20ID:6BuzDaMr
ちゃんとリファレンス読んでるのかね。
「CLRがリフレクションのための自動的にInvokeメソッドを提供しますが
コンパイラが自動的に呼び出すのでC#から明示的にInvokeメソッドを呼び出す必要はありません」
という特殊なメソッドなので
それが自分の使い方に合ってるならどうぞお好きに。
速度についてはコンパイラの実装は314の通り
0316デフォルトの名無しさん2015/01/11(日) 08:43:01.93ID:c5JqEBin
リファレンスに書かれてないメソッド使う俺カッコいい
0317デフォルトの名無しさん2015/01/11(日) 09:32:45.68ID:8e7vlna2
Invokeは実装依存だから将来的なバージョンアップや
別系統の.NETで使えなくなる可能性があるね
0318デフォルトの名無しさん2015/01/11(日) 10:07:19.53ID:rflegamX
>>313
>見にくいから
それは変数名が原因じゃないのか・・・
0319デフォルトの名無しさん2015/01/11(日) 10:33:16.66ID:fxK+EsZ/
>>297
[Vector] ライブラリ公開のお知らせ って件名でメール来たけど、公開してから数日後のようだな
正月だからだろうが2日に公開して9日にメール来たよ
0320デフォルトの名無しさん2015/01/11(日) 10:35:44.14ID:fxK+EsZ/
あ、2日は修正してUPした日だった。でも、公開してからメールは2,3日はかかっているようだな
0321デフォルトの名無しさん2015/01/11(日) 11:21:34.46ID:YzoMt1+V
MSDNのAPMの項とか見ればInvokeについても記載されていると思うけど
0322デフォルトの名無しさん2015/01/11(日) 15:58:35.38ID:xu7NJdBG
うんうん書いてあるね
でも>>317の通りだろ?
0323デフォルトの名無しさん2015/01/11(日) 18:25:40.55ID:YzoMt1+V
別に言語仕様/MSDNに関係なくなくなる可能性は無くはない
0324デフォルトの名無しさん2015/01/11(日) 18:40:45.94ID:hXDAFv79
なくなくなる無くない
0325デフォルトの名無しさん2015/01/11(日) 20:23:09.56ID:23xXqbRD
>>319-320

297だが、おまえは俺かw
俺も2日に修正して9日にメールが来た(・∀・)人(・∀・)ナカーマ
ttp://www.vector.co.jp/vpack/whats/index_1.html
この145本の中に俺のソフトとおまえのソフトがあるわけだw

ところで今回はじめてソフトを登録してみたんだけど、
日本でソフトの登録を行ってるサイトとしてはVectorの他に窓の杜が有名だと思うけど、
あそこはソフト作者からの登録は行ってないんだね。
窓の杜側が優秀なソフトを選定して作者に対して採録していいかを問い合わせる、
という形態であるということが色々調べる中でわかった。
ソフト作者からすると自作ソフトが窓の杜に採録されることって名誉なことなの?
0326デフォルトの名無しさん2015/01/11(日) 20:31:51.99ID:hXDAFv79
楽しそうだね
0327デフォルトの名無しさん2015/01/11(日) 21:29:51.05ID:fxK+EsZ/
>>325
俺は10日分にのっていたが、現物はコレだ
http://www.vector.co.jp/soft/winnt/util/se508393.html
閑古鳥鳴いているんで頼むからダウンロードして下さい!

窓の杜の件だが、特別宣伝しているサイトも少ないし関係無さそうに思います
0328デフォルトの名無しさん2015/01/11(日) 21:35:52.00ID:8e7vlna2
PowerShellとかで一瞬でできそう
0329デフォルトの名無しさん2015/01/11(日) 21:49:32.61ID:ueBHNwdy
>>327
インストール中にこんなダイアログ出たんだけど

http://www.age2.tv/rd05/src/up6869.jpg
一応実行はできるみたい
実行環境はWin 7 Home 64bit
0330デフォルトの名無しさん2015/01/11(日) 21:54:12.87ID:YzoMt1+V
なんで.NET4と.NET3.0用のPresentationFrameworkを両方参照してるの?
0331デフォルトの名無しさん2015/01/11(日) 21:57:24.14ID:fxK+EsZ/
>>329
http://www7b.biglobe.ne.jp/~megatherium/download.html
こっちに一応書いてあるんだが、windows8のメニューに登録する際のオプションなんですわ
windows7では無害なので安心して使って下さい

Wixの設定なんだけど止めたほうがいいのかな?
0332デフォルトの名無しさん2015/01/11(日) 22:02:18.82ID:YzoMt1+V
TestWindowで何をテストしていたのかが気になる
0333デフォルトの名無しさん2015/01/11(日) 22:02:52.54ID:3WksrUDW
DataGridViewで、バインドモードでソート列で行の値を変えたとき、
しれっと行が入れ替わってCellStyleとか値以外のプロパティとかを置いてけぼりにしてしまうのですが

ちゃんと行に紐付けてプロパティも一緒に移動させる方法はないでしょうか?
0334デフォルトの名無しさん2015/01/11(日) 22:44:59.64ID:fxK+EsZ/
>>330
俺の勘違いじゃなければ、外部のライブラリが使用しているという面白くもなんともない理由です
てか、解析するのもいいけど普通に使って下さいよw
0335デフォルトの名無しさん2015/01/11(日) 22:51:01.75ID:zMjTexzn
>>331
バージョン判定して 7 なら抑止した方がいいんじゃね?
どう見てもエラーメッセージだし、俺なら使うのやめると思う。
0336デフォルトの名無しさん2015/01/11(日) 23:03:57.31ID:fxK+EsZ/
>>335
MSご謹製のWixと言うxmlで設定するインストーラー使っているんだが
該当する部分にバージョンで判定する方法がよくわからないです
まあ、大した機能じゃないから削除しましょうかね
Windows8使っている人にはわかると思いますが、インストール時にスタートメニューにピン止めする機能です
もしWix上でバージョンで処理を切り分ける方法を知っている人がいて教えてもらえたら幸いです
0337デフォルトの名無しさん2015/01/12(月) 00:58:56.97ID:15C9Kifs
もうブログでやれよ
0338デフォルトの名無しさん2015/01/13(火) 08:57:32.19ID:KQw876kB
メモリの改ざんを検出したいのですが何か良い方法はありますか?
0339デフォルトの名無しさん2015/01/13(火) 09:02:45.74ID:iU8Z/nwR
CRCとかMD5とかSHA1とかを定期的に取るんじゃない?
0340デフォルトの名無しさん2015/01/13(火) 09:20:21.58ID:ItHN1w7Z
.Netって直にメモリを触れるの?
StreamBufferとかその辺しか無理臭くない?
0341デフォルトの名無しさん2015/01/13(火) 09:27:05.89ID:NaldXlx/
Marshal.ReadInt32(new IntPtr(0x12345678));
*((int*)0x12345678) = 0x5555aaaa;
触るだけならいくらでも
0342デフォルトの名無しさん2015/01/13(火) 14:00:29.46ID:cjipnmCJ
>>331
ホームページ、よく出来ているけれど、自作か?
どういうツールで作るのか教えてけれ。
俺も似たようなホームページ作りたい。
0343デフォルトの名無しさん2015/01/13(火) 14:05:15.04ID:8RgDkMSv
よほど早死にしたいらしいなお前
0344デフォルトの名無しさん2015/01/13(火) 19:35:37.57ID:A+1L71nc
>>342
自作じゃなくてフリーのテンプレ使っています
http://www.coolwebwindow.com/template/public.php
あとhttp://ri-mode.com/rainbow/2014/06/11/simple_css_dropdown_menu/
のメニューを使わせてもらっています

ツールはMSのExpressionシリーズ(Blend4の仲間)を使っています。無料化されたので探してみてください
0345デフォルトの名無しさん2015/01/13(火) 20:09:24.19ID:fFU9OuRs
C#スレなんだからここで宣伝続けたきゃソース公開しろよ
0346デフォルトの名無しさん2015/01/13(火) 21:01:47.74ID:AKeCVrBf
しなくていいから消えて
0347デフォルトの名無しさん2015/01/15(木) 09:40:21.78ID:V95QWGsJ
>>342
blogspot.com
ここでアカウント作れ
0348デフォルトの名無しさん2015/01/15(木) 10:34:10.16ID:Dbge0Tem
ブログとは全然違うだろ・・・・・・
0349デフォルトの名無しさん2015/01/15(木) 14:30:38.22ID:ORcxK7jY
blogger なら自由度高い
十分ホムペとして通用するよ
0350デフォルトの名無しさん2015/01/15(木) 14:37:43.60ID:WLm8ZLzH
>ホムペ
0351デフォルトの名無しさん2015/01/15(木) 14:42:15.22ID:IiuUEEzW
ホムペマンの誕生の瞬間であった
0352デフォルトの名無しさん2015/01/15(木) 14:43:59.93ID:Dbge0Tem
オープンソースプロジェクトのホームページに使えるサービスはずっと探してるな
こういうかっこいいページはどうやって作ってるんだろう
http://www.mapeditor.org/
0353デフォルトの名無しさん2015/01/15(木) 15:13:19.72ID:k20V67BW
右下に書いてあるやん
0354デフォルトの名無しさん2015/01/15(木) 15:33:50.00ID:DICmco6v
>>352
ここのひとか
http://aidiary.hatenablog.com/entry/20080629/1281169955
http://aidiary.hatenablog.com/entry/20080629/1281170301
http://aidiary.hatenablog.com/entry/20080630/1281171006
http://aidiary.hatenablog.com/entry/20080701/1281171236
http://aidiary.hatenablog.com/entry/20080704/1281171437
http://aidiary.hatenablog.com/entry/20080705/1281171713
http://aidiary.hatenablog.com/entry/20080705/1281171879
0355デフォルトの名無しさん2015/01/15(木) 15:36:41.59ID:DICmco6v
>>342 >>352
スレチ

あっちでどうぞ
http://kanae.2ch.net/php/
0356デフォルトの名無しさん2015/01/15(木) 20:16:39.96ID:sFrLm9vj
using System;

public static int[] list = {1,2,3};

var n = list.length;

これで
エラー
'System.Array' に 'length' の定義が含まれておらず、型 'System.Array' の最初の引数を
受け付ける拡張メソッドが見つかりませんでした。
using ディレクティブまたはアセンブリ参照が不足しています。

と表示されます
どこがおかしいのか分かりません
0357デフォルトの名無しさん2015/01/15(木) 20:33:57.72ID:yTCJBhR9
目が悪いのか?
0358デフォルトの名無しさん2015/01/15(木) 20:34:03.27ID:5kvrGtaT
C#はJava原人じゃないんで
0359デフォルトの名無しさん2015/01/15(木) 20:52:44.51ID:r4XhfXoN
もう一度var n = list.length;って打てばVisual Studioが教えてくれるよ
0360デフォルトの名無しさん2015/01/15(木) 23:09:03.00ID:ojV8YXVD
>>356 lengthじゃなくてLength
0361デフォルトの名無しさん2015/01/15(木) 23:46:08.32ID:jCapVwH9
スレチだったら済まない、CsvHelper使ったことある人いる?
http://joshclose.github.io/CsvHelper/

これでCSVを自分のクラスにマッピングするときに
CsvClassMap<T>というabstractクラスを継承しろってことになってるんだけど、
いくら探してもこのパッケージ内にこのCsvClassMapがそもそも存在しないように見える。
using CsvHelperしてもサジェストに出てこないし、
オブジェクトブラウザーで中を見ても、確かに無い。

でもこれ使ってる人をググると普通にこれで使えてるみたいだし、
GitHub覗いてみたらこのクラスは存在するし、
試しに少し昔のバージョンを入れてみたけど変わらずだし、わけわかんなくなってきた…。

ちなみに私のスキルレベルは、C#をちゃんと触るのは今日が初めてレベル。
他の言語の素養はあるので、概ね理解していろいろ調べてるつもり。
0362デフォルトの名無しさん2015/01/15(木) 23:53:12.31ID:v2twkO80
using CsvHelper.Configuration;
0363デフォルトの名無しさん2015/01/15(木) 23:58:23.24ID:jCapVwH9
>>362
それでもダメなんだよ…

ググったりGitHubを見る限り、確かにCsvHelper.Configurationの下にいるはずなんだが
オブジェクトブラウザーで見ると、その下には
CsvHelper.Configuration
├CsvConfigration
└CsvConfigrationException
の二つの要素しか無い。

つい5日前に修正されたりしてるから、何かやらかしてるのかと疑って
半年前のバージョンを入れても同じだった。
0364デフォルトの名無しさん2015/01/16(金) 00:04:40.77ID:zayw9HUQ
>>363
Nugetでバージョン2.10.0入れてみたけど
CsvClassMapってクラス普通にある
0365デフォルトの名無しさん2015/01/16(金) 00:16:52.72ID:lMiMEz1x
>>364
おお、わざわざ試してくれてありがとう。
じゃあ俺の環境だけなんかおかしいんだろうな。

ちなみに、最初はVS2012のメニューにデフォで入ってるNugetから入れて(2.10.0)、
そのあと一度消して、パッケージマネージャーコンソールから2.7.0を入れてみた感じ。

ありがとう、とりあえず入れて再起動消して再起動とかいろいろ試してみることにするよ…。
0366デフォルトの名無しさん2015/01/16(金) 00:28:00.63ID:lMiMEz1x
まだ解決してないけど、このライブラリのパスらしきものが
CsvHelper.2.10.0\lib\net20\CsvHelper.dll
ってなってるから、.NetFramework2.0用のになってて機能が少ないのかなーと疑ってる。
win7だからデフォで3.5が入ってるはずだけど、どこかの設定で2.0扱いなんだろうか…
0367デフォルトの名無しさん2015/01/16(金) 00:43:41.85ID:lMiMEz1x
やはりnet20になっていたのが原因で、4.5用を参照してほしいのだが
参照が変わってくれる方法がわからない。

ので、このパスに4.5用を置き換えてしまうというひどいゴリ押しをしたところ、
無事CsvClassMapが見つかりました…。
根本解決してないけどいったん自己解決とします。ありがとうございました。

どなたかNugetしたライブラリのFrameworkバージョン参照の左右する要因が
わかるかたが居ましたら教えてください…。
ちなみにcsprojと同フォルダに生成されたpackages.configを覗いてみたところ、
ちゃんとtargetFramework="net45"になってました。ここを40や35にしてもダメだった。
0368デフォルトの名無しさん2015/01/16(金) 01:48:26.38ID:dn4hhy1Q
>>360
ありがとうございます。
本当に気付きませんでした
0369デフォルトの名無しさん2015/01/17(土) 16:36:52.44ID:dhp2WV1i
>>366,367
.NET 3.0、3.5はCLRは2.0のままだからライブラリは2.0用のを使う
.NET 4.5を入れて、VSのプロジェクトの設定を変えないと4.5用のは使われないだろ
でも、4.5って4を置換してしまうんだよね
0370デフォルトの名無しさん2015/01/18(日) 04:21:03.44ID:LPhlZ9GX
>>369
win7はデフォで4.5までの勘違いだったので、4.5まで入ってた。

ライブラリのフォルダはnet20,net30,net40と用意されてるので
各段階で使ってくれそうなものなんだけどなぁ。

それはさておき、ひとまずその「CLR」とやらについて理解すればよさそうかな。
調べてみる、ありがとう。
0371デフォルトの名無しさん2015/01/18(日) 06:48:11.05ID:vYre8goe
CLR≒.NET Frameworkって程度の意味しかないぞ
>>369はどっちかと言えばBCLの話のような気がする
0372デフォルトの名無しさん2015/01/18(日) 07:19:37.42ID:MPT8mUCE
同じじゃねーだろ
ASP.NETのアプリケーションプールの「.NET」の誤表記が
混乱を招いたために「CLR」に訂正されてんのに
同じとかマジキチ
0373デフォルトの名無しさん2015/01/18(日) 08:13:19.47ID:B8dPlRlQ
dictionaryに、stringをキーとして自作クラスを放り込んで使っています。
C++ではmapに放り込んでた自作クラスをデストラクタでdeleteしてたんですが、C#ではプロセス終了で勝手にdeleteしてくれるって認識で問題ないでしょうか?
0374デフォルトの名無しさん2015/01/18(日) 08:20:52.28ID:sNaTaheH
そうでもない
0375デフォルトの名無しさん2015/01/18(日) 08:54:14.96ID:YQ/T1PKN
>>373
スタックとstaticフィールドから参照を辿っていけば、オブジェクトはツリーを構成してると考えられる
そのツリーから一旦外れると、プログラムからはもうそのオブジェクトにアクセスする手段はない
そうなったオブジェクトはGCによって自動的に検出されて削除される
つまり、他のところから参照されてなければ、DictionaryがGCされるタイミングで一緒にGCされる
0376デフォルトの名無しさん2015/01/18(日) 08:59:36.09ID:wO+wr/rb
関係ありそうで質問と関係ないクソレスする明日ぺ
0377デフォルトの名無しさん2015/01/18(日) 09:20:08.48ID:CCXSPGR2
プロセス終了時にデストラクタは呼ばれない
従ってデストラクタが呼ばれる事を保証したい場合はusing使え
0378デフォルトの名無しさん2015/01/18(日) 09:23:01.91ID:vYre8goe
それデストラクタとは言わないぞ
0379デフォルトの名無しさん2015/01/18(日) 09:23:53.24ID:YQ/T1PKN
>>377
CLRが正常終了する限りは呼ばれるよ
プロセスが異常終了するときには呼ばれないことがあるけど、
その場合はusingもfinallyもファイナライザ(デストラクタ)も、
もっと言えばCriticalFinalizerObjectのファイナライザすらも呼ばれない
0380デフォルトの名無しさん2015/01/18(日) 09:40:04.01ID:T4pSBaJb
>CLRが正常終了する限りは呼ばれるよ
>プロセスが異常終了するときには呼ばれないことがあるけど

この馬鹿はいったい何を言ってるんだろう
0381デフォルトの名無しさん2015/01/18(日) 09:51:21.86ID:YQ/T1PKN
>>380
試してみたら?
それともCLRとプロセスの区別が理解できてないのかな?
厳密に言うともう一つのレイヤーとしてAppDomainも区別するべきなんだけど、
大抵はCLRと一対一だからあまり気にする必要はない
0382デフォルトの名無しさん2015/01/18(日) 10:12:22.18ID:YQ/T1PKN
・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に意味がないわけじゃなくて、すぐに解放処理を行えばそれだけ強制終了に巻き込まれる可能性が低くなるわけ
0383デフォルトの名無しさん2015/01/18(日) 10:13:45.86ID:sNaTaheH
本当に呼ばれないと困るものは
exitで呼んでもらう
0384デフォルトの名無しさん2015/01/18(日) 16:51:33.28ID:olpTk661
>>375
>DictionaryがGCされるタイミングで一緒にGCされる
同時にGCされる保障はないだろ

そもそも.NETではデストラクタ実行のタイミングは不定であって
自分で後処理する必要があるならIDispoable実装して正しく呼ばれるようにしろって話だ
0385デフォルトの名無しさん2015/01/18(日) 18:36:52.91ID:wXCrDAs4
IDispoable
0386デフォルトの名無しさん2015/01/18(日) 18:41:57.93ID:RIcPSvtC
この手の話は.NETが出始めの頃の入門書にはちゃんと書いてあるものが多かったね。
0387デフォルトの名無しさん2015/01/18(日) 19:15:13.55ID:xTVffeg8
ただIDisposableを正しく実装しているものをあまり見た記憶がない
0388デフォルトの名無しさん2015/01/18(日) 19:32:24.03ID:KCbWE0/4
確かに
0389デフォルトの名無しさん2015/01/18(日) 19:36:20.33ID:k4kja4YC
えっ?LINQ以外はちゃんとDisposeしてるだろ普通
0390デフォルトの名無しさん2015/01/18(日) 19:49:14.81ID:asVmvkSg
TaskだからDisposeしないもん!
0391デフォルトの名無しさん2015/01/18(日) 19:51:06.35ID:xTVffeg8
完全に間違ってるわけではないが
太鼓判押せないような実装がググると3番目に早くも登場する・・・
http://zecl.hatenablog.com/entry/20080226/p2
0392デフォルトの名無しさん2015/01/18(日) 19:53:42.50ID:T1+MJDlw
IDispoableはアンマネージドコードのリソース開放手段ってことになっているけどね
マネージドだけならGCに任せろってことなんだろうか?
0393デフォルトの名無しさん2015/01/18(日) 20:22:06.11ID:+O7FMjZM
>>392
アンマネージコードじゃなくてアンマネージリソースな
この場合のアンマネージリソースというのは必ずしもウィンドウハンドルのように
プラットフォームのネイティブなリソースというわけではなく、
解放タイミングをGC任せにできないリソース的なもの一般を指す
たとえば処理開始時に一時的にstaticフィールドにオブジェクトが登録されて
それが終わったらメモリリークを防ぐためにDispose呼んで登録解除させないといけないような処理をするクラスがあったとしたら
そのインスタンスはアンマネージリソースと考えられる
0394デフォルトの名無しさん2015/01/18(日) 22:30:48.89ID:YVtDUNQq
>>391
どんな問題があるのか教えて。
0395デフォルトの名無しさん2015/01/19(月) 01:41:36.01ID:TxtFW98x
個人的には
・lock(this)
・Dispose内ではlockしているのに、他のObjectDisposedExceptionをスローするメソッド内ではlockしてない
の2点が気になった。

前者はlockにおけるパターンの話なので今回はどうでもいい。
後者はIDisposableをスレッドセーフにしたいなら、
ObjectDisposedExceptionをスローする全メソッドでもlockしてDisposeの実行を阻止しておかないと
メソッドの実行中に別スレッドからDisposeできてしまうので破綻する。
0396デフォルトの名無しさん2015/01/19(月) 08:27:22.41ID:eQbtjaRR
IDisposableがロックを必要とするかは要件次第なのに、コメントもなくロックしてんのもいくない
0397デフォルトの名無しさん2015/01/19(月) 15:44:01.31ID:skbVpfat
そもそもなんのためにlockしてるんだろうな。
クラス自身をスレッドセーフに作るなら話は別だが、無条件にやるような事じゃないし、
無条件にスレッドセーフにする気がないなら意味はない。
ファイナライザのタイミングが非同期な事から微妙に思い違いをしたのかな?
0398デフォルトの名無しさん2015/01/19(月) 20:53:34.03ID:S6NhZW8x
ファイナライザのスレッドでデッドロックが発生したらどうなるの?
0399デフォルトの名無しさん2015/01/20(火) 00:39:13.74ID:uh/WEfIT
C#プロジェクトに既存追加でC#フォームの.cs追加したらフォーム追加されるはずだよね?
VS2010はそれでいけたはず。
だけどVS2013はソースは追加されるけどフォームじゃなくてただのソースとしか認識しない。
マークもフォームのマークになってないし。
ダブルクリックしてもフォームは開かなくてソースが開くだけ。
同じ人いる?
0400デフォルトの名無しさん2015/01/20(火) 01:12:05.61ID:d2Q8+WfP
>>399
System.Windows.Formsの参照を追加してないなんて間抜けなオチじゃないよね?
0401デフォルトの名無しさん2015/01/20(火) 14:36:18.13ID:FQ6ZWpD+
黙ってトンズラかよ
みっともねえ奴だな
0402デフォルトの名無しさん2015/01/20(火) 21:46:04.87ID:uh/WEfIT
>>400
もちろん、それはないと思う。
プロジェクトには他のフォームもあってちゃんと動いてるから。
今自宅なんで会社行かないと実際には見れないけど。

とりあえず新規でフォーム作って、追加したいcsとデザインcsの内容を丸々コピペしたら何とかいけたんで。
レスありがとう。

>>401
俺に言ってる?
君みたいに昼からネット出来るほど暇な人間じゃないから。
君、仕事もしてないプー太郎か?
こっちは汗水たらして働いてるんだから夜しかネット見れないんだよ。
くだらん書き込みでスレ汚ししないでちょっとは社会のためになる事しろ。
0403デフォルトの名無しさん2015/01/20(火) 21:58:25.49ID:tmzshQQd
>>400-401は同一人物なんだけどねw
別にどうでもいいけど。

社会のためってw
君は社会のため(笑)に無料で勤労奉仕してるのかもしれないが、普通は人が働くのは自分の私利私欲を満たすため。
世のため人のため(笑)はポエマー系の自己陶酔か、せいぜい言ってもついでのこと。
馬鹿じゃないの。
0404デフォルトの名無しさん2015/01/20(火) 22:07:24.49ID:pE35F5iH
Formとして開かれるかどうかは.csprojに書かれてるから消して再作成で正解
0405デフォルトの名無しさん2015/01/20(火) 22:11:04.31ID:tmzshQQd
っていうか気に障ったなら悪かったけど、>>401みたいに書いたのは
俺なら掲示板、特に2chみたいな人が多いところに質問を書いたら
最低1時間ぐらいはレスがないか確認するから。

そのぐらい煮詰まった状況だから質問してるし、そうなら一刻も早く問題を解決したいと思うから。
それが仕事ならなおさら。
0406デフォルトの名無しさん2015/01/20(火) 22:39:18.57ID:mp2703SQ
普通は一刻も早く解決したい問題を掲示板に書き込んでレス待ちしたりしません
0407デフォルトの名無しさん2015/01/20(火) 22:44:32.11ID:xzrs5cc2
まして2chなんか・・・
0408デフォルトの名無しさん2015/01/21(水) 00:19:30.44ID:9MeOdkdg
最近煽っていくスタイルの人増えたね
0409デフォルトの名無しさん2015/01/21(水) 04:12:59.61ID:4WIjvzZ5
簡単なカードゲーム作る場合に知っておいた方がいいメソッドと処理を適当でいいので教えて下さい
0410デフォルトの名無しさん2015/01/21(水) 07:22:35.22ID:e6Du7UL/
まずは本で基本的なデータ構造とアルゴリズムとAIを勉強しろ
描画とか入力に使うような.NETの機能ははっきり言ってどうでもいい
そんなものは必要になってから調べれば十分
0411デフォルトの名無しさん2015/01/21(水) 11:52:49.38ID:4WIjvzZ5
>>410
ありがとうございます
お勧めの書籍があれば教えて下さい
分かりやすいヤツがいいです
0412デフォルトの名無しさん2015/01/21(水) 12:07:21.48ID:r7KA7H6t
命令口調クンの言うことなんか聞いちゃだめw

アルゴリズムこそ必要な時(そんな時は何年に1度しかないw)に調べればそれで十分だし
今時データ構造って発想が20年ずれてる
0413デフォルトの名無しさん2015/01/21(水) 12:10:31.52ID:r7KA7H6t
だいたい、知らない人にいきなり命令口調でああしろこうしろとのたまうような奴が
どんな人間か、ちょっと想像力を働かせればわかるでしょw
0414デフォルトの名無しさん2015/01/21(水) 12:19:43.17ID:XB2BqeJs
丁寧口調で何の情報も出さないとかw
0415デフォルトの名無しさん2015/01/21(水) 12:20:33.08ID:XB2BqeJs
だいたいカードゲームなんてデータ構造がほとんど全てだろうに・・・
0416デフォルトの名無しさん2015/01/21(水) 12:24:39.19ID:n9HGlj5T
まれにUNOを言い忘れるAIつくってくれ
0417デフォルトの名無しさん2015/01/21(水) 12:25:58.20ID:qABZ5Od3
ここまで耳を傾けるに値するレスなし
0418デフォルトの名無しさん2015/01/21(水) 12:59:03.24ID:4WIjvzZ5
http://www.codereading.com/algo_and_ds/

ざっとググってみたのですが、データ構造とアルゴリズムって
こういう内容の事ですか?
このページ読むのって意義ありますか
0419デフォルトの名無しさん2015/01/21(水) 13:36:33.63ID:7gG9jU5j
とにかくさっさと作り始めて、詰まったら詰まるたびに調べる、
これが全ての正しい作り方だよ

仕事ならそうじゃないけど、趣味ならこれでいい

>>418
実際使うだろう情報がごく一部と、
基礎教養として知っておいた方がよく、いつか使うだろう情報が一部と、
基礎教養ではあるいつまでも使わない可能性の高い情報が大部分
0420デフォルトの名無しさん2015/01/21(水) 13:40:25.30ID:4WIjvzZ5
>>419
ありがとうございました
0421デフォルトの名無しさん2015/01/21(水) 13:41:40.93ID:2ayQ13oI
もちろん意味はあるだろうけど
必要に迫られていないときに見てもあまり実感がわかない気がする

個人的な興味や趣味で作るんなら
調べるべき内容も見当が付かないようなものはとりあえず作り始めてみるのをおススメ
完成すればそれでいいし、つまづくならつまづいた点をググったり聞いたりして見直せばよい
完成しても動作が遅いとかの不満点がでてそれを解消するために構造見直したりアルゴリズム見直したりすればよい
0422デフォルトの名無しさん2015/01/21(水) 13:43:59.49ID:2ayQ13oI
あらもろかぶり
0423デフォルトの名無しさん2015/01/21(水) 15:42:46.23ID:XB2BqeJs
一般的なものじゃなくてカードゲームに関連したデータやアルゴリズムな
C#以外の解説サイト(Flashが多い)みながら移植すると早く覚えられる
0424デフォルトの名無しさん2015/01/21(水) 22:54:50.33ID:e6Du7UL/
パズルやカード作りたがるような人って成果物よりもプログラミング自体を目的にできる人だと思うから
基礎からやってもいいんじゃない?
その手のゲームを作るのを楽しめるならアルゴリズムやデータ構造の勉強は同じくらい楽しいよ
0425デフォルトの名無しさん2015/01/21(水) 23:32:43.41ID:vtBK6gj6
IEnumeratorの自力実装すら必要になることはあんま無いのに平衡木とか絶対に使わん
というかほとんどの場合組み込み型で十分
0426デフォルトの名無しさん2015/01/22(木) 00:07:20.71ID:6/WUC/sn
結局、コンピュータって、人間がすることを高速且つ正確にやってくれるだけだから、
自分がコンピュータになったつもりで、プレイヤーの操作に対してどう動くかを考える
それをそのままコードに書いてみればいい。最初はそれで十分。
0427デフォルトの名無しさん2015/01/22(木) 06:25:50.52ID:QZdxOwsq
10の40乗ぐらいパターンを手入力するだけだよね
0428デフォルトの名無しさん2015/01/22(木) 07:41:01.33ID:6/WUC/sn
>>427
全パターンをデータで用意する実装をするのか?そうじゃないだろ?
アルゴリズムの”手続き”って、別にそれをコンピュータがやろうが人間が手作業でやろうが、
速さと正確さが違うだけ、という話。
0429デフォルトの名無しさん2015/01/22(木) 07:56:06.52ID:CNlyFltm
以上、鳥は地虫の視界を知らず、逆もまた然りという小話でした
0430デフォルトの名無しさん2015/01/22(木) 08:01:32.39ID:96GHEWiS
人間は手続きでものを考えないし
常にパターン認識に頼ってるからな
0431デフォルトの名無しさん2015/01/22(木) 17:36:43.75ID:bl3HtdF9
ものを考える人が倒れたよ

パターン
0432デフォルトの名無しさん2015/01/22(木) 18:20:38.32ID:55sdXS+Z
new StringBuilder().Insert(0, "w", 7).ToString();
0433デフォルトの名無しさん2015/01/22(木) 22:40:51.94ID:UnI2W8j2
"w"
0434デフォルトの名無しさん2015/01/28(水) 17:16:11.87ID:NY0MHdg2
String^ selectedEmployee = (String^)(ComboBox1->SelectedItem);

^ってどういう意味?
0435デフォルトの名無しさん2015/01/28(水) 17:26:36.94ID:slxhZiXo
C++CLIは専用スレがある
0436デフォルトの名無しさん2015/01/28(水) 17:32:16.10ID:969+z+pn
1123m4455566m889s
これ何切ればいいですか?
0437デフォルトの名無しさん2015/01/28(水) 17:54:21.30ID:TGPi2B7q
日本語でお
0438デフォルトの名無しさん2015/01/28(水) 18:04:22.61ID:52xyq1S9
何切ればいいかって麻雀かよ
0439デフォルトの名無しさん2015/01/28(水) 18:05:46.65ID:fP6N1Ce3
日本語おかしい奴多すぎw
0440デフォルトの名無しさん2015/01/28(水) 18:10:24.11ID:7LwetE8W
取り敢えず5を切って様子を見る
0441デフォルトの名無しさん2015/01/28(水) 18:18:11.52ID:969+z+pn
>>440
ありがとうございます
0442デフォルトの名無しさん2015/01/28(水) 19:32:04.32ID:kckrowtY
理牌ソート順が不親切
1 1 2 4 4 5 5 5 6 8 8 3m 6m 9s
0443デフォルトの名無しさん2015/01/28(水) 19:33:08.98ID:kckrowtY
回答書いてなかった

漏れなら 9s 切る
0444デフォルトの名無しさん2015/01/28(水) 21:21:53.16ID:H6HgeodE
>>442
6m分けてるけどイーペーコー無視?
9s切りは同意。
0445デフォルトの名無しさん2015/01/28(水) 21:30:05.41ID:eMyM1i22
6m残すとどこがイーペー?
0446デフォルトの名無しさん2015/01/28(水) 21:33:32.29ID:969+z+pn
今更言うと怒られそうですがスレ間違えました
あと4455566pのミスです
0447デフォルトの名無しさん2015/01/28(水) 23:27:16.74ID:NY0MHdg2
FormのLoad時にComboに"Name"と"Value"を入れて、
SelectedIndexChangedの時に"Value"を保存するって書いてるんだけど、
Comboのアイテムを変えずにデフォのValueを取得すると
その型が"System.Data.DataRowView"ってのが取得できて
値が取得できないんだけど、どうすればいいの?
0448デフォルトの名無しさん2015/01/28(水) 23:36:49.56ID:CFOgWxxn
半端に俺用語使わないで
ComboはComboBoxでいいとして、
NameとValueを入れるって具体的にどういう操作?
デフォのValueを取得って具体的にどういう操作?
アイテム変えたら望ましい値が取れるの?
0449デフォルトの名無しさん2015/01/28(水) 23:46:53.95ID:NY0MHdg2
あーすみません。
comboBoxのselectedValueはGuid型が入るんです。
FormのLoad時に入れてます。

マウスでComboBoxの選択アイテムを変えると正しいGuid型が取得できるのですが、
FormのLoad時に、そのまま選択アイテムを変えずに、
(正確にいうと、たまたまselectedIndex=0のアイテムが選択したいアイテムだった。)
comboBox.SelectedValueを取得するとGuid型ではなく、System.Data.DataRowView型が取得される為困っているという状況です。
0450デフォルトの名無しさん2015/01/29(木) 00:23:53.49ID:cejRXMiV
インターフェイスの使い所がイマイチよく分かりません
作ったり継承したりは出来るんですが、実際のゲーム中で
どのように使うのかが分からない・・・
なにかインターフェイスを使う練習みたいなのはありませんか?
0451デフォルトの名無しさん2015/01/29(木) 00:27:41.32ID:y6zSBPNz
練習なんかしなくても
継承したいクラスが2つ以上になったらお前はどうするんだ
その時インターフェースに頼ることになる
嫌でも
0452デフォルトの名無しさん2015/01/29(木) 00:32:52.62ID:cejRXMiV
>>451
つまりその辺が分かってないんです
C言語しかやった事ないんで、インターフェイスと継承がよく分からんのです
0453デフォルトの名無しさん2015/01/29(木) 00:34:01.68ID:cejRXMiV
よく分からんってのは書けないって事ではなく

継承しろ、とかAというメソッドを持つインターフェイスを作って実装しろ
とか局所的な事言われたらできるけど、実際のゲームで使えって言われたら
どう使えばいいのか分からない感じなんでうs
0454デフォルトの名無しさん2015/01/29(木) 00:46:20.92ID:/U+NLJDr
使わなくていいなら使わなくていいよ
0455デフォルトの名無しさん2015/01/29(木) 03:13:36.91ID:TT2nDia1
そのうち「あれ?ここで受け取るクラスにこのメソッドが絶対あることがわかってないと困るやん?」
って思う日が来るさ、来るまで使わなくていいよ
0456デフォルトの名無しさん2015/01/29(木) 03:32:10.52ID:1yNl5XWr
>>453
業務アプリしか作った事ないけど
武器という基底クラスを継承して剣クラスや弓クラス…
攻撃などキャラクター共通の振る舞いをインターフェイス…
みたいな感じじゃないの?

こうゆうのってデザパタも色々あるだろうし正解は無いと思うよ
アプリ毎に実装の仕方はバラバラみたいな事も聞くし
とりあえず自分の思うように作ってみれば良いじゃない
0457デフォルトの名無しさん2015/01/29(木) 09:00:08.52ID:cejRXMiV
>>454-456
ありがとうございます。
とりあえず、分からないまま進んでみて、必要になったら再度調べてみようと思います
0458デフォルトの名無しさん2015/01/29(木) 23:15:14.72ID:JFc1jEhn
一番分かり易いのがIEnumerable<T>じゃないか?

実装してればforeachできるよって奴
0459デフォルトの名無しさん2015/01/29(木) 23:35:43.22ID:TT2nDia1
用意されたインターフェースを実装するだけだと、
インターフェースの本質を理解しないまま終わっちゃいそうな気がする
0460デフォルトの名無しさん2015/01/29(木) 23:46:18.20ID:DDZscCYq
IDispose
を実装していればusing(var hair = new husahusa()){ }
できるようになる
0461デフォルトの名無しさん2015/01/29(木) 23:54:44.19ID:D0jUH4f8
var hair = new HairMock()
0462デフォルトの名無しさん2015/01/30(金) 00:20:31.68ID:/fUJpSUx
IEnumerableとIDispose以外に用意されているIFでよく使うものがあれば教えて下さい
0463デフォルトの名無しさん2015/01/30(金) 00:29:52.89ID:IKGpQS3u
IComparer
ListのSortで使う。
0464デフォルトの名無しさん2015/01/30(金) 01:21:44.98ID:/fUJpSUx
>>463
listのソートって基本的にLINQ(OrderByとかThenBy)使うのかと思ってました
0465デフォルトの名無しさん2015/01/30(金) 01:28:58.99ID:vPM9OO6W
OrderByでもIComparer<T>使うがな

クエリ式は知らん
0466デフォルトの名無しさん2015/01/30(金) 01:40:13.86ID:L50QtsSh
最近プログラムを覚え始めたばかりで恐縮ですが
Flot型を文字列にキャストして小数点2桁を含めて可能な限り続く桁数を表示させたいのですが
Floatに8桁以上の値を入れた時点で値が丸め込まれてしまってどうにも上手くいきません…
続く限り無限の桁を表示させるソースが公開されていれば教えてもらえませんか
0467デフォルトの名無しさん2015/01/30(金) 02:01:41.59ID:VHV9Z44l
floatの有効桁は7桁ぐらい
それ以上の精度が必要ならdoubleで
0468デフォルトの名無しさん2015/01/30(金) 02:04:37.13ID:VHV9Z44l
あ、範囲より精度重視ならdecimalがいいのかな
0469デフォルトの名無しさん2015/01/30(金) 06:54:15.49ID:lTWCXrI2
ひょっとして:ToString
0470デフォルトの名無しさん2015/01/30(金) 07:36:18.05ID:XjEPmedf
C#のクラスプログラミングで、コアな部分とUIの部分とをしっかりと分離しておけば、
UIの部分で.NETの環境がいくら変わっても、コアな部分との再連携さえしてやれば、再生可能だと思うんですが、
これって常識的な考え方でしょうか。

ASP.NET 4.5系と、ASP.NET 5(vNext)とで、大きくUI部分のフレームワークが変わってしまうらしいんで、
後々にまで使えるようにするには、しっかりと分離する構造にするしか策はないですよね。
04714702015/01/30(金) 07:43:21.87ID:XjEPmedf
>コアな部分とUIの部分とをしっかりと分離

しっかりと、カプセル化をやっておこうと考えています。
0472デフォルトの名無しさん2015/01/30(金) 07:59:48.58ID:BzgyBeS/
Webのモデルなんてたいがい大して複雑なモデルではないし
ある程度UIの構造を前提にして作るもんだから、DBとORM以外全とっかえでいいよ
それよりサブシステムを丸ごと捨てて差し替えても大丈夫なようにある程度の範囲で縦割りするのが大事
04734702015/01/30(金) 09:34:12.93ID:XjEPmedf
>>472
ありがとうございます。

>DBとORM以外全とっかえでいいよ
アプリのコアな部分を大切にして、UIは何にでも(たとえtuiでも)とっかえが利くようにしたいと思います。


>それよりサブシステムを丸ごと捨てて差し替えても大丈夫なようにある程度の範囲で縦割りするのが大事
サブシステムって、Webのフレームワークのことでしょうか?
縦割りとは、DBとORM(クラス関係・・・私の言うところのコアな部分)と、Web UIとの切り離しのことでしょうか。
0474デフォルトの名無しさん2015/01/30(金) 13:19:46.03ID:cv0bPviH
続く限り無限の桁を表示したいって話だからStringですら厳しいんじゃない?
ググった限りだとStringBuilderが20億バイトだって話だけど、無限には遠く及ばないし。
0475デフォルトの名無しさん2015/01/30(金) 14:51:34.28ID:X02ag5jj
>>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);
}
0476デフォルトの名無しさん2015/01/30(金) 19:26:32.38ID:2O05TJiO
昨日、C#で作ったexeとdllをILMERGEしたところ、コマンドは成功するのに
出力ファイルがサイズ0になってしまいます。
昨年ごろ、よくILMERGEしていて、全く問題なく出来ていたのですが。
そのC#は今年になって何も変更していません。ということは
.NET Frameworkか何かがWindowsUdateか何かで変わったのでしょうか?
みなさんILMERGE問題なく使えていますか?
0477デフォルトの名無しさん2015/01/30(金) 20:52:27.03ID:cv0bPviH
つい最近初めてC#触って、VS2012落として、ILMERGEも初めて落としてきて使ってるけど
何も問題ないよ。
0478デフォルトの名無しさん2015/01/30(金) 20:57:01.78ID:fa+fE2P9
.netのバージョン変えたんじゃないの?
0479デフォルトの名無しさん2015/01/30(金) 21:45:21.98ID:mdFgRgTF
>>477
つい最近でなぜに VS2012 なの?
VS2013 Community か冒険家なら VS2015 CTP とかじゃないのか?
0480デフォルトの名無しさん2015/01/30(金) 22:09:09.35ID:cv0bPviH
>>479
他人の作ったものを引き継ぐというクソ業務で、念のため元のと同じのにしておきたいって理由と、
2013の商用利用のセーフ範囲がよくわかんなかったから念のため2012にしておいた。
まぁ、使い道は社内のちょっとしたツールだからあまり心配してないけど。
0481デフォルトの名無しさん2015/01/30(金) 22:37:56.23ID:mdFgRgTF
>>480
ああ、仕事ならしょうがないね
納得したわ
0482デフォルトの名無しさん2015/01/31(土) 13:43:02.03ID:rOfMOZLe
Replaceメソッドを使用し、下記strから2,5,8と複数の文字を消したい場合
スマートな書き方はありますか?


string str = "123465789"
str= str.Replace("2", "");
str= str.Replace("5", "");
str= str.Replace("8", "");
0483デフォルトの名無しさん2015/01/31(土) 13:51:49.58ID:Zp0atq7E
Regex.Replace(str, "[258]", "")
0484デフォルトの名無しさん2015/01/31(土) 14:14:21.40ID:rOfMOZLe
>>483
ありがとうございます。早速やってみます!
0485デフォルトの名無しさん2015/01/31(土) 16:57:42.32ID:pjmSNE++
複数のテキストボックスとボタンがあり
ボタンを押すと「ファイルを開く」ダイアログボックスを表示され
選択されたファイルのパスがテキストボックスに表示されます。
ボタンクリック時のイベントには同じような処理が入るため
共通化したいがテキストボックスに値をセットしてあげる部分がそれぞれで違うため
どう共通化してあげればいいのかわかりません。
どなたかご教授お願い致します。
0486デフォルトの名無しさん2015/01/31(土) 17:04:59.67ID:Zp0atq7E
private void button1_Click(object sender, EventArgs e)
{
  OnButtonClick(textBox1);
}
private void button2_Click(object sender, EventArgs e)
{
  OnButtonClick(textBox2);
}
0487デフォルトの名無しさん2015/01/31(土) 17:15:27.37ID:pjmSNE++
>>486
ありがとうございます
バカな質問をして失礼しました・・・
0488デフォルトの名無しさん2015/01/31(土) 18:16:43.71ID:Aa4houZl
ん?俺はわからん
0489デフォルトの名無しさん2015/01/31(土) 18:49:34.07ID:K0xM/bq9
クリックイベントを登録する関数を同じのにすればいいんじゃね?
0490デフォルトの名無しさん2015/02/01(日) 02:19:03.64ID:s9ype9zZ
最後にやりたい事だけ匿名メソッドで渡すようにする手もある、初心者向けじゃないけど
0491デフォルトの名無しさん2015/02/01(日) 04:40:59.93ID:RmYenSV2
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#ではどのように表記すればよろしいでしょうか。
0492デフォルトの名無しさん2015/02/01(日) 05:00:58.39ID:82CyRnjV
>>491
イベントを使う

コールバックで値を返したいのならFuncデリゲートを使う
0493デフォルトの名無しさん2015/02/01(日) 05:10:47.88ID:RmYenSV2
>>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 等でググったのですが
「インターフェイスを実装したクラスを作って、それをインスタンス化すればいいよ!」という回答ばかりで、インターフェイスを直接引数に与える方法は見つかりませんでした。
0494デフォルトの名無しさん2015/02/01(日) 06:15:56.60ID:WbEj9GF4
>493
C#にはそのような文法はありません。
addWatchTarget(new MyCallbackSet{
 Update = ()=>{},
 Fail = ()=>{}
});
としてください。
大体JAVAだって、そこはラムダで書くだろ普通
b.setCallback(() -> {
  ...
});
0495デフォルトの名無しさん2015/02/01(日) 06:17:18.46ID:RmYenSV2
>>494
ありがとうございます。勉強になります
0496デフォルトの名無しさん2015/02/01(日) 06:48:17.57ID:wbarHwVK
おまえらなんでこんな朝早くからこのスレにいるの?
さすがにおかしいだろ・・
0497デフォルトの名無しさん2015/02/01(日) 07:39:25.95ID:Rluj7UaD
まだ土曜の31時じゃないか
0498デフォルトの名無しさん2015/02/01(日) 07:50:15.90ID:OM+Gcdnk
高階関数が使える言語ならいちいち名前付けずに
addWatchTarget(() => { /* Update */ }, error => { /* Fail * });
とするのが普通だと思う
もしくは、実装に少々手間はかかるが
addWatchTarget(() => { /* Update */ }).OnFailed(error => { /* Fail * });
だね
一般的に>>494のような渡し方は格好悪いからあまりやらない
0499デフォルトの名無しさん2015/02/01(日) 08:07:40.39ID:PJUlZZR8
2個ぐらいならそうかもね
0500デフォルトの名無しさん2015/02/01(日) 08:24:34.28ID:sAQPzt4/
>>496
ソフトウェア従事者の多くは趣味プログラミング
もちろん俺を含むw
0501デフォルトの名無しさん2015/02/01(日) 10:20:20.00ID:sjXjc1T+
趣味プログラマがC#スレにいるわけない
0502デフォルトの名無しさん2015/02/01(日) 14:12:41.88ID:VQFaI0Rd
趣味ではない。
使命である。
0503デフォルトの名無しさん2015/02/01(日) 18:02:14.66ID:s9ype9zZ
義務
宿命
運命
0504デフォルトの名無しさん2015/02/03(火) 10:15:18.44ID:vbeiF6Sp
最近のC# 5.0あたりの紹介が充実している本って何がお薦めですか
0505デフォルトの名無しさん2015/02/03(火) 21:19:50.89ID:eVaOlmBf
C# Language Specification Version 5.0
0506デフォルトの名無しさん2015/02/07(土) 04:24:26.14ID:J39kTiaw
今度、ASP.NETのサーバコントロールを使うC#のプログラムをつくりたいと思っています。
Visual Studio 2010 proを持っていて、ASP.NETプログラムを作ったことがあるんですが、
無料のVS communityと、どちらを使えば良いんでしょうか。
悩みます。
0507デフォルトの名無しさん2015/02/07(土) 06:30:52.04ID:L5zJgfED
ライセンスが許せば2013Communityでいいよ
Web Essentialsとかあるし
0508デフォルトの名無しさん2015/02/07(土) 13:55:50.70ID:J39kTiaw
>>507
ライセンスの面では大丈夫です。やはり、新しいバージョンの方がいいですよね。
せっかく、VS 2010 PROを購入したのに、ちょっともったいなーい。
0509デフォルトの名無しさん2015/02/07(土) 14:06:21.77ID:J39kTiaw
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用のプログラムを開発することはできるのではないかと思うんですが、
どうして駄目なんでしょうか。

おねがいします。
0510デフォルトの名無しさん2015/02/07(土) 14:09:22.63ID:L5zJgfED
両方とも2.0以降の任意のバージョンが選べる
0511デフォルトの名無しさん2015/02/07(土) 14:10:47.61ID:eMOSZTzl
>>509
(1)IISの設定
(2)できるけどむしろなんで「どうして駄目なんでしょうか」なの?
0512デフォルトの名無しさん2015/02/07(土) 14:18:31.17ID:M1n3dGF8
>>509
> (2).NETフレームワーク4.5.1とIDE(VS community 2013)の関係がすっきりしません。community 2013単なるIDEだと思うので、
> これをつかって.NET 2.0用のプログラムを開発することはできるのではないかと思うんですが、
> どうして駄目なんでしょうか。
勘違いしてる。VS2013自体が動くのに.NET Framework4.5.1が必要。作成するプログラムの対象フレームワークは選べる。
0513デフォルトの名無しさん2015/02/07(土) 15:36:06.44ID:J39kTiaw
レスありがとうございました。

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のバージョンに対応しているのでしょうか。
0514デフォルトの名無しさん2015/02/07(土) 15:57:28.04ID:o5egNras
foreach文でindexを取得するとき、
Select( (value,index)=>new{value,index})で取得できると思うんですが、
どういう処理がされているか教えていただけないでしょうか
0515デフォルトの名無しさん2015/02/07(土) 16:14:30.43ID:ZvzmbQxk
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);
}
}
0516デフォルトの名無しさん2015/02/07(土) 17:06:07.21ID:o5egNras
>> 515
ありがとう。直感的にだけど理解できました。
0517デフォルトの名無しさん2015/02/07(土) 18:53:41.86ID:EjCk1lJH
>>508
そのもったいない精神、命取りになるぞ。
単純に比較して良いものを使えば良い
0518デフォルトの名無しさん2015/02/07(土) 22:46:54.91ID:j6Fd7dob
>>513
IISアプリケーションプールの設定で選択できる
大抵は最新Verのにしときゃ動くがな
0519デフォルトの名無しさん2015/02/08(日) 05:09:40.91ID:kndmEONy
>>517
レスありがとう。
VS communityをインストールします!

>>518
アプリケーションプールってありましたね。
変わった概念だなと思いました。
しばらく触っていないんで、すっかり遠い記憶になっていました。
0520デフォルトの名無しさん2015/02/08(日) 17:29:33.54ID:s109R4ug
インスタンスを自分自身で破壊することはできますか?
変数にnullを設定するのでなく、
特定のメソッドを呼び出したら自動的に参照を外すようにしたいのですが。

var obj = new Hoge();
obj.Destroy();
print(obj); //null
0521デフォルトの名無しさん2015/02/08(日) 17:35:45.48ID:5CTZvvRC
無理
0522デフォルトの名無しさん2015/02/08(日) 17:40:56.82ID:4MKIaqhP
意味わかんないw
0523デフォルトの名無しさん2015/02/08(日) 17:41:00.54ID:N2lxbw9z
>>520
何のためにそんなことするの?
たぶん、IDisposable実装してDispose()を呼び出すのがやりたいことに近いと思うけど。
0524デフォルトの名無しさん2015/02/08(日) 17:47:37.15ID:/5XFyazc
>>523
それやったとしてもマネージド部分はGC任せなんでは?
0525デフォルトの名無しさん2015/02/08(日) 17:54:36.05ID:N2lxbw9z
>>524
まぁ、そうなんだけどね。
0526デフォルトの名無しさん2015/02/08(日) 17:57:49.48ID:5CTZvvRC
ローカルスコープではそんなこと気にしなくてもJIT/インタープリターが不要と判断した時点で参照は切れる
0527デフォルトの名無しさん2015/02/08(日) 18:07:44.64ID:4RGx9zBt
>特定のメソッドを呼び出したら自動的に参照を外すようにしたいのですが。

デリゲートの話だとばっかり思っていた。
0528デフォルトの名無しさん2015/02/08(日) 18:21:32.57ID:Wac/ZBhZ
無理。事情を話してくれないなら以上。
0529デフォルトの名無しさん2015/02/08(日) 18:34:03.57ID:w6gtl+gB
>>520
var obj = new Hoge(&obj);
みたいにしとけばできると思う
0530デフォルトの名無しさん2015/02/08(日) 18:35:29.59ID:w6gtl+gB
>>529
C++ と勘違いした、忘れてくれ
0531デフォルトの名無しさん2015/02/08(日) 18:57:37.53ID:s109R4ug
520です。
Destroyを呼び出すとアプリケーション内で
そのオブジェクトが消滅することを確定させたいです。

nullのセットし忘れとか防ぎたいんです。
0532デフォルトの名無しさん2015/02/08(日) 19:00:51.80ID:P0HWFm4I
>>531
>>527
0533デフォルトの名無しさん2015/02/08(日) 19:01:37.12ID:P0HWFm4I
間違えたw
>>531
>>528
0534デフォルトの名無しさん2015/02/08(日) 19:03:01.86ID:s109R4ug
複数のオブジェクトがそれを参照しているわけで、
それらすべてにnullを設定していかないといけないんでしょうか?
0535デフォルトの名無しさん2015/02/08(日) 19:23:48.94ID:JJBPIwXc
参照があれば生きてるしなければそのうち死ぬから大丈夫
0536デフォルトの名無しさん2015/02/08(日) 19:23:52.99ID:BaY7N69f
>>531
なんか根本的に考え違いをしてるようにしか思えんけど...
まあ、

pubic event EventHandler SetMeFree = () => {};
....
public void Destroy() { SetMeFree(); }

とかしておいて、

private Destroyable _hoge;
....
void Hoge()
{
....
  _hoge = new Destroyable();
  _hoge.SetMeFree += () => { _hoge = null; };
....
}

とか(笑)
0537デフォルトの名無しさん2015/02/08(日) 19:28:22.42ID:orDJkmnf
スコープから抜ける前にobjにnull代入しないと
消えないと勘違いしてるのか?
0538デフォルトの名無しさん2015/02/08(日) 19:30:22.43ID:8Z+tyYct
>>534
当然
だって、その参照している人はまだそのオブジェクトにアクセスするかもしれんでしょ?終了処理だとかで。

だから、あくまでも参照している所の、不要となったタイミングでnullを設定するようにすべき
0539デフォルトの名無しさん2015/02/08(日) 19:33:07.31ID:Pwx84Qtq
Twitter乗っ取られたんだが奪い返すことは可能?
0540デフォルトの名無しさん2015/02/08(日) 19:34:46.24ID:Pwx84Qtq
Twitter乗っ取られたんだが奪い返すことは可能?
0541デフォルトの名無しさん2015/02/08(日) 19:38:02.11ID:WC6wMHS0
>>534
Hogeインスタンスを参照してるオブジェクトが自作クラスなら可能
そうでないなら無理
0542デフォルトの名無しさん2015/02/08(日) 19:42:35.35ID:N2lxbw9z
null代入よりも、出来るだけローカルスコープでオブジェクトを保持するようにしようよ。
いちいちnull代入するコードは例外とかに弱いし。
0543デフォルトの名無しさん2015/02/08(日) 20:05:43.65ID:s109R4ug
ローカルで処理できたら聞いていません。

オブジェクトの参照は勝手に破棄できないから、
マネージャークラスを作って監視しないといけないんですね。
0544デフォルトの名無しさん2015/02/08(日) 20:09:01.54ID:/5XFyazc
>>531
IDisposable実装してないクラスだったら放置プレーで良いんじゃないの?
IDisposableならusing使えばエエだよ
0545デフォルトの名無しさん2015/02/08(日) 20:10:13.49ID:/5XFyazc
>>543
じゃ、放置プレーで。
.NETオブジェクトはどMだから大丈夫だよw
0546デフォルトの名無しさん2015/02/08(日) 20:11:21.97ID:TwaU4H9o
そうじゃなくて、そもそも同じインスタンスを、プログラマが管理できなくなるぐらい多くの変数で
参照してるのが間違ってるんだよたぶんw
0547デフォルトの名無しさん2015/02/08(日) 20:18:08.90ID:/Wbs4GAm
>>546
それなw
GCの無い言語をやったことがないか
やってはいるが中途半端にしか修めて来なかった者の末路だな
0548デフォルトの名無しさん2015/02/08(日) 20:26:17.79ID:s109R4ug
分かった。
Nullっぽい挙動させればいいんだ。
そうすればマネージャー作らなくていいし。
0549デフォルトの名無しさん2015/02/08(日) 20:30:50.26ID:i1ECf4Ro
単なるObjectDisposedExceptionの予感
初めから見えた答えだったのにずいぶん遠まわしでしたね
0550デフォルトの名無しさん2015/02/08(日) 20:32:26.32ID:5CTZvvRC
WeakReferenceというのもある
0551デフォルトの名無しさん2015/02/08(日) 20:56:06.86ID:/5XFyazc
低レベルなオイラは話についていけん orz
0552デフォルトの名無しさん2015/02/08(日) 21:18:45.13ID:3dFU6zTj
>>548
nullっぽい挙動って何?
IDisposableを実装するのか、もしくは単にIsValidプロパティみたいなフラグを作るとか?
0553デフォルトの名無しさん2015/02/08(日) 21:27:52.36ID:/WGb+9gP
結局>>549 ってことだよな
Streamとかといっしょ
0554デフォルトの名無しさん2015/02/08(日) 21:53:59.43ID:s109R4ug
>>549
ObjectDisposedExceptionとかそういうんじゃないです。
>>552
単にプロパティつけるか、
自分自身をラップするかとか考え中です。
0555デフォルトの名無しさん2015/02/08(日) 22:14:38.72ID:i1ECf4Ro
ああ、分かってますよ
初心者には違うように思えるんでしょうね
0556デフォルトの名無しさん2015/02/08(日) 22:22:41.25ID:/WGb+9gP
>>554
もっと具体的な状況がわからないと
他のクラスも参照持ってるのに勝手に破棄して良くて、破棄後のアクセスはバグとしない状況がわからん
開放時にDisposedイベントが起こるやつはあるけど

単にプロパティをつけるって結局IDisposableにのフラグを公開してるだけだし
0557デフォルトの名無しさん2015/02/08(日) 22:52:52.09ID:s109R4ug
あるターゲットを引数に取ったアクション?イベント?クラスを登録していき、
あるタイミングでターゲットにダメージを与えたりする。

ダメージが致死量になると、destroyが発生する。
後続が同じターゲットをとっていた場合は、
すでに破壊されているのでそのターゲットはnullになっていて欲しいです。

じゃあ、IDisposableというの勉強してみます。
0558デフォルトの名無しさん2015/02/08(日) 23:03:15.93ID:/5XFyazc
>>557
その用途だとIDisposableは関係無いな。
何したいのか分からんがオブジェクトの破棄じゃなくオブジェクトのプロパティで良い気がする。

それ以前にオブジェクト指向に毒され杉だねw
0559デフォルトの名無しさん2015/02/08(日) 23:25:17.70ID:Wac/ZBhZ
>>557
破壊された状況=nullという設計をした時点で詰んでる
蓄積ダメージを元にIsDestroyedプロパティを実装するんだな
>>558毒され過ぎ同意見w
0560デフォルトの名無しさん2015/02/08(日) 23:30:30.06ID:/WGb+9gP
>>557
ゲームみたいなものか

nullにしなくてもターゲットに破壊フラグをつけて、攻撃時に判定すればいい
むしろ、破壊時にそのターゲットを対象にしているアクションをすべて消すほうがわかりやすい

どれにせよ、ゲームに不慣れなオブジェクト思考持ち込みすぎると破綻するぞ
0561デフォルトの名無しさん2015/02/08(日) 23:35:17.71ID:/5XFyazc
個別のインスタンス作らなくても、何らかのデータ構造で管理出来そうだが。
0562デフォルトの名無しさん2015/02/08(日) 23:35:36.87ID:4RGx9zBt
大昔に有った”インベーダーゲーム”みたいに、数が少なくなると処理を早くしたいのかな
0563デフォルトの名無しさん2015/02/08(日) 23:36:14.84ID:rZV+tnJ8
Reactive Extensions使えよ
0564デフォルトの名無しさん2015/02/08(日) 23:41:40.30ID:/5XFyazc
良くわかってないのに非同期処理を使うとデッドロックしまくりになりそうw
0565デフォルトの名無しさん2015/02/08(日) 23:56:50.95ID:s109R4ug
ゲーム作ってみて分かったんですが、
オブジェクト指向を変に意識すると
基礎から先が複雑になってきて、わけわからなくなってきちゃいますね。

オブジェクトが気を効かせてやるべき処理をやってくれんだけど、
手続き的な記述を減らすと逆に分かりにくくなったり。

プログラムって難しいですね。
0566デフォルトの名無しさん2015/02/09(月) 00:10:34.20ID:h/1LxHEV
ゲームだと全く関係ないオブジェクトの数値が計算式に絡んできたりするからきれいに作るのは難しい
0567デフォルトの名無しさん2015/02/09(月) 00:13:21.53ID:AazwEOnB
全てをオブジェクト指向で作る必要はないし、向いてるところは使ったらいい
臨機応変て言葉知らないか
0568デフォルトの名無しさん2015/02/09(月) 00:22:02.87ID:Ntbz6K3q
だーからオブジェクト指向の是非なんて大層は話じゃないってw
単に質問者がまともな設計ができないだけ。

だから何で同じインスタンスをプログラマが管理できないような数の変数で参照する必要があるんだってw
そんなの間違いなく質問者がそれが必用だと思い込んでるだけだと断言できる。
0569デフォルトの名無しさん2015/02/09(月) 00:25:23.82ID:mz/setD5
趣味グラマなんで勘弁してください
0570デフォルトの名無しさん2015/02/09(月) 00:25:24.86ID:AGlUXWbh
神様クラス
0571デフォルトの名無しさん2015/02/09(月) 00:42:15.74ID:xxoZlwvR
(神クラス作っちゃ)いかんのか?
0572デフォルトの名無しさん2015/02/09(月) 01:12:20.86ID:p5G7+fMc
八百万の神クラスとして責務を分割しよう
0573デフォルトの名無しさん2015/02/09(月) 06:30:28.87ID:5xuX5Rg+
八百万の神クラスは
基底に神クラスを作って派生、じゃなくて完全に別々の神クラスにしたほうがいいのだろうか?
0574デフォルトの名無しさん2015/02/09(月) 06:53:51.77ID:qcjAyEz2
みんなWeakReference使ってる?
0575デフォルトの名無しさん2015/02/09(月) 07:00:25.27ID:7lZ37zN3
フレームワーク的なライブラリ作ってるんならともかく
アプリでWeakReference使うのは設計が破綻してる証拠
0576デフォルトの名無しさん2015/02/09(月) 07:02:07.62ID:KnnpIsQe
>>572
8,000,000万のメソッドを持ったクラス?
0577デフォルトの名無しさん2015/02/09(月) 07:02:49.66ID:s0dg7c6g
>>574
イベントハンドラに寿命短めのオブジェクトを追加しまくるときくらいしか使わない
GCは相互参照になってても効くし
0578デフォルトの名無しさん2015/02/09(月) 07:03:19.67ID:KnnpIsQe
桁間違えたw
0579デフォルトの名無しさん2015/02/09(月) 08:07:57.32ID:knlwFUV0
>>578
100億万円とか言っちゃう小学生いるよなw
0580デフォルトの名無しさん2015/02/09(月) 08:24:17.80ID:iJdyGTL3
Microsoft、オープンソースの.NET実行エンジン「CoreCLR」を公開 | スラッシュドット・ジャパン オープンソース
http://opensource.slashdot.jp/story/15/02/08/0721252/
0581デフォルトの名無しさん2015/02/09(月) 10:13:18.20ID:LQhyRrVo
>>576
やおよろずの神って知らんのか?
教養がないとそのようか反応になるのだな
0582デフォルトの名無しさん2015/02/09(月) 11:01:53.47ID:41/w1wVG
いやいやw
この場合>>581のレスこそが一番教養が無いw
0583デフォルトの名無しさん2015/02/09(月) 12:04:48.04ID:LQhyRrVo
>>582
おめー短大卒なめてんのか
0584デフォルトの名無しさん2015/02/09(月) 12:12:46.97ID:cxy5oANg
馬鹿の代表だな
0585デフォルトの名無しさん2015/02/09(月) 12:20:39.02ID:9fKE6Mq7
>>581
ネタジョークにマジレスすんなヨ
0586デフォルトの名無しさん2015/02/09(月) 12:43:01.03ID:58HS4m5W
>>581
神クラスって知らんのか?
教養がないとそのような反応になるのだな
0587デフォルトの名無しさん2015/02/09(月) 12:48:28.24ID:U/1UCdd/
まあ、教養ある奴はむやみに学歴持ち出さないしな
0588デフォルトの名無しさん2015/02/09(月) 13:47:23.34ID:jsF3Jw1x
同級生も高学歴だからな
0589デフォルトの名無しさん2015/02/09(月) 14:19:43.51ID:9fKE6Mq7
>>586
全知全能の神クラスだね。
八百万の神じゃ全てのものが神になってしまうので意味が違う。
0590デフォルトの名無しさん2015/02/09(月) 14:42:29.63ID:jsF3Jw1x
IPv6対応が必要
0591デフォルトの名無しさん2015/02/09(月) 19:21:31.66ID:1J4Ibh0j
唯一神はシングルトンにしとけよ
0592デフォルトの名無しさん2015/02/09(月) 19:40:41.41ID:sBN76GX2
移民族
0593デフォルトの名無しさん2015/02/09(月) 20:59:58.55ID:KnnpIsQe
>>591
abstractクラスになってるんで色々面倒な事が中東で起きてるんだが。
0594デフォルトの名無しさん2015/02/09(月) 23:10:46.63ID:ImhpazP+
ばっか、あれはabstractじゃなくて仕様が既にバグだろ。無能営業の三枚舌。
0595デフォルトの名無しさん2015/02/09(月) 23:57:25.96ID:bwEZbR4B
http://jbbs.shitaraba.net/sports/42269/
0596デフォルトの名無しさん2015/02/10(火) 07:00:29.60ID:nFpM6d20
だから八百万の神クラスは基本クラスを作って派生させるか
完全に別個のクラスを作るのかが問題なんだって。
仮に基本クラス派生だとするとメンバーやIFは何を持たせるのかが問題。
0597デフォルトの名無しさん2015/02/10(火) 08:52:13.39ID:Hs3TdF+4
カンブリア爆発
0598デフォルトの名無しさん2015/02/10(火) 10:08:25.50ID:SW06GOy5
八百万の神はインスタンスが別なだけで同じクラスだったり
0599デフォルトの名無しさん2015/02/10(火) 10:11:41.31ID:2yjbLZwe
すべてのクラスには神が宿っているから
それぞれのクラスを大切にしてあげてねみたいなフワフワした話じゃないのか
0600デフォルトの名無しさん2015/02/10(火) 11:15:02.50ID:xEK50zds
神も人間も草木も虫も、基底クラスはObjectなのである
0601デフォルトの名無しさん2015/02/10(火) 12:00:06.44ID:SW06GOy5
神はObjectなのかなあw
0602デフォルトの名無しさん2015/02/10(火) 12:02:55.08ID:U2zkTKp9
神は、霊です。宇宙全体におよぶ
0603デフォルトの名無しさん2015/02/10(火) 13:05:13.45ID:sO94tH0V
面白いと思って書いてんのかこれ?
八百万の最初のあたりで終わった冗談をなにぐだぐだやってんだか
0604デフォルトの名無しさん2015/02/10(火) 13:14:12.29ID:2S9bXvZz
お、おう
0605デフォルトの名無しさん2015/02/10(火) 13:32:22.10ID:I3Nqh774
(もともとの意味の)ヲタっていうか、コミュニケーション能力が欠如してる奴独特のノリだね。
きっとモニターの前で自分のレスに例の独特の引き笑いをしてると思うよw
気色悪い。
0606デフォルトの名無しさん2015/02/10(火) 13:44:51.87ID:foI8NMh4
おっとそれ鏡だぜお兄さんw
0607デフォルトの名無しさん2015/02/10(火) 17:57:22.45ID:QtCdRKur
>>605
ステレオタイプ馬鹿の典型だな
0608デフォルトの名無しさん2015/02/10(火) 17:59:05.02ID:AMEUt00J
既に派生クラスに分化したオブジェクトに、簡単な刺激を加えるだけで基底クラスに!
0609デフォルトの名無しさん2015/02/10(火) 22:51:13.03ID:etTOQNm8
Objectが自分で分化して勝手に育ってくれたらいいのに
0610デフォルトの名無しさん2015/02/10(火) 23:41:17.65ID:Dn84JQPS
STAPオブジェクト
0611デフォルトの名無しさん2015/02/11(水) 11:10:33.06ID:WZeVYUoD
>>610
var aStap = new STAP();
return aStap.Exist;

は、以下のプログラムと等価

return false;
0612デフォルトの名無しさん2015/02/11(水) 11:22:01.61ID:uxm1HOmW
STAPはあります!
0613デフォルトの名無しさん2015/02/11(水) 11:22:56.46ID:HV6QGBu9
もう休め
0614デフォルトの名無しさん2015/02/11(水) 12:23:52.58ID:WZeVYUoD
c#のオブジェクト指向は、あくまでも型定義の拡張だから、Smalltalkのようなメッセージ指向の
使い方をしようとすると破綻する。

それ以前に底辺デジタル土方にオブジェクト指向は要らない。
0615デフォルトの名無しさん2015/02/11(水) 13:13:27.60ID:nrJCL00/
いるだろ

なんぼ底辺でも
今のシステムVB6に置き換えろとか言われたら死ぬ
0616デフォルトの名無しさん2015/02/11(水) 13:17:28.95ID:WZeVYUoD
>>615
VB6のIDEがVisual Studio並みの機能を持てば要らないのでは?

底辺デジドカの作る難解なオレオレOOスパゲティコードをメンテするよりVB6のが遥にマシ。
0617デフォルトの名無しさん2015/02/11(水) 13:17:46.71ID:HV6QGBu9
理想的な結末じゃん
0618デフォルトの名無しさん2015/02/11(水) 13:35:21.06ID:nrJCL00/
ハンドルの山に埋もれて死ね
0619デフォルトの名無しさん2015/02/11(水) 14:00:00.51ID:XzdqNrda
C#が向かってるのはSmalltalk的なOOではなくイミュータブルなオブジェクト+関数だろ
ある意味COBOL的なスタイルだから「賢いオブジェクト」よりはドカタ向きだよ
0620デフォルトの名無しさん2015/02/11(水) 15:42:20.05ID:+zb7i42P
>>616
そのまま底辺デジドカに埋もれてろよ
0621デフォルトの名無しさん2015/02/11(水) 16:08:48.33ID:sK01Ui9b
オブジェクト指向って機能じゃなくて設計の考え方でしょ
別にVB6でもオブジェクト指向で設計してコード書くことはできる

メンテがつらいのはそもそも設計がおかしいか設計書が残ってないか設計と実装が合ってないかのどれか
0622デフォルトの名無しさん2015/02/11(水) 16:38:03.88ID:CW8IIrT0
設計が学べるおすすめの書籍ってないかな
出来れば電子書籍化されてるもので
0623デフォルトの名無しさん2015/02/11(水) 18:38:32.87ID:INE2YLdo
ttp://www.amazon.co.jp/dp/B00GXRUP2M/
0624デフォルトの名無しさん2015/02/12(木) 23:37:57.90ID:rbj/z20K
とりあえず、1ファイル1000行越えず構造化できてれば、なんでもいい
0625デフォルトの名無しさん2015/02/14(土) 11:56:10.36ID:G8GjWWhK
wikiか何かによると、バッファオーバーラン問題で、Cプログラマをサイズ判定付きの言語に移行させるためにC#を作った部分もあると
でもサイズ判定→タイプセーフ→タイプセーフなのだ→intとint?は違うのだって、当初の目的忘れてやり過ぎじゃないの?

void OpenGate( int gatekey ) { }

int? mykey = null;
OpenGate( (int)mykey );

こんなことしてコンパイラ黙らせてもnullで実行時エラーが起きるのは同じだし、開発効率悪いだけで何の役にも立ってない
OpenGate( mykey ); これで実行時エラーが起きれば十分

mykeyのnullはRPGの旅人がまだ鍵を入手してない状態に相当し、鍵がなくとも旅人は存在しうる
OpenGateは鍵が必要な門で、gatekeyが必須という性質
鍵がなければ門を開けようとしてエラーになるのは正しい現象で、その現象は門の性質に由来するもの
(int)で旅人が自分でチェックするのは性質の所在がおかしい
0626デフォルトの名無しさん2015/02/14(土) 12:00:12.28ID:pzGXmezT
・黙らせ方が間違ってる
・DB用に作った機能なので

お引取りを。
0627デフォルトの名無しさん2015/02/14(土) 12:02:08.71ID:O6svWQnE
初心者あるある

自己批判の欠如
釈迦に説法
0628デフォルトの名無しさん2015/02/14(土) 12:07:28.56ID:ISQup94G
必ずしも安全でない操作であることをプログラマに意識させることに役立ってるじゃないか
お前がそこでイラッとしたのがまさにその証拠だろ?
nullがタイプセーフじゃないのは典型的な普通の静的言語の大きな欠陥として昔から言われてることで、
そもそもそこが問題だと思うならHaskellとかガチな静的型に行くと幸せになれる
0629デフォルトの名無しさん2015/02/14(土) 12:12:42.89ID:pzGXmezT
もっと言うと、NullableはC#じゃなく.NETの機能なんで
煽るなら.NETについて煽った方がよいと思います
0630デフォルトの名無しさん2015/02/14(土) 12:13:37.07ID:G8GjWWhK
未設定を0や-1で代替すると値として0や-1が使えなくなる
日付の未設定を何かの日付で代替すると気持ち悪いことになる
別途未設定フラグを持って分岐処理すると開発効率が悪くなる
0631デフォルトの名無しさん2015/02/14(土) 12:13:44.33ID:ISQup94G
>>629
そりゃちょっと無理があるな
C#の構文糖衣で使う前提で#のために導入された機能だ
0632デフォルトの名無しさん2015/02/14(土) 12:19:11.45ID:G8GjWWhK
>>628
必須エラーは正しい現象であって、エラーが起きるから安全なんだよ
まさかエラーが起きないことを安全だと勘違いしている?
0633デフォルトの名無しさん2015/02/14(土) 12:39:26.91ID:ISQup94G
>>632
俺がこう思ってるかどうかはともかく、一つの考え方として聞いてくれ
if (x == null) return hoge((int)x); else return null;
例えばこれ、hogeを呼ぶ時点でxがnullでないことは明らかだろ? キャストは辻褄合わせでしかない。
ガチな静的型の関数型だと、このような操作を行うとき
コンパイラが強制するべきなのはif (x==null)のチェックの方だと考える。
そして条件がtrueになった文脈であればxの値はint?ではなくint型として扱うことができ(同じ変数名xを使うかどうかは別にして)、
逆にfalseの文脈ではxの値にアクセスしようとするとコンパイルエラーになるわけ。
06346332015/02/14(土) 12:40:52.27ID:ISQup94G
すまんx==nullじゃなくてx!=nullだな
0635デフォルトの名無しさん2015/02/14(土) 13:21:42.57ID:atTTe3b7
C#はデフォルトNull禁止にしてほしかった…

なんでもかんでもJavaのマネしやがって
後発なんだから不味い場所も分かってただろうに
0636デフォルトの名無しさん2015/02/14(土) 13:52:15.21ID:Uz4yE4Ox
バカでもデリゲートが理解できるサイトを教えて下さい
0637デフォルトの名無しさん2015/02/14(土) 14:50:07.87ID:atTTe3b7
c# デリゲート

ってgoogleでやる知恵すらないんだったら
どこ見てもムダだと思うよ
0638デフォルトの名無しさん2015/02/14(土) 15:33:45.11ID:7wkGcJdL
デリゲートよりC# Func Actionで検索した方がわかりやすいんじゃないかと思う
0639デフォルトの名無しさん2015/02/14(土) 15:39:01.44ID:j/TRKjQz
>>635
ディフォルト値として null より適切な値があるなら提案してみたら?
0640デフォルトの名無しさん2015/02/14(土) 15:46:41.76ID:QZdIRAT/
たぶんそれでミスを減らせると思ってるんだろうけど、
恐らく実際に起こることは、単に発見困難なバグを増やすだけ。

こんな当たり前のことが分からない人って絶望的にセンスないと思う。
0641デフォルトの名無しさん2015/02/14(土) 16:03:50.02ID:atTTe3b7
>>639
ユーザーに設定強制すればいいじゃない。
配列は基本コレクションで。

>>640
減るよ!減らないわけがない。
コンストラクタで設定し忘れとか想像して言ってるんだったら心配ない
初期値なしで宣言して、コンストラクタが終了する時点までに初期化されてりゃいいんだよ。
パスを辿ってコンパイル時に判断するのも今時ならそんなに難しくないだろう

あとセンスとかいうな臭いスレに帰れ
0642デフォルトの名無しさん2015/02/14(土) 16:23:20.88ID:coEfqUtE
>>641
> ユーザーに設定強制すればいいじゃない。

class X { }
class Y: X { }
class Z: X { }

X x;
if( ){
x = new Y;
} else {
x = new Z;
}

みたいな奴はどうするのさ?
0643デフォルトの名無しさん2015/02/14(土) 16:31:18.78ID:atTTe3b7
>>642
ん?何が問題?

今だって、C#もJavaもそれで初期化されてるって判定してくれるだろ。
かたっぽ抜いたらエラーになるはず。

ようは初期化前に変数にアクセスできなきゃいいんだ
0644デフォルトの名無しさん2015/02/14(土) 16:39:52.73ID:coEfqUtE
>>643
ごめん、お前さんが何を主張してるのかさっぱりわからんわ
0645デフォルトの名無しさん2015/02/14(土) 16:53:08.05ID:bEUa3key
要するにローカル変数みたいに未割り当て云々って事かね

コンストラクタまでに強制されるとなぁ…
結局確保しておいても割り当てない事もあるのだし
引数が.NETにはじかれるようなオブジェクトは作れないし

C++++でunsafeが有るような言語で堅牢性を追求するのもなんだ
マネーコードとはいえコンパイラオプションが関の山かね
0646デフォルトの名無しさん2015/02/14(土) 16:56:39.89ID:ocCjNIfb
それでnullによる問題が改善するなら安いもんだと思うがなぁ。
どうせGCだし、多少無駄なコンストラクタが呼ばれることくらい誤差のうちだろう。
0647デフォルトの名無しさん2015/02/14(土) 16:59:55.40ID:atTTe3b7
Nullを許容するときだけMyClass? hoge; みたいに?つけて宣言するとかだったらよかった。

てかもうScalaとかKotlinとかその他もろもろ
デフォルトNull禁止の言語は山ほどあって上手くいってるのに
何を今更…
0648デフォルトの名無しさん2015/02/14(土) 17:22:46.61ID:bEUa3key
ヘルスバーグも参照型とnull許容は独立させるべきだったとか言ってたっけ?
しかしながら前例が山ほどあっても、C#ほどには流行ってないのが全てかもね

ってかいつのまにジどっか行ったんだよ、Moneyコードじゃねーか
0649デフォルトの名無しさん2015/02/14(土) 17:44:57.24ID:PHmS6feJ
デフォルトnull禁止の言語ってイニシャライズでコストかかるオブジェクトとかどうしてんの?
いやかけんなって話になるんだろうけどさ

3値論理の論争みたいに収束はしなさそうだな
0650デフォルトの名無しさん2015/02/14(土) 18:40:36.04ID:PfOF9s4M
DataContract使えよ
stringの初期値が""とか気持ち悪いわ
0651デフォルトの名無しさん2015/02/14(土) 18:42:45.24ID:PfOF9s4M
Code Contractsの間違いっす
0652デフォルトの名無しさん2015/02/14(土) 19:14:23.68ID:Hs1Wk7so
>>635
nullを禁止するのなら元から断たねばならぬ。
NULL撲滅員会の非公認常任理事としては、データベースの実テーブルからNULLを排除するべきだと切に願う。
0653デフォルトの名無しさん2015/02/14(土) 19:19:05.29ID:5NFDstGd
そーいうのはC#スレ以外でやってくれ
せめてRoslynで実装してからまたおいで
0654デフォルトの名無しさん2015/02/14(土) 19:31:51.69ID:Hs1Wk7so
NullableってRDBのためじゃないの?
0655デフォルトの名無しさん2015/02/14(土) 19:38:54.98ID:atTTe3b7
.NetがEntityFrameworkという翼を得た今
DB用でもNullableそんなにいらないかなーと思うことしきり
0656デフォルトの名無しさん2015/02/14(土) 19:38:58.97ID:5NFDstGd
オプション引数
0657デフォルトの名無しさん2015/02/14(土) 21:23:59.15ID:wmohZ6Di
3値論理は神の論理
0658デフォルトの名無しさん2015/02/14(土) 21:27:39.65ID:XSOXuxtr
そんなnullが嫌いなのか・・・
0659デフォルトの名無しさん2015/02/14(土) 21:39:23.90ID:Kyzudol/
ぬるぽ
0660デフォルトの名無しさん2015/02/14(土) 21:52:10.16ID:3m1iUNVk
カッ
0661デフォルトの名無しさん2015/02/14(土) 22:00:51.92ID:G8GjWWhK
DB用ならDBNull.Valueが入らないと寸法が合いませんわな
0662デフォルトの名無しさん2015/02/14(土) 22:44:29.39ID:atTTe3b7
EntityFrameworkでもDBNullなんだっけ?
0663デフォルトの名無しさん2015/02/14(土) 23:05:58.61ID:7wkGcJdL
int?の逆バージョンのMyClass!みたいなのくれ
0664デフォルトの名無しさん2015/02/14(土) 23:17:21.10ID:3m1iUNVk
構造体でも使ってろ
0665デフォルトの名無しさん2015/02/14(土) 23:24:37.22ID:hvR2TAiE
構造体型のtupleが導入されるから、何でもやり放題だよ!
0666デフォルトの名無しさん2015/02/14(土) 23:51:41.04ID:G8GjWWhK
>>662
昔からその手のもんは検討もせずスルーすんのがプロのデフォなので…
他人が考えた自動処理はどっかで行き詰る
特にメーカー品は徹底的にプリミティヴな非連結だよ
0667デフォルトの名無しさん2015/02/15(日) 00:08:56.52ID:Mh0LkIrH
ごめん日本語がわからん
もう寝るべき
0668デフォルトの名無しさん2015/02/15(日) 08:21:19.64ID:n2M7TY52
>>666
DataGridViewも非連結で使うんかいな。
0669デフォルトの名無しさん2015/02/15(日) 09:29:10.77ID:bNigTbab
>>668
それは使うだろうけど
従来の連結ものと違って非連結と変わらんシンプルなコピーだし

メーカーは今でも1個1個セットかもしれんが
下手するとグリッド使わずテキストボックス並べて単体のスクロールバーに反応して中身入れ替えたりするし
0670デフォルトの名無しさん2015/02/15(日) 09:42:02.67ID:ABT28a22
ユーザー側の偉いおっさんが気まぐれで口走ったことを真に受けて
クソ面倒臭いだけのアホみたいな作業をして
出来上がった後で当のおっさんもなんでこうしたか忘れてる意味不明な仕様のアプリが
利用者にファックファック言われながら10年運用されるんだよな…
0671デフォルトの名無しさん2015/02/15(日) 11:38:32.24ID:uxAoEDAd
長く使えることが果たして安く上がる方法なのかはよく分からん
10年前に考えた10年後は予想の通りだったろうか
0672デフォルトの名無しさん2015/02/15(日) 12:22:18.18ID:n2M7TY52
>>671
システムなんて日々増改築だろう。
で、最終的にスパでメンテ不能になってスクラップ&ビルド。
0673デフォルトの名無しさん2015/02/15(日) 17:46:35.05ID:kp5uGiP4
コンパイラーが起動しない
0674デフォルトの名無しさん2015/02/15(日) 18:33:46.27ID:bX6frV1s
Don't mind.
0675デフォルトの名無しさん2015/02/15(日) 20:26:10.15ID:7wjOE94w
どんマイケル
0676デフォルトの名無しさん2015/02/16(月) 11:39:56.92ID:a73kbkcR
ハーレールーーーヤ
0677デフォルトの名無しさん2015/02/16(月) 16:25:31.51ID:lTedmFF3
C#で動的にLinqを使うにはどのような手段があるでしょうか
0678デフォルトの名無しさん2015/02/16(月) 16:40:21.58ID:yoAtWWbZ
>>677
LINQ 動的クエリ
ぐぐれ粕野郎
0679デフォルトの名無しさん2015/02/16(月) 16:43:05.90ID:q1qAzibN
式木でggr?
0680デフォルトの名無しさん2015/02/16(月) 17:32:50.01ID:lTedmFF3
すいません、言葉足らずでした。
式木で自前のクラスライブラリ作って実装は済んでいます。
他に面白い方法などないか聞いてみただけです。
0681デフォルトの名無しさん2015/02/16(月) 19:16:53.25ID:lEWN8Yek
>>680
これの第6章とか?

http://www.amazon.co.jp/dp/toc/4048867741/ref=dp_toc?_encoding=UTF8&;n=465392
>第6章 式によるコード生成
>6.1 式指向プログラミング
>6.2 LINQ式でダイナミックメソッドを作る

買ってみたけど余り読んでないww
0682デフォルトの名無しさん2015/02/18(水) 13:26:39.80ID:zJtQK+E+
デリゲートとかいうのに関して質問があります

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());
}

続く
0683デフォルトの名無しさん2015/02/18(水) 13:30:57.99ID:zJtQK+E+
これでforeachで取り出されたList内には"ABC"と"DEF"が入ってるらしいのですが
原理が分かりません

デリゲートでぐぐると、「メソッドの実行を関節的に行う」
「C言語でいう関数ポインタである」という説明を見ました。

これってつまり

{ return user01; });

ここはuser01というフィールドの参照をリターンしているという事なんですか?

ちなみにUnityなんですが、Debug.Logで出力してもdelegate型名がログウィンドウに
表示されるだけで、中身が確認できませんでした
0684デフォルトの名無しさん2015/02/18(水) 13:38:39.43ID:pmjO4Zhz
デリゲートとは直接関係ない
外部変数のキャプチャとか表現される機能
匿名メソッド/ラムダ式で外部の変数が使用される場合、
その変数はメソッドのローカル変数じゃなくてコンパイラが生成するクラスのフィールドになる
簡略化すればこんな感じ
class anonymous {
&nbsp; &nbsp; public string value;
}
static void Main() {
&nbsp; &nbsp; anonymous _user01 = new anonymous() { value = "" };
&nbsp; &nbsp; StringHandler handler = delegate { return _user01.value; };
&nbsp; &nbsp; _user01.value = "ABC";
&nbsp; &nbsp; handler();
}
0685デフォルトの名無しさん2015/02/18(水) 13:55:24.96ID:zJtQK+E+
>>684
キャプチャ機能は一応、目を通しました
匿名メソッド内で上位スコープの変数が使われている場合、その変数の延命が行われる、とか

あと

string x;
x = userList[0];

とかできないのもよく分かりません
stringにキャストできませんとか言われます
userList[0]で匿名メソッド「{ return user01; }」が動いてuser01の中身(string)を返すのでは・・・?
0686デフォルトの名無しさん2015/02/18(水) 13:57:06.77ID:zJtQK+E+
すみません
>user01の中身(string)を返すのでは・・・?

返すのはstring型ではなく、「参照」ですよね?
その中身とかどうやって見れるんでしょうか
0687デフォルトの名無しさん2015/02/18(水) 14:01:57.13ID:pmjO4Zhz
自分で型宣言してるじゃん
> List<StringHandler> userList = new List<StringHandler>();
userList[0]が返すのはStringHandler型であってstring型じゃない
StringHandler型つまりデリゲート型は特別に()演算子で委譲されたメソッドを実行できる
StringHandler handler = userList[0];
string result = hander();
0688デフォルトの名無しさん2015/02/18(水) 14:06:25.57ID:zJtQK+E+
>>687
アホな質問ですみませんが、delegate使ってメソッド呼ぶのと
普通にメソッド呼ぶのではキャプチャ機能以外で何が違うんでしょうか
0689デフォルトの名無しさん2015/02/18(水) 14:07:28.88ID:zJtQK+E+
昨日から結構デリゲートについてunityで動かしたりしてるんですが
デリゲートというものについての理解が困難です・・・

参考にしているのは
ttp://ufcpp.net/study/csharp/sp_delegate.html
主にここです
0690デフォルトの名無しさん2015/02/18(水) 14:20:50.73ID:pmjO4Zhz
>>688
そこのSelectメソッドをデリゲート無しで「普通にメソッド呼ぶ」ってどうやって?
条件毎にSelect1メソッド、Select2メソッド、って書いていく?
0691デフォルトの名無しさん2015/02/18(水) 14:40:41.80ID:zJtQK+E+
>>690
そこもちょっとよく理解できていませんが、

>StringHandler handler = userList[0];
>string result = hander();

当初の目的としてはここが知りたかったんです

今まで
string result = userList[0];
としていましたが、delegate型が帰るので、一度その型で受けてから
hander();と書いてメソッド実行してreturn user01の型であるstringで受ける、
という認識でいいんですよね
0692デフォルトの名無しさん2015/02/18(水) 14:48:06.17ID:pmjO4Zhz
もちろん変数を介在させなくても良いけどね
string result = userList[0]();
0693デフォルトの名無しさん2015/02/18(水) 15:07:30.27ID:zJtQK+E+
>>692
() ←は、メソッド(匿名メソッド)をコールしているから必要、という事ですよね?
それが分かっていなかったようです。
ありがとうございました
0694デフォルトの名無しさん2015/02/18(水) 21:17:59.57ID:TtSVwZYj
分からない内は確かに分からんよね
ただ、デリゲート自体は関数ポインタの親戚な上に、ないとマトモにプログラム組む気起きないぐらい基本的な言語仕様なので、初心者の範疇やな

ラムダ式(匿名デリゲート)、キャプチャも慣れるまでイミフだけど、他の言語でも類似機能ある頻出な言語仕様系だからしっかり理解するのオススメ。
キャプチャ理解したら、キャプチャとforeachの仕様変更も理解するとモアベター。ふぁいと
0695デフォルトの名無しさん2015/02/18(水) 22:09:55.86ID:FJC9eT5Z
関数ポインタというよりはオブジェクト指向の移譲パターンを簡略化したものと見做すのが本来正しい
実体はオブジェクト参照+関数ポインタに他ならないけど
0696デフォルトの名無しさん2015/02/18(水) 22:13:52.34ID:ZsWSUqlJ
マルチキャストの立場は
0697デフォルトの名無しさん2015/02/18(水) 22:22:22.31ID:7aMv74vx
>>695
それは(自分で言ってるように)そう「見做してる」だけ。
正しいって何だよ。
0698デフォルトの名無しさん2015/02/18(水) 22:59:55.75ID:FHXOTJ+B
delegateは、「委任する」だから移譲で良いんじゃない。
0699デフォルトの名無しさん2015/02/18(水) 23:58:48.33ID:AVZb1Mt2
eventも含めるとさらに混乱するな
0700デフォルトの名無しさん2015/02/19(木) 05:15:50.02ID:rPtIBISB
仕事で必要になり、visual studio 2013でC#のコンソールアプリを作りました。
期待した機能は問題ないのですが、コンパイルしたプログラムが、
起動させると数秒して再起動(閉じてまた起動する)します。
Hello Worl表示のようなソースでも同様なのですが、普通に1回で起動させるために何か必要なことがあるのでしょうか?
0701デフォルトの名無しさん2015/02/19(木) 05:32:55.00ID:tuZVKyYz
http://ideone.com/
07027002015/02/19(木) 05:44:51.30ID:rPtIBISB
>>700
ソースはこんなんです。
シリアルポートをチェックするだけのものです。
コンパイルしたプログラムを実行させると起動して数秒で再起動します。
07037002015/02/19(木) 06:24:34.41ID:rPtIBISB
自己解決しました。
セキュリティソフトの問題でしたorz
0704デフォルトの名無しさん2015/02/24(火) 22:46:18.81ID:9av0rMIj
優秀な回答者諸君なら、8人にひとり窓タブが当たる
Microsoft Visual Studioことはじめ〜キャンペーン http://codeiq.hatenablog.com/entry/2014/12/25/150000
にはもちろん応募したよな?
誰か当たった?
0705デフォルトの名無しさん2015/02/24(火) 23:37:50.92ID:9OYj7FQ2
フィードバックはきてたけど当選メールないな残念
0706デフォルトの名無しさん2015/02/25(水) 01:07:58.41ID:ESAWqhks
おいC#
Withステートメント使えないじゃねーか
0707デフォルトの名無しさん2015/02/25(水) 02:58:04.28ID:V4V4PRhf
お前の巣が呼んでるぜ?
0708デフォルトの名無しさん2015/02/25(水) 03:20:48.41ID:ESAWqhks
オレの巣はドコ?
0709デフォルトの名無しさん2015/02/25(水) 19:58:40.79ID:5gzTIGkn
withが必要なケースって何さ
0710デフォルトの名無しさん2015/02/25(水) 20:19:07.06ID:9jad7y3g
COBOLみたいに代入並べるんだろ
0711デフォルトの名無しさん2015/02/25(水) 23:12:05.55ID:uQJ7B2Wt
ブビ厨スレに帰れ
川俣先生がお呼びだぞ
0712デフォルトの名無しさん2015/02/27(金) 11:40:50.23ID:KxU3cUcN
コンボボックスを20個並べたフォームを表示するのに1秒ぐらいかかるんだけど、遅すぎね?

なんとか早くならない?
0713デフォルトの名無しさん2015/02/27(金) 12:29:31.22ID:EZLwV1tk
普通にデザイナで貼り付けただけならそれは遅すぎるから別のところが原因だろう
動的に追加してるならSuspendLayoutしてないとかじゃないか
0714デフォルトの名無しさん2015/02/27(金) 12:51:11.41ID:tCo8Ph/O
>>712
中身が多いんだろ
0715デフォルトの名無しさん2015/02/27(金) 13:33:00.46ID:u3BLeEUS
ESP能力がなきゃ答えられないような質問を投げる人はプログラマ向いてないからとっとと辞めた方が絶対にいい。
0716デフォルトの名無しさん2015/02/27(金) 13:43:27.62ID:rH0Q6QqF
>>716
真面目に質問レス書いてたら投稿する前に解決してしまうじゃないか
0717デフォルトの名無しさん2015/02/27(金) 15:00:23.30ID:h6tAs7eH
自己解決してやがるw
0718デフォルトの名無しさん2015/02/27(金) 16:11:11.88ID:c9s4YfIW
項目追加に時間かかってんだろ
0719デフォルトの名無しさん2015/03/01(日) 03:24:09.11ID:PpU9Sdop
>>712
1秒くらいなら別にいいんじゃ?
0720デフォルトの名無しさん2015/03/01(日) 03:26:28.87ID:PpU9Sdop
コンボ20個も同時表示ってのがそもそも疑問だけど
0721デフォルトの名無しさん2015/03/01(日) 03:29:04.14ID:PpU9Sdop
5秒かかるのを2秒にする方法はいろいろあるけどさ
0722デフォルトの名無しさん2015/03/02(月) 09:37:46.96ID:ixY25SIK
次のプログラムが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());
}
}
0723デフォルトの名無しさん2015/03/02(月) 10:01:17.24ID:xRfYEXVX
>>722
デフォルトではReader/Writerが破棄される時
対象のストリームも一緒に閉じるから
ついでにストリーム位置戻し忘れてない?
0724デフォルトの名無しさん2015/03/02(月) 10:12:26.14ID:SHM5IwUA
using使わずに書いた方が、どこが悪いのかがわかって良さそうだな
0725デフォルトの名無しさん2015/03/02(月) 11:41:53.32ID:ixY25SIK
>>723
writer閉じた後シークすらできなかったので
ストリームが閉じているというのは納得です

ありがとうございました
0726デフォルトの名無しさん2015/03/06(金) 01:21:05.48ID:90VT0ADJ
dynamicを使いまくったプログラムに遭遇しました。
異常に保守性が悪く、バグの特定に苦労しましたが、これを使ってメリットありますか?
0727デフォルトの名無しさん2015/03/06(金) 02:12:29.20ID:8jo4c40P
エメロンならあります
0728デフォルトの名無しさん2015/03/06(金) 09:09:56.47ID:zWXA/UR7
>>726
動的云々くらいにしか使い道はないんじゃないか、結局実装はobjectらしいのでパフォーマンスも悪い
インターフェイス、抽象クラス、ジェネリック等で解決出来るならそれに越したことはないと思う
ダックタイピングなんてコンパイラ言語でやるこっちゃあないね、foreach?LINQ?…。
0729デフォルトの名無しさん2015/03/06(金) 14:00:42.17ID:aMLLgYQ/
BinaryFormatterでシリアライズされたデータをもとの型にもどすとき
シリアライズしたアセンブリのバージョンにバリバリ依存するので
それをなんとか回避するためにdynamic使いまくったことはある
まあ設計ミスなんだが
0730デフォルトの名無しさん2015/03/06(金) 19:20:12.70ID:lSxjShen
dynamicというか匿名型はローカル変数やprivateメソッドの戻り値とかならあり
0731デフォルトの名無しさん2015/03/06(金) 19:36:03.26ID:K15TOJCY
未確認飛行の人の検証ではdynamicは(動的コード生成の中では)そこそこ速いって書いてあるけどな
07325602015/03/06(金) 20:43:33.84ID:n9/U+gAr
>>730
> dynamicというか匿名型は

dynamic と匿名型は全然別
頭、大丈夫か?
0733デフォルトの名無しさん2015/03/06(金) 20:49:44.76ID:+V/z1/b/
匿名型を使いたいけど型推論できない変数や戻り値にdynamicを使うってことでしょ?
設計としては全く賛同しないけど意味不明というほどでもない
0734デフォルトの名無しさん2015/03/06(金) 20:58:43.65ID:coWMRvsx
Dictionary<string, object>の代わりに匿名型をdynamic型として引数で受けるのはあるね
0735デフォルトの名無しさん2015/03/06(金) 22:21:58.81ID:1OUVemxB
匿名型は禁止でいいよ
アホが糞ソース量産するの防止
0736LINQer2015/03/06(金) 22:44:07.67ID:P4OmJ7lr
えっ
0737デフォルトの名無しさん2015/03/06(金) 22:51:30.71ID:K15TOJCY
匿名型で糞ソースってどんなの?
0738デフォルトの名無しさん2015/03/06(金) 22:55:22.40ID:coWMRvsx
匿名型使うような意識高い系はむしろコード綺麗だろ
var見たら脊髄反射してVariantだ〜品質が〜とか騒ぎ出す阿呆よりよほど使える
0739デフォルトの名無しさん2015/03/06(金) 22:58:24.88ID:1OUVemxB
自分で書いておきながら俺もそんな気がしてきた
0740デフォルトの名無しさん2015/03/07(土) 11:11:58.06ID:FoVDQD6E
匿名型をdynamicやobject使って外に出すのはたぶん設計が間違ってる
0741デフォルトの名無しさん2015/03/07(土) 11:27:44.78ID:2KiYbMBo
実装上の都合だから設計は関係ない
0742デフォルトの名無しさん2015/03/07(土) 11:28:28.26ID:LW8uI5XV
発端の730的には外に出してない
単に使い捨てクラス作るのが面倒ってだけっしょ
それならいっそTupleでいいじゃんとは思わないでもない
0743デフォルトの名無しさん2015/03/07(土) 11:44:17.92ID:MlGEwDRl
Tuple使うくらいならdynamicの方がまだマシ
タプルってのは言語のサポートがある上で int age, string name = GetPerson();
みたいに都度展開して使うもんなんだよ
Item1とかアホか
0744デフォルトの名無しさん2015/03/07(土) 11:48:47.87ID:Q9nqJq7f
匿名型をdynamicで返すなんて事をやる奴は他人のソースのメンテとかした事ない趣味プログラマだな
0745デフォルトの名無しさん2015/03/07(土) 11:54:57.96ID:0X1gIkd6
未だにOption Strict Offとかやってる土方さんたちもいるんですよ
0746デフォルトの名無しさん2015/03/07(土) 12:12:18.95ID:2KiYbMBo
テストをしっかり書く習慣があればdynamicに実行速度以外の問題はない
0747デフォルトの名無しさん2015/03/07(土) 12:15:11.33ID:AaUSQvTI
C#はもともとstatic strong typingな言語でダックタイプも必要に応じて使えますよっていう言語
ダックタイプが好きな人とそうでない人が
自分の志向を押しつけ合っても無駄
0748デフォルトの名無しさん2015/03/07(土) 12:17:43.43ID:s7kGoYdv
ダックタイピングでやれますよ、っていう点は評価したい
C#でそれをやりたがる発想もわからんが
0749デフォルトの名無しさん2015/03/07(土) 12:28:40.79ID:AaUSQvTI
>>746
strong typingを捨てたらリファクタリング(名前変更とか)の精度が落ちるだろう
07505602015/03/07(土) 12:46:46.51ID:jaly8+RG
>>744
> 匿名型をdynamicで返す

そんなことをしたくなったことがないんだが、どんな状況で必要になるんだ?
0751デフォルトの名無しさん2015/03/07(土) 12:55:19.92ID:ELHucOd4
こういう時だろ
<return>結果を格納した配列 0:◯◯の値、1:△△の値</return>
たまにやってしまう
0752デフォルトの名無しさん2015/03/07(土) 13:02:43.81ID:0X1gIkd6
プロジェクト作ったら真っ先にMicrosoft.CSharp.dllを含む不要な参照を削るからdynamicで手を抜くという発想自体が無い
0753デフォルトの名無しさん2015/03/07(土) 13:25:14.62ID:shYh0yxP
メタプログラミングやるけど書くのめんどくさいなぁって時に使うものだからな
0754デフォルトの名無しさん2015/03/07(土) 13:38:59.81ID:0X1gIkd6
メタプログラミングと遅延バインドはあまり関係ないと思うが
Dynamic Assemblyじゃないんだから
0755デフォルトの名無しさん2015/03/07(土) 19:17:13.39ID:N/wyHwvz
リフレクションを使うのは一種のメタプログラミングだし、
dynamicは実行時コード生成のルールを完全に自分で定義できる高度なメタプログラミングの仕組みを備えてるよ
0756デフォルトの名無しさん2015/03/07(土) 20:52:13.71ID:0X1gIkd6
分かった分かった
Enum.HasFlagもリフレクション使ってるからメタプログラミングだし、dynamic型とDLRの区別をつける必要もないよね
0757デフォルトの名無しさん2015/03/07(土) 21:18:41.69ID:MlGEwDRl
HasFlagの実装はリフレクションでプログラムそのものの情報を使用しているんだから
一種のメタプログラミングと言えるね
DLR? DLRなんてもう死語だし言ってもお前にしか伝わらんだろ
それに.NETに組み込まれてるのは本来のDLRのごく一部だ
ちなみにdynamicの仕組み(DynamicMetaObject/DynamicMetaObjectBinder)はコード生成にDynamicMethodを使うけどアセンブリの動的生成は使わんぞ
0758デフォルトの名無しさん2015/03/07(土) 22:03:13.63ID:0X1gIkd6
一般PGがメタプロするときにdynamicキーワードを使うかどうか(>>753)って点について
「メンバー名が決め打ちになるからあまり役に立たない。他のダイナミック○○と混同しているんじゃないか」(>>754)つー主張をしているつもりなんだけど
メタデータは読めても文脈は無理なのかな

あとDLRを勝手に殺すな
0759デフォルトの名無しさん2015/03/07(土) 22:58:16.79ID:On7QrDFN
メタプログラミングの定義次第だなそれは
C#に限定した話でなく広義的に見ると
コンパイル前のコード生成もメタプログラミングだし
C++テンプレート的なメタプログラミングもある
実行時に文字列やDOMなどをコンパイルするのもメタプログラミングだし
実行時にメンバのメタ情報の読み書きを行うのもメタプログラミングだし
ビルドプロセスに介入するのもメタプログラミングだし
生成物を後で書き換えるのもメタプログラミングだ
dynamicは実行時にメンバのメタ情報の読み書きを行うタイプのメタプログラミングで便利な時があるね
0760デフォルトの名無しさん2015/03/07(土) 23:32:39.43ID:0X1gIkd6
まあ演算子の動的解決なんかはdynamic導入でMethodInfoと比べて劇的に楽になったと思う
BinaryExpressionでも一発で出来る例なのが微妙だが
0761デフォルトの名無しさん2015/03/08(日) 12:33:59.24ID:edMAX4Mx
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"); // シーン切り替え
}

とコルーチン内にシーン切り替えを持ってくると想定動作になるのですが
これはどういう事ですか?理屈か分かりません。
0762デフォルトの名無しさん2015/03/08(日) 12:54:16.39ID:5q7l5O1i
Unityは知らんけどStartCoroutineが非同期処理なんじゃねえの
0763デフォルトの名無しさん2015/03/08(日) 13:07:44.15ID:JlL7Zlt5
知らんがな
0764デフォルトの名無しさん2015/03/08(日) 13:11:01.08ID:OaTBMw3l
>>761
> StartCoroutine(WaitFor(2.0f)); // 一時停止

まず自分が書いたコードで呼び出してる関数の説明ぐらい読んだらどうだ低脳
0765デフォルトの名無しさん2015/03/08(日) 13:12:00.55ID:+/h1eClM
知らないならレスしないでくださいうざいだけです
0766デフォルトの名無しさん2015/03/08(日) 13:23:08.66ID:5q7l5O1i
知らなくても分かる程度の事しか書いてないからなあ…
0767デフォルトの名無しさん2015/03/08(日) 13:26:25.07ID:ygKzTSMs
>>764
低脳じゃなくて低能なw
0768デフォルトの名無しさん2015/03/08(日) 13:59:15.26ID:zXQCQciG
Action[] actions = new Action[1]{
 new Action( () => Baka.Sleep(1000) )
};

Baka.InvoveActionsLater(actions);

Baka.StopSomething();

これと同じこと。当然だな
0769デフォルトの名無しさん2015/03/08(日) 14:06:42.65ID:vYL3voYS
フレームワークに弄ばれてる雑魚PGってほんとダサいよね
最初っからフレームワークに頼り切らないでフレームワーク自作するぐらいの気概と学習意欲がないからそうなるんだよ
0770デフォルトの名無しさん2015/03/08(日) 14:08:38.47ID:adF/rlPF
同意します
0771デフォルトの名無しさん2015/03/08(日) 15:08:00.17ID:r3LxMNma
知らんがな
0772デフォルトの名無しさん2015/03/08(日) 15:08:34.71ID:M+AHJcPP
雑魚PGですまん
0773デフォルトの名無しさん2015/03/08(日) 15:34:31.03ID:rEcSRQEG
とりあえず、サードパーティなんだから個別スレで相談してくれよ、とは思う
0774デフォルトの名無しさん2015/03/08(日) 17:51:06.86ID:edMAX4Mx
>>761は取り下げさせて頂きます
申し訳ございませんでした
0775デフォルトの名無しさん2015/03/08(日) 18:21:08.05ID:428rnVgy
>>774
何かやたら煽られるてけど、>>762で言われてる非同期処理を勉強すれば分かると思うよ。
0776デフォルトの名無しさん2015/03/08(日) 18:44:33.67ID:edMAX4Mx
>>775
ありがとうございます。調べてみます。
0777デフォルトの名無しさん2015/03/08(日) 18:51:53.31ID:srsOwzq5
C#プログラマって比較的フレームワークに頼ってないと思うけどな
PHPやRubyみたいなWebサイトツクールに比べりゃ遥かにマシ
まあUnityは素のC#をほとんど理解してない人が結構いたりしてアレだが
0778デフォルトの名無しさん2015/03/08(日) 19:32:17.74ID:ZUloTWyM
フレームワークに頼らないのは勉強するときだけでいいんじゃないかな。
仕事でそんな事言って作業時間アホほど延ばされたら困る。
0779デフォルトの名無しさん2015/03/08(日) 19:36:58.50ID:srsOwzq5
仕事なら逆のケースが多い
フレームワークのほんの少しの学習コストを嫌って
直接低レベルな実装をしたりアホみたいな社内フレームワークが生み出されたりする
0780デフォルトの名無しさん2015/03/08(日) 19:42:39.99ID:Ju4Ov5Iv
ドメインモデル構築時にフレームワークへの依存性って課題が追加されるのがネックかな
07815602015/03/08(日) 20:53:49.52ID:6GiElWFY
>>777
> C#プログラマって比較的フレームワークに頼ってないと思うけどな

.NETFramework
0782デフォルトの名無しさん2015/03/08(日) 21:13:15.13ID:z3dYg3sm
c#プログラミングって.NETFrameworkの活用だよなあ
0783デフォルトの名無しさん2015/03/08(日) 21:15:33.62ID:srsOwzq5
.NET Frameworkは特にアプリの構造を規定しないから、
一般的にいうフレームワークとはかなり違う
ASP.NETあたりはフレームワークと呼べなくもないけど
0784デフォルトの名無しさん2015/03/08(日) 21:16:18.43ID:sc1gFCCN
言語だけでどうしろって時代じゃないしな
0785デフォルトの名無しさん2015/03/08(日) 21:17:35.12ID:ceSNJXb/
単なるC#は「プログラムがクラスのMainから実行される」ってだけで
フレームワークへの依存は極小だな。
フレームワークの依存が大きいのはおもに
Webアプリケーションの乱立フレームワーク
0786デフォルトの名無しさん2015/03/08(日) 21:22:08.46ID:5q7l5O1i
実装レベルだとLINQ他のライブラリ依存がヤバい
それで他言語で書けなくなるってことはないけど
0787デフォルトの名無しさん2015/03/08(日) 21:50:09.69ID:srsOwzq5
C#のライブラリ依存は少なくとも自分が何を使っているのか把握して使っている分だけ大幅にマシ
いわゆるWebフレームワークだと、何がどこにあるのか今何を使っているのかどういう仕組みなのかよくわからないけど
なんとなくこう書くものらしいし変にさわるとおかしくなるから気にしないでおこうというのが基本だからな
0788デフォルトの名無しさん2015/03/08(日) 22:13:51.33ID:JHTV8U6v
ところでこの馬鹿げたコードを見てくれ
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だけ構造違うの?
0789デフォルトの名無しさん2015/03/08(日) 22:17:41.62ID:rJrv12ko
>>783
ひとつに限定していないというだけで普通にフレームワーク提供してるだろ、
System.Windows.Applicationとか。
0790デフォルトの名無しさん2015/03/08(日) 22:27:39.57ID:5q7l5O1i
例外としてASP.NETを挙げてるのにWPFでツッコミを入れている人を見たときの悲しさ
0791デフォルトの名無しさん2015/03/08(日) 22:41:23.32ID:xsLbcRsT
>>790
アプリの構造を規定しないとか嘘を言うから突っ込まれたんだろ。
言語の実行基盤としてのフレームワークはあまり規定しないかも知れんが
Webアプリ・GUIアプリ・Windowサービスのフレームワーク
としては規定しまくりだろう
0792デフォルトの名無しさん2015/03/08(日) 22:51:51.87ID:rJrv12ko
>>790
WPFとFormsも例外だった?例外多いなw
0793デフォルトの名無しさん2015/03/08(日) 22:52:24.45ID:srsOwzq5
>>788
https://ideone.com/FS9jcM
0794デフォルトの名無しさん2015/03/08(日) 22:55:27.12ID:srsOwzq5
>>791
Webフレームワーク触ったことある?
規定のレベルが違う
0795デフォルトの名無しさん2015/03/08(日) 23:16:52.36ID:5q7l5O1i
>>792
そういうのは本人に聞いてくれ
0796デフォルトの名無しさん2015/03/08(日) 23:22:52.61ID:5q7l5O1i
まあWPFもFormsも純粋にVしか担当してないし、デザインパターン限定しない程度には高機能だからあまりフレームワーク的じゃないと思うけど
0797デフォルトの名無しさん2015/03/08(日) 23:25:34.17ID:JHTV8U6v
>>793
うーん済まないがThreadStatic使うとnew byteするのと大してパフォーマンス変わらないんだよね
スレッドセーフじゃない静的フィールドならReadInt32を上回る速度が出るんだけど…
inputがMemoryStreamだとInternalReadInt32呼ばれて負けますがね!もはやC++/CLIでも使えって話だけど
0798デフォルトの名無しさん2015/03/08(日) 23:38:24.38ID:uAYzQK0s
他に最適化出来るとこ探したほうが健全だよ
0799デフォルトの名無しさん2015/03/08(日) 23:56:15.74ID:JHTV8U6v
まぁミリ秒単位の話なんでそうなんだけどね
結局unsafeコードなら直にfixedキャスト書いた方が速いし
マネージコードならSafeBuffer使えば良いし(AlignedSizeなのが玉に瑕だが

Marshal.SizeOfTypeにもthe lack of a suitable generic constraint.なんて書かれてるし
MSILで出来る事がC#で書けないのがなんかもにょる.NETの為の言語じゃねーのかよって感じで
0800デフォルトの名無しさん2015/03/09(月) 01:49:35.21ID:bl0YQ52k
>>781
わろたぁぁwww
08015602015/03/09(月) 06:46:27.93ID:R+XoG9o+
>>794
レベルが違うだけで、フレームワークとしての仕組みは同じ
仕組み理解できない奴には全然違うものに見えるのかもしれないけど w
0802デフォルトの名無しさん2015/03/09(月) 07:50:02.15ID:ILJGwsf4
>>796
WPFもFormsも、イベントドリブンなアプリケーションの構造とその根幹であるイベントループを提供しているがな。
0803デフォルトの名無しさん2015/03/09(月) 19:39:15.43ID:nl7+aNOJ
それはビュー層以外の仕事なの?
0804デフォルトの名無しさん2015/03/09(月) 21:31:25.39ID:ILJGwsf4
あえてMVCのどれに分類されるかと言うなら、アプリケーションのメインイベントループを
持つクラスはCだろうな。
ただ、設計論としてのMVCはプログラマ自身が設計するクラスをどれに分類するかを
考えるだけで、フレームワーク自体はその背後に存在するとみなすのが普通じゃないかな。
たとえばMVVMでも、VとVMのバインディングを誰がやっているのかなんて考えないように。
0805デフォルトの名無しさん2015/03/10(火) 08:03:14.06ID:hNEbsZbx
MVC厨はMVCしか知らないから
他の考えがあるという認識が無く
すべてをMVCに当てはめようとする
0806デフォルトの名無しさん2015/03/10(火) 08:18:10.49ID:tjx9AHBm
そういう奴に限ってMVVMがWPFの事情に依存している以上に
MVCがSmalltalkのGUIフレームワーク特有の事情に依存した仕組みであることを知らない
0807デフォルトの名無しさん2015/03/10(火) 11:28:42.22ID:zdRAHy3f
VS2013のアドイン開発ってここで聞いても大丈夫?
やってる人居ませんか?
0808デフォルトの名無しさん2015/03/10(火) 14:01:39.28ID:zdRAHy3f
VS2013の拡張として自前で簡易的なキーマクロ作りたいんですが、
キー入力を取得するにはどうすればいいんでしょうか?
フォームアプリなら分かるんですが、DTEからはどうすればいいのか、分からない、、
0809デフォルトの名無しさん2015/03/10(火) 23:23:01.74ID:sIC3s7FK
vsのアドインってどうやって作るの?
0810デフォルトの名無しさん2015/03/11(水) 00:00:12.86ID:409Xxc8o
EnvDTEとかいうビチクソCOMは撤廃されて
C#でMEFのコンポーネントとして作るという超モダンな仕組みに置き換わった
0811デフォルトの名無しさん2015/03/11(水) 00:19:41.57ID:53MZ6hm2
>>809
>vsのアドイン
http://www.atmarkit.co.jp/fdotnet/special/vsaddinintro01/vsaddinintro01_02.html
0812デフォルトの名無しさん2015/03/11(水) 00:26:53.74ID:+PvNMM+7
.netにはクールなsshクライアントクラスは無いのですか?
0813デフォルトの名無しさん2015/03/11(水) 04:17:10.81ID:s98Ts5Op
VS2013を使ってます。
windowsフォームアプリケーションで、効果音を鳴らすためにDirectSoundを
使いたいんですが、usingに何を定義してやればいいのかわからないんですが
どなたかわかりますか

VS2012以降はDirectXがWindows SDKに統合されたと聞いたので
DirectX SDKをインストールしないでDirectSoundを使いたいです。
0814デフォルトの名無しさん2015/03/11(水) 05:01:34.28ID:rCH71uUa
System.Media.SoundPlayer
0815デフォルトの名無しさん2015/03/11(水) 07:02:55.37ID:409Xxc8o
>>811
アドイン(COMでDTE系使うやつ)は廃止予定で非推奨になっている
今は拡張機能といって>>810のやり方で作る
覚えておけロートル
0816デフォルトの名無しさん2015/03/11(水) 07:54:42.34ID:mbZuxei0
今はこんな便利になっているんだな。
その昔。vsじゃなくて自前アプリ用だけど、
ほとんど同じことをリフレクション使って自力実装していたよ
0817デフォルトの名無しさん2015/03/11(水) 10:23:32.79ID:33mlLn1H
>>813
VSTi
0818デフォルトの名無しさん2015/03/15(日) 02:10:38.08ID:/mwwDFis
相談です。

Windowsフォームアプリ作るとMainメソッド内の

Application.Run(new Form1());

によってForm1が起動しています。
これを、ある条件が満たされた時はForm1ではなくて、
CUIのプログラムを起動したいと思っています。
つまり、コンソールアプリとして作ったMainメソッドです。
ところが、以下のようにしてもうまくいきませんでした。
具体的には、コマンドプロンプトの画面が現れず、
うんともすんともいいません。

//Application.Run(new Form1());
Hoge.Main(null);

どなたか解決策をご存じの方はよろしくお願いします。
0819デフォルトの名無しさん2015/03/15(日) 02:30:43.74ID:kJqM+4Ch
そういう機能はVC#にはないんじゃないかな?(´・ω・`)
どうしても、そういうことを(C#で)やりたいなら、コンソールアプリを別に
作って、Hoge.Main();のところでProcess.Start("Hoge.exe");とかする?
0820デフォルトの名無しさん2015/03/15(日) 02:48:22.34ID:eouifH9j
AllocConsoleってそういうのじゃないっけ?
0821デフォルトの名無しさん2015/03/15(日) 02:54:32.68ID:kJqM+4Ch
なんだ、そういう解決法でもいいなら、それでいいんじゃないかな?(´・ω・`)
但し、C#(つまり.net)で、じゃなくwinのAPIを直接叩くってことになるけどね?(´・ω・`)
0822デフォルトの名無しさん2015/03/15(日) 02:59:16.11ID:/mwwDFis
>>819
レスありがとうございます。
質問書き込んでから自分でも色々と調べてみましたが、
どうやらそういう手段をとるしかないようですね。
つまり、コンソールアプリは別途exe化しておくと。。。

自分の状況を詳しく書くと、
HogeCui名前空間にコンソールアプリを作って、
HogeGui名前空間にフォームアプリを作ってます。
このとき、HogeGuiはHogeCuiを静的リンクしていて、
HogeCuiのさまざまなモジュールを参照しています。
HogeCuiのMainメソッドのみHogeGuiから呼んでいないということで、
せっかくだからオプションで起動できるようにしたいな、
と思ったのが動機です。

具体的には

if (Control.ModifierKeys == Keys.Alt)
{
Hoge.Main(null);
}

とかで、モディファイヤーキーで起動されたときに
CUIプログラムを動かしたいなと思っていました。

しかし、静的リンクさせてexeはHogeGui.exeのみにしているので、
これをHogeGui.exeとHogeCui.exeの二種類用意しなければならないとなると、
なんか違うかな^^;

HogeCuiのメインメソッドは入力は受け付けず出力のみとなっているので(HogeGuiのベンチマーク的な扱い)、
テキストボックスを適当に張り付けたForm2を用意してHogeCuiのテキストを出力するためのフォームアプリを用意する、
っていうのが一番いい解決策ですかね〜。
0823デフォルトの名無しさん2015/03/15(日) 03:02:34.34ID:/mwwDFis
>>820-821

レスありがとうございます。
ちょっとこれから調べてみます。
とり急ぎお礼まで。
0824デフォルトの名無しさん2015/03/15(日) 08:32:43.97ID:S+QWGoMW
ダブルクリックでコンソールを開いてほしいなら、
そのexeを「ある条件」で起動するだけのバッチファイルを用意したら?
CUIのアプリは外から与えられた標準入出力をそのまま利用するべきで、
自主的にコンソールを新しく開くなんてかなり非常識だよ
0825デフォルトの名無しさん2015/03/15(日) 09:32:02.87ID:D1mOgsSk
>>824
> CUIのアプリは外から与えられた標準入出力をそのまま利用するべきで
そんなオレオレ基準はチラシの裏にでも書いとけよ
0826デフォルトの名無しさん2015/03/15(日) 09:38:31.93ID:S+QWGoMW
>>825
パイプとかリダイレクトとかどうするの?
もしかしてCUI(というかCLI)使ったことない?
0827デフォルトの名無しさん2015/03/15(日) 09:45:28.09ID:0tKSfbWr
>>822
静的リンクだからDLLって認識ならそれがまず間違い
EXEだろうと問題なく静的リンク出来るし普通にやるよ
両方EXEにして条件調べて走らせたい方をサブプロセスなりアプリドメインなりで走らせる
これが正解
0828デフォルトの名無しさん2015/03/15(日) 09:55:35.09ID:5k25S29H
GUIの時代とはいえCLI(Command Lineの方な)の考え方くらいはプログラマなら正しく理解しておくべきだな
対話式UIとしてのCUIは終わったけどプログラマブルなインターフェースとしてのCUI(CLI)は必須だよ
Unix系は言わずもがな、WinでもPowerShellでまた再評価されてるし
0829デフォルトの名無しさん2015/03/15(日) 11:14:18.48ID:WxCi+1nC
デリケートについて質問なんですが、
デリケートを実行時、
引数が与えられたものはその引数で実行し、
与えられていないものは実行時に渡した引数が実行されるのでしょうか?

public class TestDelegate{

public delegate void TestAction(string msg);
TestAction Events;

TestDelegate(){
Events+= new TestAction((x) => Test("1"));
Events+= new TestAction((x) => Test("2"));
Events+= new TestAction(Test);
}
public void Do(){
Events("3");
}
}

///result
1
2
3
0830デフォルトの名無しさん2015/03/15(日) 11:20:22.88ID:WxCi+1nC
GUI作る前にCUI作るのって常識だと思ってた
0831デフォルトの名無しさん2015/03/15(日) 11:25:03.95ID:SPZ1Q++Q
>>826
全ての CLI プログラムがフィルターだと言うアホな主張乙
0832デフォルトの名無しさん2015/03/15(日) 11:45:24.33ID:ILrktvZ0
>>830
何に使うんだ?
0833デフォルトの名無しさん2015/03/15(日) 12:08:05.19ID:bGttvvz0
linuxスレかと思って納得しそうになった
0834デフォルトの名無しさん2015/03/15(日) 15:20:46.72ID:yULakZKg
>>829
delegateはdelicateではありません…それはよろしいのですが
デリゲートはメソッド(+インスタンス)の参照しか保持しないというか
どれも実行時にしか渡してないよ?最初の二つは引数無視する即値なラムダ式なだけ
0835デフォルトの名無しさん2015/03/15(日) 15:22:03.61ID:/mwwDFis
>>818です。
みなさん色々な議論ありがとうございます。
僕がやりたかったことは>>820のキーワードを基に調査した結果
以下のページのNo.4の前半によって完全解決しました。
どうもありがとうございました。
一応、今後このログに辿り着く人のために貼っときます。
http://oshiete.goo.ne.jp/qa/6669837.html

>>827
ちゃんと伝わってない気がする。
DLLはこの際関係ないよ。
静的リンクにしてわざわざ実体を一つにまとめてるのに、
オプションのためにそれを二つに分割したくない、ってこと。
HogeCuiを静的リンクすると、エントリポイントとして
HogeCuiとHogeGuiのそれぞれのMainメソッドが候補として挙がってきて、
そこからHogeGuiのメインメソッドを選んでフォームアプリとしてたわけ。
でも、exeの中身確認するとHogeCuiのメインメソッドも使わないのに入ってることは
確認してて、なんかもったいないなと思ったわけさ。
今回の解決策によって実体ファイルは一つで、
それを普通に実行するかオプションで実行するかによって
フォームアプリとコンソールアプリの分岐が実現できてる。

>>830
俺もその派。
どうせ使わないんだからCUIはいらないっしょ、っていう考え方もあるかとは思うけど、
GUIとCUIの切り分けの究極形がCUI:C#+GUI:XAMLなんだと思ってる(実際XAMLは経験ないんだが^^;)。
切り分けをあらかじめしっかりやっておくと、例えばCUIをC#で書いて、
あとはXAMARINでiOS用とAndroid用に変換して、GUIはそれぞれnativeで!ってことが可能だったりする。
メリットはたくさんあれど、デメリットはないと思う。
逆に、切り分けないことによるメリットは時間ぐらいだと思うけど、
実際に切り分けた場合よりも開発期間を短くできるかというと、
返って長くなってたりするんじゃないかと思う。
0836デフォルトの名無しさん2015/03/15(日) 15:44:13.10ID:se6Ndpqj
成果物がGUIならCUIなんて必要ないよ
無駄な工数
0837デフォルトの名無しさん2015/03/15(日) 15:54:22.71ID:GvBSog6G
質問者なんだからせめて日付変わるまではおとなしくしとけ
0838デフォルトの名無しさん2015/03/15(日) 17:18:34.60ID:xoQjS1Ik
左のウインドウに並んでいる画像をひとつ選択して、右のウインドウにドラッグして、右のウインドウの好きな場所に貼り付けたいんですけど
そういうライブラリはないでしょうか?
0839デフォルトの名無しさん2015/03/15(日) 17:41:53.51ID:6pbsqEWY
あるわけねーだろ作れ
0840デフォルトの名無しさん2015/03/15(日) 17:46:48.34ID:xoQjS1Ik
>>839
参考になるサイトがあったら教えてください
よろしくお願い申し上げます。
0841デフォルトの名無しさん2015/03/15(日) 18:06:15.60ID:lI5KOs1R
>>839
かわいい
0842デフォルトの名無しさん2015/03/15(日) 18:47:14.42ID:4m4AvKc7
そんなにGoogleのURLを貼らせたいのか
0843デフォルトの名無しさん2015/03/17(火) 00:48:40.87ID:R3SqHR4I
ActionやFuncのようにoperator ()を持つクラスってどうやって定義するんですか?
0844デフォルトの名無しさん2015/03/17(火) 11:21:18.75ID:fOt5FY4t
http://dobon.net/vb/dotnet/internet/webrequest.html
ここページにある一番下のC#用のコードにある↓のコールバックメソッドに

//非同期要求が終了した時に呼び出されるコールバックメソッド
private static void ResponseCallback(IAsyncResult ar)
                                  
これににSystem.IO.Stream以外の文字列を渡したいんですが
複数の引数を渡す場合にはどうすればいいのでしょうか?
0845デフォルトの名無しさん2015/03/17(火) 13:48:16.56ID:DdKageMC
2ch初心者スレで誘導されてこちらに来ました

質問です
Unityを使ってエロゲーを一人で作ろうと一念発起しました
ネットで調べたらまずC#がわからないと作れないみたいなんですけど
C#を理解するために最低限必須の知識がまた必要だったりしますか?

あともう一つ、私はPCを初めて買って使い始めて今年で15年目になるんですが
ローマ字で日本語入力ならなんとかタッチタイピングが出来ます
でもアルファベットの文字列入力になると途端にまごついちゃって困っています
日本語の意味をなさないABCの文字列になるとタイプミスが異常に増えるんですが
上達のコツってあるんでしょうか?

よろしくお願いします
0846デフォルトの名無しさん2015/03/17(火) 14:39:05.53ID:F7+3oz6M
>>844
Tupleでも突っ込んどけ

>>845
Cの勉強してからまた来なさい
08478442015/03/17(火) 17:08:45.62ID:fOt5FY4t
>>846 ありがとうございました。

System.IO.Streamと文字列をTupleに詰め込んでコールバック関数に渡すまではわかるんですが、
渡したあとIAsyncResult ar を Tupleにキャストが出来ません
IAsyncResultをオブジェクト型にして、そこからTupleにしてもキャストできないので困ってます・・・・
 

System.IO.Stream st = webres.GetResponseStream();
// 3つの型のオブジェクトを1つにまとめる
myTuple = Tuple.Create(st, "あああ");

//非同期でデータの読み込みを開始
//状態オブジェクトとしてStreamを渡す
IAsyncResult r = (IAsyncResult)st.BeginRead(
bufferData, 0, bufferData.Length,
new AsyncCallback(ReadCallback), myTuple);
}



//非同期読み込み完了時に呼び出されるコールバックメソッド
private static void ReadCallback(IAsyncResult ar)
{

Tuple myTuple = (Tuple)ar.AsyncState; ← ここがダメ

//状態オブジェクトとして渡されたStreamを取得
System.IO.Stream st = (System.IO.Stream)ar.AsyncState;
0848デフォルトの名無しさん2015/03/17(火) 17:16:17.31ID:F7+3oz6M
ヒント:Tupleはジェネリック
0849デフォルトの名無しさん2015/03/17(火) 18:42:54.17ID:fOt5FY4t
なんとか文字列だけはコールバック関数に渡せるようになったのですが
System.IO.Stream が渡せてないようです。


private void ReadCallback(IAsyncResult ar)
{
Tuple<System.IO.Stream, string> myTuple = ar.AsyncState;

Console.Write(myTuple.Item1.GetType());
Console.Write(myTuple.Item2);

System.IO.Stream st = (System.IO.Stream)myTuple.Item1; 
string s = myTuple.Item2;
}


↓でエラーになります
System.IO.Stream st = (System.IO.Stream)myTuple.Item1; 
型 'System.Net.ConnectStream' のオブジェクトを型 'System.Tuple`2[System.IO.Stream,System.String]' にキャストできません。

昨日からあれこれやって、最初はクラスを作って渡そうとしたのですが、文字列は渡せても
今回みたいに System.IO.Stream が渡せないんですよね
0850デフォルトの名無しさん2015/03/17(火) 18:53:32.34ID:F7+3oz6M
>>849
そのエラーメッセージよっっっっっっく見てみい
受け取り側で出てるんじゃないぞ
0851デフォルトの名無しさん2015/03/17(火) 20:01:34.18ID:fOt5FY4t
もうちょいヒント下さいw
System.IO.Stream コールバックメソッドに渡したら System.Net.ConnectStream や System.IO.Stream,System.String に
なぜ変化するのかがサッパリわかりません
0852デフォルトの名無しさん2015/03/18(水) 09:04:26.06ID:wDcY5eax
ふらっとスレの新スレ立てないで埋めんじゃねーよタコ
0853デフォルトの名無しさん2015/03/18(水) 12:52:40.42ID:rgOq7Izu
>>849
よくわからないけど、呼び出し側で明示的にtupleを定義しないとダメとかじゃなくて?

Tuple<st,string> tuple = Tuple.Create<st,string>(st, "あああ");
0854デフォルトの名無しさん2015/03/18(水) 13:22:31.85ID:kF3M8QQK
>>849
その書き方キャストはmyTupleにかかりItem1にはかからない
0855デフォルトの名無しさん2015/03/18(水) 14:15:47.70ID:Z6Z60fm9
すごく初心者な質問で申し訳ないです
以前は初心者スレがあったと思うのですが見当たらなかったのでこちらに書き込ませていただきます

画像フォルダにx個の画像があったとしてy個の画像をpicturebox等でフォームに表示させたいのですがどういう方法があるのでしょうか?

picturebox "文字列" = new picturebox()
みたいな書き方ができないので困ってます。
0856デフォルトの名無しさん2015/03/18(水) 14:18:10.75ID:Z6Z60fm9
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31564&;forum=7

自己解決しました
0857デフォルトの名無しさん2015/03/18(水) 14:56:05.91ID:wDcY5eax
>>854
おいおい
0858デフォルトの名無しさん2015/03/18(水) 17:05:32.27ID:bQcL7aTH
将棋ソフト「Apery」のソースコードが公開
http://www.forest.impress.co.jp/docs/news/20150317_693099.html
0859デフォルトの名無しさん2015/03/18(水) 18:09:37.62ID:eMbfMOiK
c#やりたいのにVBAやらされて辛い。
0860デフォルトの名無しさん2015/03/18(水) 20:41:49.07ID:KG+PvW+h
Windows Phone流行はよ
0861デフォルトの名無しさん2015/03/19(木) 00:14:17.55ID:bNeGNw49
androidのアプリはc#でつくれますか?
無料ですか?
0862デフォルトの名無しさん2015/03/19(木) 08:35:08.27ID:Gzynmn0K
>>861
xamarin有料です
0863デフォルトの名無しさん2015/03/19(木) 10:50:57.44ID:UsvnOtte
Win RT+Prismで.NETイベントじゃなくあえてPub/Sub使うケースってどんな時?
デスクトップから突然ストアアプリにきて色々増えてて戸惑ってるorz
0864デフォルトの名無しさん2015/03/19(木) 11:13:06.50ID:7NX1VyPt
誰か先生になってください
0865デフォルトの名無しさん2015/03/19(木) 12:17:51.08ID:Gzynmn0K
>>864
住み込みで雑用から
0866デフォルトの名無しさん2015/03/19(木) 12:43:17.13ID:b7/FbYD2
>>863
互いに依存しないクラスの間で通知を行いたいときに使うんだろ
単体テストや再利用時にはEventAggregatorさえ差し替えればいい
インターフェース使ってもいいけど、それだと後で変更がしづらくなるからな
だから、元々明示的に依存してるクラスの間で使う意味はあまり無いだろうな
Prismの目的からいって、メモリリークが回避できるのは副次的なものだと思う
0867デフォルトの名無しさん2015/03/19(木) 19:21:31.25ID:zqrkQTg/
>>845
Q.今どんな知識が必要ですか?
A.いいから始めろ、やりたいことを調べろ、その解説がわからなかったらさらにそれを調べろ、
 それがわからなかったらさらにそれを調べろ。
 今何が必要か気にしてる暇があったら始めろ、とにかく動け、さっさと一歩を踏み出せ。

Q.タイピングの上達のコツは?
 とにかくやれ、そのうち慣れる。必要に迫られたスキルは自ずと身につくもんだ。
 どうしても集中して上達したいならタイピングソフトでも買え
0868デフォルトの名無しさん2015/03/19(木) 23:16:33.85ID:XgAg07xQ
ある処理Xを実行してGCを実行させる
これを繰り返したところCLR MemoryのBytes in All heapsは低い値で安定していた
しかしProcessのWorking Set(プライベートの方)は30MBytesずつ増えていき120MBytesまで増えた
しかし120MBytes以上に増える事はなかった
Virtual Memoryは300MBytesで安定していた

これってどう解釈したらいいんですかね?
最初はアンマネージコードがメモリリークを引き起こしていると思ったんですが
リークしているなら120MBytes以上に増えるはずですよね
仮想メモリも安定してるからスワップアウトしてるってわけでもなさそうです
0869デフォルトの名無しさん2015/03/19(木) 23:58:41.72ID:b7/FbYD2
CLR Profilerに聞け
0870デフォルトの名無しさん2015/03/20(金) 03:19:41.71ID:AFFfIoWj
超初心者です
スレ違いな点、意味不明な点があったらすみません

staticなクラスAのメンバ配列を、クラスBにコンストラクタで受渡して、
(Class B {int[,] a; B(int[,] a) this.a = a;}みたいな書き方しました)
Bのaを書き換えたところ、Aのaが書き換わってしまいました
(わかりにくくてすみません)

元のクラスの配列を書き換えないためには、どうしたら良いでしょうか
言葉足りない点が多いと思いますが、どうぞよろしくお願いします
0871デフォルトの名無しさん2015/03/20(金) 03:41:16.90ID:IeE6utRY
.net3.5でジェネリックリストを多用したり、継承すると、
共変性の問題で詰まるんだが。。。

なにかいい方法ないですか?
0872デフォルトの名無しさん2015/03/20(金) 04:15:53.84ID:gKCbE9yH
>>870
Array.Copy()
0873デフォルトの名無しさん2015/03/20(金) 04:53:25.32ID:AFFfIoWj
>>872
ありがとうございます!!
C#ではarray A = array Bは参照渡しになるんですね!!
一歩前に進めました!
0874デフォルトの名無しさん2015/03/20(金) 06:22:07.56ID:7kGez1M5
MSBuild Engine is now Open Source on GitHub - .NET Blog - Site Home - MSDN Blogs
http://blogs.msdn.com/b/dotnet/archive/2015/03/18/msbuild-engine-is-now-open-source-on-github.aspx
0875デフォルトの名無しさん2015/03/20(金) 07:06:29.05ID:j37DXh6X
>>871
・ジェネリックリストを継承するのは厨臭いからやめろ
・クラス間のやりとりには極力IEnumerable<T>を使え
0876デフォルトの名無しさん2015/03/20(金) 09:17:21.42ID:shwzduSC
>>875
リストを継承してるわけでなく
内部で保持しているだけです。

当然、リストを直接いじって欲しくない場合はenumで返してます。
0877デフォルトの名無しさん2015/03/20(金) 09:44:00.51ID:7IRK8izM
>>876
共変性の問題で詰まるといわれても困る
言語仕様があなたの要求(や或いは妄想)に合致しないだけの話では?

.net4.0を検討したら如何
0878デフォルトの名無しさん2015/03/20(金) 22:44:39.62ID:8t27nLZP
WinRTコンポーネントってC#で作るメリットあんの?
0879デフォルトの名無しさん2015/03/20(金) 22:56:55.50ID:j37DXh6X
私もわかりません
何がわからないのか説明できないならプログラミングは向いてないので諦めましょう
0880デフォルトの名無しさん2015/03/21(土) 12:14:53.69ID:Kq5CKcX4
C#でWebBrowserコントロールを使っています。

一番下にスライドさせる為に、X座標の数字を 1,500としているのですが
サイトによっては、jQueryで隠しブロックが表示されてしまい(ブラウザの高さが増える)
スクロールバーを一番下に移動させる事がうまく出来ません。

どの様なページを開いてもスクロールバーを一番したまで
自動で下げるにはどうすれば良いでしょうか?


wb.Document.Window.ScrollTo(400,1500);
0881デフォルトの名無しさん2015/03/21(土) 13:55:35.69ID:g1XQ2yrj
>>880
無理
無限スクロールの存在と矛盾してる
0882デフォルトの名無しさん2015/03/22(日) 10:55:41.74ID:1/U9rVrz
>>881

thank you baby
0883デフォルトの名無しさん2015/03/22(日) 19:30:25.25ID:cRMgPMeD
ルートオブジェクトの列挙って出来る?
0884デフォルトの名無しさん2015/03/22(日) 20:53:54.56ID:3civYS9u
GCのルートのことか?
C#だけでは無理
C++でCLRをホストすればCOM API使って取れる
メモリリークなどのデバッグをしたいだけならCLR Profilerが使える
CLR Profilerはヘッドレスで動かすこともできるから、アプリに組み込むこともできなくはない
0885デフォルトの名無しさん2015/03/22(日) 21:13:25.43ID:1/U9rVrz
IEをC#で操作するプログラムを組んでいます。
テキスト項目への入力は出来るのですが
ie.setAttribute("value", "hoge");


コンボボックスの項目を選択する方法が分かりません。
たとえば、optionの値が "lemon" の項目をC#でIEを操作して選択するにはどういう
コードをかけば良いのでしょうか?

ie.select(); ← これだとエラーになります。

<select>
<otion value="apple">apple</option>
<otion value="lemon">apple</option>
<otion value="cabbage">cabbage</option>
</select>
0886デフォルトの名無しさん2015/03/22(日) 21:52:47.40ID:3civYS9u
そんなもんフォームのデータを作って直接POSTすればいいだろ
ブラウザのデバッガ使えば楽勝
0887デフォルトの名無しさん2015/03/22(日) 22:36:12.98ID:4Yjb2LTh
IEをC#で操作って意味わかんねーんだけどもしかして俺は取り残されてるのか
なんか知らんが普通にサーバ側でスクリプト吐くように書けばいいんじゃねーのかよ
0888デフォルトの名無しさん2015/03/22(日) 23:01:13.50ID:3gWalJmt
大抵の人はおぼろげに意味をエスパー出来てると思うよ
WebBrowserコントロールかWinAPI叩きかSeleniumか何かを使ってるってことでしょ

大抵javascriptと同じAPIだからselectのidかnameを参照するとか、selectタグをたどるとかしたあとにsetAttributeでしょうね
合ってるかどうかは知らん
<select id="selectid" name="selectname"> ... </select>

ie.getElementsByTagName("select")[0].setAttribute("value","apple") //1個目のselectタグ
ie.getElementsByName("selectname")[0].setAttribute("value","apple") //1個目のselectnameというnameのタグ
ie.getElementById("selectid").setAttribute("value","apple")
0889デフォルトの名無しさん2015/03/23(月) 00:50:27.03ID:NciN/kwk
プログラム初心者です。

ババ抜きを作っているんですが、
重複のチェックってどうやるんでしょう?

一応、数字だけならこんな感じにしたのですが
if (list.remove(card) == false) list.Add(card);

トランプ感を出すために
マークとヴァリューを持ったクラスを作りました。

そしたらこんな風になって
var FindFlag = false;
foreach(var card in hand){
if(card.value == drawcard.value){
hand.remove(card)
FindFlag = true;
break;
}
}

if(FindFlag == false) hand.Add(drawcard);

クラスにするだけでえらい手間が増えるなぁと思った次第です。
もっとかっちょいいプログラムの仕方はありますでしょうか?
0890デフォルトの名無しさん2015/03/23(月) 01:05:42.79ID:pSjqqcPy
ババ抜きでカードが重複することってあるの?
0891デフォルトの名無しさん2015/03/23(月) 01:10:11.75ID:NciN/kwk
重複というかペアができたら消す、
できないなら追加したいだけです。
0892デフォルトの名無しさん2015/03/23(月) 01:24:43.97ID:jcFHdOQT
>>882
You are welcome a foolish baby.
0893デフォルトの名無しさん2015/03/23(月) 02:40:38.41ID:d7pBCjoA
>>889
foreachの中で列挙対象のオブジェクト削除って可能だっけ?
というかフラグなんか使わなくても

var card = hand.SingleOrDefault( x => x.Value == drawCard.Value );
if( null == card )
  hand.Add( card );
else
  hand.Remove( card );

みたいな感じで。テストはしてない
0894デフォルトの名無しさん2015/03/23(月) 02:52:28.42ID:EfZYyTde
>>888
ありがとうございます!エスパー様!解決しました!!
読解力のある方がいて助かります。
0895デフォルトの名無しさん2015/03/23(月) 03:18:10.60ID:0n8ws3su
>>889
IEquatable<Card>を実装してEquals(Card)メソッドをoverrideする
GetHashCode()メソッドもoverrideしてHashSet<Card>を使うのも良いだろう
0896デフォルトの名無しさん2015/03/23(月) 04:39:28.92ID:vnw8lcsO
>>893
なんか便利そうなのにありがとうございます。

>>895
なるほど、イコールを自分で作っちゃえばいいんですね。
ハッシュコードってよくわからないです。
なんでオーバライドするんですか?
0897デフォルトの名無しさん2015/03/23(月) 05:12:28.29ID:xwACqlut
GetHashCode()は、ハッシュ表のキーの比較に使うが、
一意性や一貫性は、保証されないようだ

Equalsメソッドをオーバーライドしたときは、
GetHashCodeメソッドもオーバーライドするらしいので、
Equalsで比較する時に、使うのだろう

ttp://www.weblio.jp/content/Object.GetHashCode+%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89
0898デフォルトの名無しさん2015/03/23(月) 06:03:14.63ID:0n8ws3su
>>896
うっかりEquals(Card)もoverrideと書いてしまったがそっちはオーバーライドじゃなかった
GetHashCodeをoverrideするのは、HashSet<T>がこのメソッドを利用して高速に要素の比較を行うから
予め取得されたハッシュコード(int)が同一だった場合のみ、等価性の評価にEquals()メソッドを呼び出す

で…書いといてなんだけど、Equals(Card)がマークを考慮しない比較というのも何だし
HashSet<T>を使うほどEquals(Card)が高コストでもないので、トランプ的にもIComparable<Card>で
CompareTo(Card)メソッドを実装してSortedSet<Card>を使うのが良いかもしれない

要素のクラスではなくコレクションが独自にチェックする場合はIComparer<T>を作って渡す
あるいはコレクションが重複を許可しないほど厳密でなくても良いとか、複数箇所で比較しないとかで
List<T>のままFindIndex(Predicate<T>)や>>893みたいにLINQ拡張メソッドを使ってラムダ式渡して済ませる事もできる
0899デフォルトの名無しさん2015/03/23(月) 07:16:02.82ID:39b0MZjd
数字の一致するカードを手札から探すだけだろ?
そんなもん盲目検索でいいよ
ハッシュ表どころか2分検索でも余計に遅くなるわ
0900デフォルトの名無しさん2015/03/23(月) 07:59:01.35ID:dP2v+nty
そゆことじゃなくて
IEquatableを実装するときの作法だろ
0901デフォルトの名無しさん2015/03/23(月) 08:16:01.38ID:39b0MZjd
そもそもIEquatableなんか実装する必要ないよ
マークを考慮しない比較に使うのは>>898の言う通り不適切
その場限りのデリゲートでいい
0902デフォルトの名無しさん2015/03/23(月) 09:50:12.64ID:CwInofJR
datagridviewについての質問です。
datagridviewのセルのテキストに特定の文字列が含まれている場合は、
そのセルの文字列を太字にしようと思い、cellformattingイベントで次のコードを実行しました。
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
string hoge = int.Parse(dgv.Rows[e.RowIndex].Cells[3].Value.ToString());
if (hoge =="moge")
{
dgv[2, e.RowIndex].Style.Font = new Font(dgv.DefaultCellStyle.Font, dgv.Font.Style | FontStyle.Bold);
}
}

結果、太字にはなったのですが、datagridview全体が点滅するような感じになってしまいました。
原因を調べたところ、どうやらcellformattingイベントはマウスカーソルがセル上を移動したりするたびに
呼び出されるため、このようになっているようです。

>CellFormatting イベントは、セルに値が書き込まれたり、マウスカーソルがセル上を移動したりするたびに呼び出される
EZ-NET: CellFormatting イベントで DataGridView のセルにスタイルを設定する? - Visual C# プログラミング
http://program.station.ez-net.jp/special/handbook/csharp/control/DataGridView/cell-formao
何かいい対策はないでしょうか?
0903デフォルトの名無しさん2015/03/23(月) 10:07:03.49ID:dP2v+nty
CellValueChanged とかでやればいいんじゃねーの?

CellFormattingでやろうとしてるDOBONとかがクソ
値によってスタイルを変えるのに値そのものが変わってないイベントでやろうとしてる最悪の低能
クソ情報垂れ流しおって
0904デフォルトの名無しさん2015/03/23(月) 10:44:41.89ID:CwInofJR
cellValueChangedだとなぜかエラーで落ちてしまいました。
rowsAddでやってみたところ動いたのですが、1行目のスタイルしか変更されず。

addrangeで一括で描画しているので1件目しか反応しないのかな。
09058942015/03/23(月) 12:58:15.12ID:EfZYyTde
>>888


value は取得できるのに、 src の属性値が取得出来ないのはなんでしょうか?
0906デフォルトの名無しさん2015/03/23(月) 20:22:59.39ID:ai9MTwtK
>>902
.Cells[3].とか直接指定しないで、CellFormattingの対象になっているセルで判断してみたらどう?

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
var text = Convert.ToString(e.Value);
if (text == "moge" )
{
e.CellStyle.Font = new Font(dgv.DefaultCellStyle.Font, dgv.Font.Style | FontStyle.Bold);
}
}
0907デフォルトの名無しさん2015/03/23(月) 23:15:00.14ID:k4Iv9Yid
解放順が厳密に決まっているN個のリソースをGCに任せても確実に順番通りに解放するためのパターンって有りますか?
0908デフォルトの名無しさん2015/03/23(月) 23:28:12.68ID:39b0MZjd
ファイナライザが呼ばれた時にその中では解放処理をしないで
そのN個のリソースを管理してるクラスが持つキューに解放対象のリソースのハンドルかなんかを登録しておく
さらにその管理クラスでリソースが生成された数と解放された数を管理し、
全てが解放されたらキューに登録されたリソースを順に解放する
と考えてはみたけどこんな頭の悪い事するくらいなら普通にその管理クラスにDispose実装しろ
0909デフォルトの名無しさん2015/03/24(火) 03:54:42.33ID:figDJ/Iz
オブジェクトの解放を、GCに任せてよいのは、
エラーも起こらない、単純なオブジェクトに限る

オブジェクト同士が循環参照しているなど、
解放順序が問題になるような、
複雑な連鎖しているオブジェクトは、
GCには判断できないため、自分できっちり解放すべき
0910デフォルトの名無しさん2015/03/24(火) 09:00:20.49ID:InP3mEM1
>>909
は?
0911デフォルトの名無しさん2015/03/24(火) 10:44:23.83ID:9bMH5FZc
循環参照とかどうでもいいです。
明示的な解放処理が必要か否か。それだけ
0912デフォルトの名無しさん2015/03/24(火) 11:11:15.80ID:pTbi00Yx
正攻法はIDisposableなオブジェクトでラップして
ファイナライザやIDisposable.Disposeで呼ばれるメソッド内で
正しい順番で解放する
0913デフォルトの名無しさん2015/03/24(火) 11:14:10.96ID:ZEQduHch
double型の二次元配列のデータをファイルに書き出し読み込みを行いたいのですが
ファイルにはどのようなフォーマットで書き出すと読み書きがしやすいでしょうか
0914デフォルトの名無しさん2015/03/24(火) 11:38:13.53ID:twv14Qqw
PCの負荷が軽いのか、人がプログラム書くのが楽なのか
ファイルサイズなのか 人が目で見ても分かるようにしたいのか
いろいろあるじゃん
0915デフォルトの名無しさん2015/03/24(火) 11:45:56.69ID:InP3mEM1
>>913
配列の個数は?
0916デフォルトの名無しさん2015/03/24(火) 12:30:09.86ID:ZK0UnpiA
基本的にはSSVがいい
数値データってスクリプトでバッチ処理かけたりするケースが多いと思われるので、
バイナリだと不便極まりない
ただし、
書いたときと読んだときで値が厳密に同一性でないといけないならバイナリ
ファイルサイズが3倍程度になるのが許容できないならバイナリ
読み書きの速度が許容できないボトルネックになるならバイナリ
0917デフォルトの名無しさん2015/03/24(火) 12:36:24.65ID:ZEQduHch
>>915
1つです

>>916
一行ごとに
String.Split
Double.Paise
ということですか?
0918デフォルトの名無しさん2015/03/24(火) 12:43:34.15ID:InP3mEM1
>>917
orz
配列の中身の個数は?
0919デフォルトの名無しさん2015/03/24(火) 15:55:31.71ID:ZEQduHch
>>918
縦横両方とも可変長です
0920デフォルトの名無しさん2015/03/24(火) 16:11:40.74ID:InP3mEM1
>>919
もういいorz
c#で読み書きするのなら、まるごとバイナリシリアライズでもしとけば。
0921デフォルトの名無しさん2015/03/24(火) 17:35:43.26ID:5p22mzyj
ワロタ
0922デフォルトの名無しさん2015/03/24(火) 19:11:08.93ID:c6mpFC05
>>909
>複雑な連鎖しているオブジェクトは、GCには判断できないため
それを判断するのが GC というものだ、循環参照を扱えないのならふつうのポインタですむ話
0923デフォルトの名無しさん2015/03/24(火) 20:09:43.21ID:bA1Gc2HG
GCで循環参照が解放できないのって参照カウント方式使ってる糞言語だけだろ
0924デフォルトの名無しさん2015/03/24(火) 20:38:58.17ID:5XUF0zTF
質問失礼します。
public class clsA : clsC
public class clsB : clsC
上記のような定義があるとして、clsAやclsBの関数が呼ばれた直後と最後で、clsCのBeginとEndを呼びたいです。
ただし、clsA clsB 上に base.Begin(); base.End(); という呼び出しは書けません。
clsA clsBの関数は追加で増やす場合もあれば削除する場合もあります。その際clsCに手を加えられません。
clsAとclsBの関数名は重複しているものもあれば、別のものもあります。
おそらくですが、実装不可能ですよね?
0925デフォルトの名無しさん2015/03/24(火) 20:42:22.79ID:ZX4Zfj1v
>>924
日本語でpse
09269242015/03/24(火) 21:03:03.61ID:5XUF0zTF
>>925
すいません。では詳しく書きなおします。

public class clsA : clsC
public class clsB : clsC
上記のようなクラス定義があるとして、clsAやclsBの関数が呼ばれた直後と関数呼び出し後で、clsCのBegin関数とEnd関数を呼びたいです。

たとえば、clsC のBegin関数に"ABC"と出力、End関数に"DEF"と出力するようになっていたとします。

public void test() {
log("hoge");
}
上記のように clsA に書かれたtest関数を呼び出したら、出力結果が
ABChogeDEF
となるようにしたいのです。
0927デフォルトの名無しさん2015/03/24(火) 21:56:23.94ID:ZX4Zfj1v
>>926
try, finallyで自分で呼び出すしか思いつかない
0928デフォルトの名無しさん2015/03/24(火) 22:07:19.05ID:nK3ugp2t
>>926
発想がお馬鹿としか言いようがない。
0929デフォルトの名無しさん2015/03/24(火) 22:09:47.85ID:I9d+0tlB
アスペクト指向だよね
0930デフォルトの名無しさん2015/03/24(火) 22:36:33.74ID:CAwB99Qc
イベント登録用のメソッド作って
追加時にbeginとendも一緒に登録すればいいんじゃないの?
関数を追加をどんな方法でやりたいのかしらんけど
09319242015/03/24(火) 22:48:57.40ID:5XUF0zTF
やっぱり無理ですよね。。。
プロファイルのライブラリがあって、BeginとEndを全ての関数の頭とお尻に書くように要求されてまして、、、
全ての関数に付けるのは嫌だったという経緯です。
既定クラスでの呼び出しは諦めます。
ありがとうございました。
0932デフォルトの名無しさん2015/03/24(火) 23:02:12.67ID:grDlNje1
Castle.DynamicProxyとか使えんじゃね?
自分じゃ使ったことないけど。
0933デフォルトの名無しさん2015/03/25(水) 02:51:12.16ID:a84bJL6H
>>926
>>929の言うとおり完全にアスペクト指向プログラミングの考え方
決して馬鹿ではない
http://www.slideshare.net/Posaune/caop
09349242015/03/25(水) 07:03:58.63ID:O5UmiwXE
>>933
ありがとうございます!
14 of 22 が参考になりました。
早速試してみます。
0935デフォルトの名無しさん2015/03/25(水) 08:05:41.89ID:khkApypB
マネージドとアンマネージドの混在の場合、pin_ptrというのがあって
マネージドで確保したメモリのポインタをネーティブに渡してネイティブで
処理することはできた。ところがネーティブで確保したメモリーのポインタ
をマネージドでもらうのはどうするの?ヒントおしえて。
0936デフォルトの名無しさん2015/03/25(水) 08:24:28.32ID:w567qPLi
ネイティブのポインタはGCで勝手に無効になったりしないから普通にC#のポインタやIntPtrで受ければよい
何がわからないのかわからない
0937デフォルトの名無しさん2015/03/25(水) 09:15:49.35ID:H374DreS
別ソリューションのクラスからFrom1のインスタンスをつくる場合ってどうするんですか?
同じソリューションなら↓になるんですけど、別ソリューションだと「型 'form1' が定義されていません。」ってなるんですけど
当然プロジェクト参照はしています。

private static Form1 _form1Instance;
0938デフォルトの名無しさん2015/03/25(水) 09:21:06.77ID:khkApypB
>936
 あっ、そうなの。簡単すぎてサンプルがないのか。サンプルを探しまくっていた。
ネーティブのバッファはバイトイメージなんだけどByteポインターってないの?
0939デフォルトの名無しさん2015/03/25(水) 09:41:22.61ID:OEoDi144
>>937
普通にdll参照するだけでは?
0940デフォルトの名無しさん2015/03/25(水) 11:05:15.10ID:02yD7H6L
>>938
pin_ptrとかはC++/CLIだよね?それらをC#でやる場合で良いのかな?
通常はネイティブコードと連携するならプラットフォーム呼び出し(P/Invoke)を使う
(DllImport属性の適用されたstatic externで外部実装されるメソッド宣言)

その際の参照云々について、Blittable型はそのまんまref/outでもいける
それ以外はIn,Out属性を設定し、MarshalAs属性でメモリレイアウトを制御する
unsafeならBlittable型は普通にポインター宣言できるし、それに対するC++同様の演算も出来る

safeコードならvoid*に相当するIntPtrとして受け取り、メモリレイアウトが同一ならSafeBuffer、
メモリレイアウトが異なりマーシャリングが必要ならMarshalクラスの各メソッドを使うことも出来る
ちなみにfixedや&に相当するGCHandle.AddrOfPinnedObject、Marshal.UnsafeAddrOfPinnedArrayElementもあるでよ
0941デフォルトの名無しさん2015/03/25(水) 11:14:15.75ID:H374DreS
>>939
それでもダメなんですよね〜
やっぱり参照がおかしいんですよね?
0942デフォルトの名無しさん2015/03/25(水) 11:42:29.81ID:OEoDi144
>>941
publicになってないかnameスペースが違う
0943デフォルトの名無しさん2015/03/25(水) 16:48:41.24ID:khkApypB
>940
ここまででけた。でもでもIntPtrからどうやってとりだすの?
*pじゃだめだ。

//func2でネーティブに保存したバッファの内容を読みだす。

private void button2_Click(object sender, EventArgs e)
{
IntPtr p = clsWrap.func2func (100);

for (int i = 0; i < 100; i++)
{
string dt = string.Format("{0}", *p);
p +=1;
listBox1.Items.Add(dt);

}
}
0944デフォルトの名無しさん2015/03/25(水) 16:49:38.72ID:khkApypB
以下はWRAP関数
///C++/CLIのラッパー
//IntPtr WRAP::clsWrap::func2fun(int no){
// int *p = TT::func2(no);
// return static_cast<IntPtr>(p); //IntPtrにキャスト
//}
//---------------------------------------
//W32
//TT::func2()
//static int gbuf[1000];
//
//int * TT::func2(int no){
// int i;
//
// for (i = 0; i < no; i++){
// gbuf[i] = i + no;
// }
// return gbuf;
//}
0945デフォルトの名無しさん2015/03/25(水) 19:25:17.06ID:02yD7H6L
>>943-944
IntPtr自体はポインタじゃないのでデリファレンスは無理(C++で言えばINT_PTR、ポインター長のint
ポインタで受け取るならアンセーフコードの許可してunsafeメソッドにしC#でもint* pとしてp[i]で参照する
アンマネージからはポインタを直接返せば良いけど…ネイティブ側でバッファを用意するのはあまり良くないかな

C#でnew int[]したものを[Out]属性で渡して(アンマネージ側の受け取りはint*)、サイズも渡して書き込んでもらう方が
C#側でポインタを使わなくて済むし、GCが解放する、C#側で配列を用意するのが都合悪ければ仕方が無いが…
たとえばReadProcessMemoryなんかはこれでマネージ配列に突っ込んでくれるよ

[DllImport("kernel32", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, IntPtr nSize, out IntPtr lpNumberOfBytesRead);

ちなみにIntPtrから取り出すならプリミティブ配列はMarshal.Copy、構造体配列はSafeBuffer.ReadArrayあたり
要素ごとにMarshal.PtrToStructureは遅いので…まぁ配列返すなら、そのままポインタで受け取った方が楽だね
09469452015/03/25(水) 20:13:25.76ID:02yD7H6L
嗚呼、一つ忘れてたけどint配列のポインタをIntPtrとして受け取るなら要素ごとにMarshal.ReadInt32でも良い
これはMarshal.PtrToStructureと違ってマーシャリングせず、内部でデリファレンスするだけなのでポインター並
…というかそのC++/CLIにはラッパーのみ?C#はDllImportで(自動で固定されて)直接ネイティブ呼べるよ?
0947デフォルトの名無しさん2015/03/25(水) 23:22:40.45ID:tBQh/Ltl
基底クラスの
object Value{get;set;}を
継承クラスでは
T Value{get;set;}で振る舞うようにすることは可能でしょうか?
0948デフォルトの名無しさん2015/03/25(水) 23:29:46.80ID:proRqoBt
継承の意味分かってるのかとw
0949デフォルトの名無しさん2015/03/25(水) 23:34:23.55ID:tBQh/Ltl
できました!
ので、もう大丈夫です
0950デフォルトの名無しさん2015/03/25(水) 23:37:43.37ID:psGFo2Jc
属性って拡張性を阻害してないか?
例えばデコレータで拡張したいときに属性の張り直し面倒くね?
0951デフォルトの名無しさん2015/03/26(木) 07:34:11.26ID:FQTVCqe4
属性はConditionとDllImportとValueConversionしか使ったことないのでよく分からない
0952デフォルトの名無しさん2015/03/26(木) 07:37:27.14ID:vGJK9a/j
>>945
IntPtrはvoid*にキャストできる

>>950
Inherited=true
0953デフォルトの名無しさん2015/03/26(木) 07:46:22.59ID:DeNcZS0K
>>952
Inherited trueって継承したときだけじゃん
属性のせいでクラスを再利用するには継承しないといけなくなった
これは致命的な言語的欠陥
0954デフォルトの名無しさん2015/03/26(木) 07:53:30.57ID:vGJK9a/j
>>953
何を言ってるのかわからない
もともとデコレータって基底クラスを継承しないといけないだろ
継承関係なしに同名メンバを呼び出せるようにしたいということか?
そんなもん属性全く関係ないし静的言語では一般的には間違ったやり方だ
インターフェイスを使え
0955デフォルトの名無しさん2015/03/26(木) 08:33:05.99ID:9LfcDYxi
ボクのかんがえたさいきょうのげんごしよう
の話は続けなくていいですよ。
お前の人間性と同じでつまらないからね。
ママにでも聞いてもらえ。
0956デフォルトの名無しさん2015/03/26(木) 08:50:31.59ID:DeNcZS0K
>>954
あー基礎的な内容を納めてないんだな
まだこの話題に乗れるレベルじゃないよ君
0957デフォルトの名無しさん2015/03/26(木) 09:12:46.45ID:l7K6W2jI
僕もこの話題に乗れるレベルじゃないけど
アスペクト指向ってキモいね
実現手法がキモい
0958デフォルトの名無しさん2015/03/26(木) 12:20:47.34ID:AQr6ntJw
>>957
メタコードがキモいんか?
0959デフォルトの名無しさん2015/03/26(木) 15:30:47.25ID:iGJalkdz
別にメタコードはキモいとは思わんし、実現方法もおかしいとは思わないけど、昔からあるようなことに対していちいち○○指向とかの名前つけてドヤってるのがキモい
0960デフォルトの名無しさん2015/03/26(木) 17:06:00.99ID:+6QYYRsv
アスペクト指向って、設計者の低レベルと多重処理の産物みたい
0961デフォルトの名無しさん2015/03/26(木) 20:56:31.51ID:k9c4vBqP
アスペが湧いてるな
0962デフォルトの名無しさん2015/03/26(木) 21:38:45.56ID:UNsHB6qL
属性にどういう機能求めてるの?
0963デフォルトの名無しさん2015/03/26(木) 23:34:53.13ID:3EwJ3iS3
アスペクト指向に出会ったのは20年以上前
10年前に再び出会った時は話題になりつつあった

今はそんなに扱われてないので若干悲しい
0964デフォルトの名無しさん2015/03/27(金) 08:05:00.22ID:JgPCIX8R
>>962
そりゃ質問者が言ってる通り、継承しなくても属性を付けられる機能だろ
継承するとInherited=trueでない属性が失われる→
貼り直しが面倒→
だから継承前提の設計は糞

デコレータを例に挙げてるけど使ったことなさそうとか
デフォルトで属性が引き継がれるようにすると、属性を削除したいニーズに対応するために
Delete動詞的な属性を用意しなければならないくなって筋悪だとか
思うところは色々
0965デフォルトの名無しさん2015/03/27(金) 08:33:20.89ID:Zbc2MDwX
本当にデコレータ使うんなら、
単にデコレータの基底クラスを使う場所に共通のコード入れるか
いろんな場所で使うんならそれこそAOP的な動作を追加するデコレータを被せるとか
もっと真っ当な方法はあるからな
0966デフォルトの名無しさん2015/03/27(金) 08:34:24.25ID:LEkSzHkI
>>963
プロファイラとかトレースロガーぐらいしか用途を思い付かないんだが、流行るほど便利な用途があるんか?
0967デフォルトの名無しさん2015/03/27(金) 08:36:41.02ID:JKhZG9XI
>>963
低レベルなヤツが作ったOOもどきも同じ。
0968デフォルトの名無しさん2015/03/27(金) 11:16:06.70ID:Zbc2MDwX
C#における「コンポーネント指向」みたいなもんで、
関心事の分離自体は(例えば>>965のように)OOを用いて十分実装できる概念なんだよな
バカがOOと直行する概念とか言い出したからおかしくなった
0969デフォルトの名無しさん2015/03/27(金) 12:34:35.95ID:CX/S/YAR
オブジェクト厨って、うんこしたらうんこ見なきゃ満足できないんだろうな。

うんこが出ましたで十分なのに、なんでうんこの実態に異常な執着心があるんだろう。
0970デフォルトの名無しさん2015/03/27(金) 12:47:11.92ID:qCIvk3hi
何のこっちゃw
0971デフォルトの名無しさん2015/03/27(金) 13:11:12.90ID:kiqbsef8
血便出ているのに「うんこ出たからいいじゃん!」って人にはどう対応したらいいんだろうか
0972デフォルトの名無しさん2015/03/27(金) 14:19:50.24ID:JKhZG9XI
OO厨はどんな食材でもウンコにしてしまうからな。
ウンコなんで煮ても焼いても食えぬ。
0973デフォルトの名無しさん2015/03/27(金) 15:47:12.92ID:aS32uikB
いいからコーダーはコード書けよ
0974デフォルトの名無しさん2015/03/27(金) 17:05:39.72ID:FbXdxQFA
適切に実装されていれば便利になるものを否定する意味が分からないけどね
アスペクト指向はうまく使うのがかなり難しいからあってもほとんど使わないと思う
0975デフォルトの名無しさん2015/03/27(金) 18:36:23.17ID:Zo0gsRSJ
usingで条件によってインスタンスを作成する際のコンストラクタを変えたいのですが
using(ClassA inst = (flag ? new ClassA(data1) : new ClassA(data1, data2))) {
}
今こんな感じなのですが呼ばれない方のインスタンスが無駄に確保されたりしませんか?
0976デフォルトの名無しさん2015/03/27(金) 18:40:12.44ID:0X9R3ju6
>>975
調べればすぐ分かることをなぜ調べないんだろう
https://msdn.microsoft.com/ja-jp/library/ty67wk28.aspx
0977デフォルトの名無しさん2015/03/27(金) 18:46:16.09ID:Zo0gsRSJ
>>976
すみません片方しか評価されないのですね
ありがとうございます
0978デフォルトの名無しさん2015/03/27(金) 23:24:31.77ID:72GaouxL
デコレータを継承と言ってる時点でこの村の技術水準の低さがわかる
0979デフォルトの名無しさん2015/03/27(金) 23:29:28.41ID:JgPCIX8R
自分の日本語能力の低さでも心配した方が良さそうだな…
いいとこ紹介しようか?
0980デフォルトの名無しさん2015/03/27(金) 23:48:41.98ID:72GaouxL
>>979
君が世話になってる病院か?
ヤブ医者じゃねえか
0981デフォルトの名無しさん2015/03/28(土) 00:23:44.05ID:QvAo9luz
あ
0982デフォルトの名無しさん2015/03/28(土) 01:38:12.34ID:V3KKlDPY
め
0983デフォルトの名無しさん2015/03/28(土) 01:38:57.62ID:SN7vQ976
り
0984デフォルトの名無しさん2015/03/28(土) 03:49:22.03ID:NeQ9SRfJ
と
0985デフォルトの名無しさん2015/03/28(土) 03:59:15.87ID:XdXZJLO5
>>978
昔からのデザパタも Python とかのも、同じデコレータだし、この程度のことで技術水準とか
ここ偶にかなり詳しい方とかいるから、どやりたいなら気を付けて
0986デフォルトの名無しさん2015/03/28(土) 06:59:02.19ID:OyQ/coxi
少なくとも俺より出来るやつはここでは見た事無いな
低レベルだよはっきり言って
0987デフォルトの名無しさん2015/03/28(土) 07:47:03.58ID:nd1s6XTc
え
0988デフォルトの名無しさん2015/03/28(土) 08:17:15.37ID:dK0wuEfn
確かに低レベルだよはっきり言って
少なくとも俺より出来るやつはここまで見た事無い
0989デフォルトの名無しさん2015/03/28(土) 08:26:57.96ID:OyQ/coxi
だろ?
まあ一流の人間が2chで落書きなんて暇なことやるかって話だよな
0990デフォルトの名無しさん2015/03/28(土) 08:28:56.41ID:3hbPl+o9
お、お、押すなよ、押すなよ
0991デフォルトの名無しさん2015/03/28(土) 09:28:42.59ID:dK0wuEfn
絶対に、をつけない三流芸人ですよこいつぁー
0992デフォルトの名無しさん2015/03/28(土) 12:37:19.55ID:H3jos3v3
を
0993デフォルトの名無しさん2015/03/28(土) 15:12:29.87ID:KoG0P/EF
ををを
0994デフォルトの名無しさん2015/03/28(土) 17:19:21.34ID:6s5Th0th
をゑーゐ
0995デフォルトの名無しさん2015/03/28(土) 21:04:02.14ID:rUqxb8yd
ooooo
0996デフォルトの名無しさん2015/03/28(土) 22:18:10.56ID:L+hYYKmO
wowowo
0997デフォルトの名無しさん2015/03/28(土) 23:56:42.85ID:D5ZX+YoL
だってあなた絶対に押すなよって言ったら押すじゃないですかぁ
0998デフォルトの名無しさん2015/03/29(日) 01:06:13.14ID:k9FOA6LX
C#, C♯, C#相談室 Part87 [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1427558696/
0999デフォルトの名無しさん2015/03/29(日) 03:18:00.56ID:/ej769a2
うめ
1000デフォルトの名無しさん2015/03/29(日) 03:18:55.30ID:/ej769a2
千
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。