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

C#, C♯, C#相談室 Part79

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/03/19(火) 03:46:18.65
前スレ
C#, C♯, C#相談室 Part78
http://toro.2ch.net/test/read.cgi/tech/1356268827/

Visual Studio 2010 Express
http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx

Visual Studio 2012 Express
http://www.microsoft.com/visualstudio/jpn/products/visual-studio-express-products
0652デフォルトの名無しさん2013/06/02(日) 15:53:53.89ID:E6RfhoLP!
>>651
人の目を見て話せないモジモジ系(笑)の人なんだろうけど、
自己保身のためにも、不適正な仕様に従うにしても、最低限それが不適切であることは
ちゃんと指摘しておいた方がいいと思うよ。
0653デフォルトの名無しさん2013/06/02(日) 15:58:21.18
なあ、PG ってどの程度の仕様もらって作業するの?
クラス仕様とかまでもらえるの?
0654デフォルトの名無しさん2013/06/02(日) 15:58:45.31
それは絶対に指摘してはならないと言ってるだろう。頭の悪い奴だ。
0655デフォルトの名無しさん2013/06/02(日) 16:00:31.47
>>652
>>651は日本のIT業界を皮肉ってるだけだよ
それとモジモジはどこからそう読み取った?
0656デフォルトの名無しさん2013/06/02(日) 16:07:09.77
>>653
会社毎に文化が違うからなんとも言えないかな
肩書きは契約に直結する場合が多いし
個人的にはクラス仕様までもらったらコーダーだと思う
0657デフォルトの名無しさん2013/06/02(日) 16:14:48.21
大手SEは外部設計書すら書かないよ。全部下に丸投げ。
そして無能SEは自分のミスも全部PGのせい。
とくに外資だと失敗はほとんどPGのせいにして責任回避するのがふつう。
0658デフォルトの名無しさん2013/06/02(日) 16:24:06.46
無能PGは良くても無能SEは良くないとでも言いたげだな
0659デフォルトの名無しさん2013/06/02(日) 16:26:00.57
滑稽なスレだ
0660デフォルトの名無しさん2013/06/02(日) 16:37:31.82
そろそろマ板でやれと言われるぞ
0661デフォルトの名無しさん2013/06/02(日) 16:48:12.80
幼稚園板でいいよ
あるのか知らないが
0662デフォルトの名無しさん2013/06/02(日) 16:49:38.09
>>661
メンヘル板ならこいつら幼稚な奴らにぴったりだろう
というか精神科行けよと思う
どう見ても精神に異常を来たしてるだろう
0663デフォルトの名無しさん2013/06/02(日) 16:55:37.99ID:E6RfhoLP!
>>655
本気で言ってるのなら、君が皮肉った方がいいのは日本のIT業界じゃなく、
君自身の性格的欠陥の方。

最低限の自己保身的行動が取れないのは、バカかコミュニケーションスキルが欠如してるか、
またはその両方だろう。
0664デフォルトの名無しさん2013/06/02(日) 17:00:16.33
.,r‐--,,,_、                                   
.゙l゙'i、  `゙''-,,,,,,,,,,,,,,,,,_                         
: ゙l `'i、.,r‐-、,,`'-,、  `''ー、_                     
 ゙l ,/゛   `゙''''ミッ、   ゙゙'''-,、              
  У        `!ヽ、    ._,,i、      ,,,,,、          
 /          ゙r゙l,   / ‘i、    { ゙i、          
 |              ゙'i゙l ./    |,    ゙l、 ゙l          
 |         _,,,,_  .゙'},. |   ,/ ゚i、    ゙l  ゙l、        
 ゙l         ,r'"` `゙゙''',゙',lri、,,/  .゙l    ゙l  ヽ        
 │     .|     .彳 ゚|″    |    .|  │       
  │     .ヽ_   _,,-°  `i、    .|    .,,゙l, .゙ケ'=ッ、    
  ゙l, ,,,,,,、    ̄ ̄     .゙l,-'シ'',!.゙l  ,/゜ ゙'i、 .}i、`.゙'i、    
   `'| `'i、            ,,,rン・'゙,,,-'i| .|  .l、,,」  ゙=    |    
    .゙ヽ, .゙!,          i″ ゙''i,   .l │ /" .゚┓     .|    
     ‘'''l"        ゙'-,,、゙l、 .,,「 |  ゙l、  ゜     .|    
       ゙l'-,、       `゙''゙‐'" ./   .ヽ       .|    
          |  ゙'ヽ,、        /    '゙l      .,ノ    
       ′   .~'―--―ー¬''"         ヽ-,   |、   
                            "    .l゙
0665デフォルトの名無しさん2013/06/02(日) 17:13:32.98
>>663
性格的欠陥を指摘するとは大した洞察力だ
でも>>651はオレじゃないんだ残念

つーか肩の力抜けよ、あんた面倒臭いよ
絡むといつも疲れる
0666デフォルトの名無しさん2013/06/02(日) 17:26:43.85
>>663
無能SE乙。
0667デフォルトの名無しさん2013/06/02(日) 17:55:30.77
思い込み分析によるコミュニケーションスキルの欠如指摘ワロタ
0668デフォルトの名無しさん2013/06/02(日) 18:41:24.32
アスペ、コミュニケーションスキルの欠如。
こんなことすぐ言う奴はたいてい日本で浮いてるKYな奴。
0669デフォルトの名無しさん2013/06/02(日) 18:48:28.60
てか、ネットでそんなこと言ってるヤツは浮く以前に空気扱いなんじゃ。なにも言えなくて。
0670デフォルトの名無しさん2013/06/03(月) 09:41:49.80
C#ネイティブコンパイラって
市販とかフリープロジェクトの動きってないの?
ソニーがゲームで使っただけ?
0671デフォルトの名無しさん2013/06/03(月) 09:46:09.58
ネイティブって存在するのかな?
C#->C++へコンバートしてとかそんな
手法ばっかりじゃないの?
あとuniftyはあくまでスクリプトのポジションに当たる
コードをC#でかけるってだけで.netのような使われ方はしてないはず
0672デフォルトの名無しさん2013/06/03(月) 09:49:13.85
ソニーのは?
C++中間言語手法?
0673デフォルトの名無しさん2013/06/03(月) 09:50:22.95
ちなみにネイティブコンパイラで、仮想環境じゃなくともオートでfreeってできるもん?
オートfreeでガベコレはOS任せとか
0674デフォルトの名無しさん2013/06/03(月) 09:53:56.51
>>673
monotouchがios向け開発でやってるような手法じゃないの?
GCに相当する機能をあらかじめ用意して
C#->C++コンバートしたコードと一緒に
リンクしておくの
0675デフォルトの名無しさん2013/06/03(月) 09:57:43.88
OSにやらせるんじゃなくてライブラリでそれぞれのアプリ単位でヒープ管理するてことかな?
0676デフォルトの名無しさん2013/06/03(月) 10:01:11.30
そうそう
確かisoの開発制限の関係でこじんまりしたGCの機能を
MonoTouch側が用意して実行ファイルを作る際に
一緒に入れておくことで実現してたはず
C#でも書けるけどやっぱりiosの開発の制約上
objective-cにコンバートしてたしね
0677デフォルトの名無しさん2013/06/03(月) 12:07:10.79
ジェネリックでないクラスの
ジェネリックなコンストラクタを
どう書けばよいですか?

C++で以下のようなコードを
C#でどう書けばよいですか?

class A{
template<typename T>
A(T t){}
};
0678デフォルトの名無しさん2013/06/03(月) 12:40:13.17
それがC#で出来るとして、どういう使い道があるんだ?

コンストラクタじゃないメンバーなら出来るから、
わざと出来なくしてるんじゃないかな。
0679デフォルトの名無しさん2013/06/03(月) 12:43:10.28
generic classを継承して、genericじゃないclassを作るか、
generic classのコンストラクタの中で、Tの型に応じた処理を入れれば良いんじゃない?
0680デフォルトの名無しさん2013/06/03(月) 13:09:11.81
>>677
それが出来ない事でC#のgenericはコードの肥大を防いでるんじゃなかったっけ
0681デフォルトの名無しさん2013/06/03(月) 13:11:08.72
class A<T>{
public A(T t){}
}

の何が嫌なん?
0682デフォルトの名無しさん2013/06/03(月) 14:11:33.14ID:biPmxv2t!
>>681
何が嫌とかじゃなくて、何故できない仕様なのか知りたいという
知的好奇心でしょ。
0683デフォルトの名無しさん2013/06/03(月) 14:21:42.52
>>681
確かJITコンパイラ用のMSILはこのようにしてもコードを1つしか吐かないので、
C++のようにコンパイル時に要求された全ての型のコードを生成してしまうのと違って
動的なジェネリックが可能になってるとか

あまりに自由度が高いのでwhereで型の制約ができるし
0684デフォルトの名無しさん2013/06/03(月) 19:06:14.93
MSILはスタックマシンだけど
あれコンパイルしたとしてC++並に効率的になるのか?
0685デフォルトの名無しさん2013/06/03(月) 20:29:13.66
スタックマシン?VMじゃないぞ
JITコンパイラを使っている比較的新しい言語だ
今の性能が余っているCPUだからこそ出来る芸当
0686デフォルトの名無しさん2013/06/03(月) 20:36:13.10
それはmscoreeの話でCILはスタックマシン用言語だろ
0687デフォルトの名無しさん2013/06/03(月) 21:05:34.54
MSILは評価スタックを使用するスタックマシン用言語
実際のCPUはレジスタマシンだが
どのようにコンパイルされているのだろう
0688デフォルトの名無しさん2013/06/03(月) 21:41:21.39
IDEならブレークポイント掛けて逆アセンブル見ればいいじゃん
0689デフォルトの名無しさん2013/06/03(月) 22:36:41.53
JITコンパイルの結果まで出てくるのか?
0690デフォルトの名無しさん2013/06/03(月) 23:33:59.02
mdbgでなんかできなかったかな
0691デフォルトの名無しさん2013/06/04(火) 00:33:33.75
>>677
技術的にはできない理由はないと思うが
明示的に型引数を指定する場合にクラスの型引数なのかメソッドの型引数なのか曖昧になるだろ
コンストラクタの型引数に限り明示不可というのも一貫性に欠ける
0692デフォルトの名無しさん2013/06/04(火) 05:51:59.81
hoge+= (e,sender) => method1 = null

↑これってどういう意味ですか?
デリゲートもラムダ式も分かるんですがnullの部分の意味がよくわかりません
メソッドにnullを代入することってできるんですか?
0693デフォルトの名無しさん2013/06/04(火) 05:54:07.63
Devexpressってなんですか?
0694デフォルトの名無しさん2013/06/04(火) 05:59:54.17
>>692
method1はメソッドじゃなくて変数じゃね?
0695デフォルトの名無しさん2013/06/04(火) 07:22:02.52ID:ygsqUXBt!
変数名に惑わされるなって教訓ワロタw
0696デフォルトの名無しさん2013/06/04(火) 07:32:08.31
>>693
ググれば分かるだろ?サードパーティ製のUI部品だよ
06976772013/06/04(火) 09:06:11.47
>>678 >>681 以下のようなことをやりたいのです。
interface I{}
class B<T> : I{
 public B(T t){}
}
class A{
 I i;
 public A<T>(T t){ i = new B<T>(t); }
}

>>679 いただいたアドバイスを元に色々試していたら
static createメソッドという所に落ち着きました。
ありがとうございます。
class A{
 I i;
 A(I ii){ i = ii; }
 public static A Create<T>(T t){
  return new A(B<T>(t);
 }
}
0698デフォルトの名無しさん2013/06/04(火) 10:45:16.18
>>692
まあデリゲート変数だろうな
0699デフォルトの名無しさん2013/06/04(火) 10:47:46.31
>>692
ラムダ式って結局はコンパイラが展開してるんでしょ?

展開した形って表示できないのかね?
0700デフォルトの名無しさん2013/06/04(火) 15:22:22.59
>>697
要は動的にジェネリックを生成すればいいんだろ
Aのコンストラクタをobjectで受けてその型でBをインスタンス化する
public A(object t) { i = (I)Activator.CreateInstance(typeof(B<>).GetGenericTypeDefinition().MakeGenericType(t.GetType()), t); }
とかでどうだ?
0701デフォルトの名無しさん2013/06/04(火) 19:33:51.27
>>699
ILDASMでも使えばいいだろ
0702デフォルトの名無しさん2013/06/04(火) 19:46:15.23
>>695
デリゲートなら別にありうる変数名だと思う
0703デフォルトの名無しさん2013/06/05(水) 07:05:44.99
webbroeserコントロールでメッセージボックスが表示されたときにOKボタンを自動で押すにはどう書いたらいいですか?
0704デフォルトの名無しさん2013/06/05(水) 09:54:44.87
またロクでもないもの作ってるな?
0705デフォルトの名無しさん2013/06/05(水) 10:11:35.14
webbroeserコントロールの質問は禁止といっとろーが
0706デフォルトの名無しさん2013/06/05(水) 10:17:47.06
解決したからもういいです
0707デフォルトの名無しさん2013/06/05(水) 10:26:19.53
どういたしまして
0708デフォルトの名無しさん2013/06/05(水) 10:36:55.39
おまわりさんこの人です
0709デフォルトの名無しさん2013/06/05(水) 10:44:35.65
スレッドを開始してしばらくするとスレッドは終了するんですが
そういうスレッドは何もしなくてもそのうちメモリから解放されますか?
ちなみにスレッドは2ちゃんのスレッドのことじゃないです
0710デフォルトの名無しさん2013/06/05(水) 10:50:45.80
解放されます
0711デフォルトの名無しさん2013/06/05(水) 10:54:26.74
そうですか
それならいいんです
0712デフォルトの名無しさん2013/06/05(水) 10:58:25.99
じゃないの?
俺は、Exitedイベントで終了処理を書いてるけど
07136772013/06/05(水) 12:10:29.29
>>700
作られる型は静的に決定するので、動的に作る方法で
解決できるとは思いもよりませんでした。
勉強になります。
0714デフォルトの名無しさん2013/06/05(水) 19:22:36.64
>>700って.GetGenericTypeDefinition()いらなくね?
0715デフォルトの名無しさん2013/06/06(木) 09:36:02.42
public static void KakuchouMethod( ref this StructreFoo foo )
{
 ...
}

みたいなのがほしいよぉ
0716デフォルトの名無しさん2013/06/06(木) 15:49:30.99
>public A(object t) { i = (I)Activator.CreateInstance(typeof(B<>).GetGenericTypeDefinition().MakeGenericType(t.GetType()), t); }

むずかしすぎてわからん
解説して
0717デフォルトの名無しさん2013/06/06(木) 21:02:01.82
>>716
>要は動的にジェネリックを生成
0718デフォルトの名無しさん2013/06/06(木) 21:38:24.95
typeof(B<>)…B<>の型情報
.GetGenericTypeDefinition()…B<>→B<> ※無意味
.MakeGenericType(t.GetType())…B<>→B<tの型>

Activator.CreateInstance…new B<tの型>(t)
0719デフォルトの名無しさん2013/06/07(金) 12:17:37.65
Interface1を実装しているClass1があって、
Class1を継承しているClass2があって、
Interface1で宣言されているMethod1を
Class2でオーバーライドするには、
どのように書けばよいですか?

interface Interface1{
void Method1();
}
class Class1 : Interface1{
void Interface1.Method1(){}
}
class Class2 : Class1{
override void Method1(){} //???
}

インターフェースではなく抽象クラスなら
オーバーライドできましたが、
インターフェースは変更できないです。
0720デフォルトの名無しさん2013/06/07(金) 12:43:43.91
void Interface1.Method1(){} ←この意味が分らん。何をしたいの?

こうじゃないの?
class Class1 : Interface1
{
public virtual void Method1() { }
}
class Class2 : Class1
{
public override void Method1() { } //???
}
07217192013/06/07(金) 13:17:47.76
>void Interface1.Method1(){} ←この意味が分らん。何をしたいの?
Interface1のMethod1を明示的に実装する構文のようです。

>こうじゃないの?
教えていただいたとおりにすると、
Interface1.Method1経由で呼出したときに
Class2.Method1ではなくClass1.Method1が呼出されました。
0722デフォルトの名無しさん2013/06/07(金) 13:31:42.27
void Interface1.Method1() { } がprivateのせいだと思うから、こうするとか。

class Class1 : Interface1
{
void Interface1.Method1() { }
}
class Class2 : Class1,Interface1
{
void Interface1.Method1() { } //???
}
0723デフォルトの名無しさん2013/06/07(金) 13:48:58.96
この場合は隠蔽になるのかな
07247192013/06/07(金) 14:31:41.20
>>722
Interface1.Method1を呼ぶと
Class1.Method1が呼出されました。

基本クラスと同じインターフェースを実装しても
無視されてしまうようですね。

>void Interface1.Method1() { } がprivateのせいだと思うから、こうするとか。
これは明示的にインターフェースを指定するときの構文で
publicと付けられないし、自動的にpublicになるようです。
0725デフォルトの名無しさん2013/06/07(金) 15:09:44.71
正解はここに書いてあったわ。
インターフェイス メンバーの明示的な実装
http://msdn.microsoft.com/ja-jp/library/vstudio/ms229034(v=vs.100).aspx

>機能を派生クラスによって専門的に処理する場合は、
>明示的に実装されたメンバーと同じ機能を提供するプロテクト仮想メンバー関数を用意します。

>明示的に実装されたメンバーはオーバーライドできません。
> これらを派生クラスで再定義した場合、派生クラスでは基本クラス実装を呼び出すことができなくなります。
> プロテクト メンバーに名前を付けるには、明示的なインターフェイス メンバーと同じ名前を使用するか、
>またはインターフェイス メンバーの名前に Core を付け加える必要があります。


まずは明示的な実装が本当に必要かどうか再検討すべきだな。
0726デフォルトの名無しさん2013/06/07(金) 15:47:18.97
インターフェイスの再実装
http://msdn.microsoft.com/ja-jp/library/aa664594%28v=vs.71%29.aspx

ちょっと頭こんがらがってきました
0727デフォルトの名無しさん2013/06/07(金) 16:02:02.54
>>719
privateかpubicかじゃなくて、インターフェイスの明示的な実装ってのは
まさにインターフェイスを実装してるだけで、そのクラスのメソッドを定義してることにならない
つまり>>719ではClass1.Method1というメソッドは存在しない
存在しないんだからClass2でオーバーライドできない
0728デフォルトの名無しさん2013/06/07(金) 16:34:42.06
明示的なメソッドの宣言はpublicに出来ないんだからそういう事だよな
0729デフォルトの名無しさん2013/06/07(金) 17:21:18.70
>>728
>明示的なメソッドの宣言
インターフェイスの明示的な実装のことだよな?
publicにできないんじゃなくて、privateとしても存在してない
Class1の内部からでも(インターフェイスにキャストしない限り)Method1にはアクセスできないぞ

インターフェイス回りは基本的には暗黙的にpublicだ
0730デフォルトの名無しさん2013/06/07(金) 17:24:26.05
>>729
ああそうか
明示的な使い方をしないと見えないんだった
0731デフォルトの名無しさん2013/06/07(金) 19:04:56.29
>積極的な理由がない場合は、インターフェイス メンバーの明示的な実装を避けます。

結論 : MS様が使うなと言っている。
0732デフォルトの名無しさん2013/06/07(金) 19:33:58.23
>>719
C++ では普通に実装できるのにね http://codepad.org/rp8tiSBg
いったいどういうこと?
0733デフォルトの名無しさん2013/06/07(金) 19:37:50.64
インターフェイスならAdapterパターンでいいだろ
0734デフォルトの名無しさん2013/06/07(金) 19:40:38.30
>>732
それならC#も普通にできるよ。 >>720
0735デフォルトの名無しさん2013/06/07(金) 19:51:33.65
なんとも初歩的な話をしてるな
0736デフォルトの名無しさん2013/06/07(金) 19:53:49.30
>明示的な実装について理解するには、高度な専門知識が必要です。

結論 : MS様が馬鹿には無理と言ってるのだから初歩ではない。
0737デフォルトの名無しさん2013/06/07(金) 20:14:43.01ID:EFaRBvNc!
インターフェイス関係の仕様はVBの方が理論的に綺麗だな
0738デフォルトの名無しさん2013/06/07(金) 20:23:28.95
VB仕様はメンバー名を考えないといけないのが微妙
0739デフォルトの名無しさん2013/06/07(金) 20:26:45.05
>Public Property Name() As String Implements IHello.Name
普通は一緒でいいんだけどね
0740デフォルトの名無しさん2013/06/07(金) 20:34:53.21
変える必要がある場合の話に決まってるだろうが
0741デフォルトの名無しさん2013/06/07(金) 20:37:01.04
そのときはこう、あんまり考えんで
>Private Property IHello_Name() As String Implements IHello.Name
0742デフォルトの名無しさん2013/06/07(金) 20:50:16.37
結局 virtual が高給、ということですかね
0743デフォルトの名無しさん2013/06/08(土) 21:45:37.76
デザイナでBindingSourceはっつけて
自動生成されたコード見ると
Datasourceにtypeof(型)をいれてんだけど

あれって何やってんの?
0744デフォルトの名無しさん2013/06/08(土) 22:27:13.15
Bindingって複数の型突っ込めなかったっけ?
0745デフォルトの名無しさん2013/06/08(土) 22:47:01.01
バインド先のDataBindings.AddじゃなくてBindingSource

BindingSource.DataSource = typeof(デザイナで指定した型);

こんな感じ
0746デフォルトの名無しさん2013/06/08(土) 23:22:09.28
同じようなコードを手動で書いて
>BindingSource.DataSource = typeof(デザイナで指定した型);
の行のあるなしを試してみなよ
デザイナーは機械的にコードを差し込んだり抜いたりしてるから
確実に型を指定したりとか何か理由があってやってるだけじゃないの?
0747デフォルトの名無しさん2013/06/08(土) 23:30:10.23
コメントアウトしても特に影響は無いみたい
0748デフォルトの名無しさん2013/06/09(日) 00:52:46.64
普通に考えればDataSourceの型を特定してるんだろ
プロパティウィンドウでDataMemberとか指定したときのチェックとかに要るんじゃね
0749デフォルトの名無しさん2013/06/09(日) 00:55:05.93
ああ、それ以前に、デザイナで指定した値の保存に要るんじゃないか
0750デフォルトの名無しさん2013/06/09(日) 01:04:16.22
一時的にデザイナ用で入れてるだけっぽいね
すっきりした。ありがとう
0751デフォルトの名無しさん2013/06/09(日) 03:49:41.37
有料のVSは無料と比べて
エディタに違いありますか?
マクロとかアウトライン表示とか欲しいんですけど
■ このスレッドは過去ログ倉庫に格納されています