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

C#, C♯, C#相談室 Part52

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2009/04/01(水) 10:15:52
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part51
http://pc12.2ch.net/test/read.cgi/tech/1233757615/

Visual C# 2008 Express Edition 日本語版
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい
0951デフォルトの名無しさん2009/06/15(月) 19:41:22
キーの位置からしてタイプミスじゃないな
0952デフォルトの名無しさん2009/06/15(月) 20:25:52
>>942
EndInvoke以外に何かあるのかっていうか普通はEndInvoke必須なんだから
0953949 2009/06/15(月) 20:26:04
ずいぶん古くなっていて今風の構文で見直ししたので、良かったら使ってみてください。
namespace InvokeExtensions
{
 using System.ComponentModel;
 using System.Threading;

 [global::System.Serializable]
 public class InvokeException : Exception
 {
  public InvokeException() { }
  public InvokeException(string message) : base(message) { }
  public InvokeException(string message, Exception inner) : base(message, inner) { }
  protected InvokeException(
   System.Runtime.Serialization.SerializationInfo info,
   System.Runtime.Serialization.StreamingContext context)
   : base(info, context) { }
 }

 public interface IAsyncResult<TResult> : IAsyncResult
 {
  TResult Result { get; }
  void ThrowException();
 }

0954949 2009/06/15(月) 20:28:25
public static class InvokeExtensions
{
// 同様に複数引数版も用意
public static IAsyncResult<object> BeginInvoke(this ISynchronizeInvoke o, Action a)
{
return BeginInvoke<object>(o, () => { a(); return null; });
}
public static IAsyncResult<TResult> BeginInvoke<T1, TResult>(this ISynchronizeInvoke o, Func<T1, TResult> f, T1 a1)
{
return BeginInvoke<TResult>(o, () => f(a1));
}
public static IAsyncResult<TResult> BeginInvoke<TResult>(this ISynchronizeInvoke o, Func<TResult> f)
{
var r = new ResultClass<TResult>() { o = o };
r.s = o.BeginInvoke(new ThreadStart(() => { try { r.r = f(); } catch (Exception e) { r.e = e; } }), null);
return r;
}
class ResultClass<TResult> : IAsyncResult<TResult>
{
public ISynchronizeInvoke o;
public IAsyncResult s;
public Exception e;
public TResult r;
public TResult Result { get { o.EndInvoke(s); ThrowException(); return r; } }
public void ThrowException() { if (e != null) throw new InvokeException("Invokeデリゲート内例外", e); }
public object AsyncState { get { return r; } }
public WaitHandle AsyncWaitHandle { get { return s.AsyncWaitHandle; } }
public bool CompletedSynchronously { get { return s.CompletedSynchronously; } }
public bool IsCompleted { get { return s.IsCompleted; } }
}
}
}
0955949 2009/06/15(月) 20:30:35
あらら、インデント潰れた。
var sync = obj.BeginInvoke(関数);
try
{
 sync.Result;
}
catch (InvokeException msg)
{
 例外処理
}
こんな感じで受け止められます。
0956デフォルトの名無しさん2009/06/15(月) 20:44:46
var sync = obj.BeginInvoke(引数, null, null);
try
{
 var result = obj.EndInvoke(sync);
}
catch (??Exception ex)
{
 例外処理
}
でダメな理由を教えてくれたまえ。
0957デフォルトの名無しさん2009/06/15(月) 20:50:00
>>956
ひどうきしょりになつてないよね
0958デフォルトの名無しさん2009/06/15(月) 20:53:51
そりゃ>>955の書き方に合わせたからなだけ
0959デフォルトの名無しさん2009/06/15(月) 20:59:23
こうして四角い車輪が発明されていくわけか
0960デフォルトの名無しさん2009/06/15(月) 21:00:27
catch (??Exception ex)

??ってどういう意味?はじめてみる
0961デフォルトの名無しさん2009/06/15(月) 21:02:34
??は分からないけど?は分かるということだな!
0962949 2009/06/15(月) 21:07:46
>>956
ああ、言われてみれば例外受け止めるだけならそれだけで十分ですね
こちらは、スレッドを立てるのと同時にスレッド間の通信経路を確保する必要があって、実際はもっと大規模な物になっています。
便利になってしまったので、こればっかり使っていたので……
0963デフォルトの名無しさん2009/06/15(月) 21:13:15
>>956とは関係ないけど
??演算子ってマイナーだよな。::演算子の次くらいに
0964デフォルトの名無しさん2009/06/15(月) 21:15:43
それほどでもない
0965デフォルトの名無しさん2009/06/15(月) 21:16:12
意外に便利だよ
ここは??が使えると頭にすぐ浮かぶかどうか
0966デフォルトの名無しさん2009/06/15(月) 21:16:47
謙虚な演算子
0967デフォルトの名無しさん2009/06/15(月) 21:24:48
はじめて ?? の存在を知ったよ・・・
0968デフォルトの名無しさん2009/06/15(月) 21:26:33
nullableの登場の時新設されたんだっけな、自分は相変わらず ? : でやっている
0969デフォルトの名無しさん2009/06/15(月) 21:26:49
::のニッチさは異常
わざわざ演算子追加するほどのことなのかなあ
名前空間エイリアスよりも型名エイリアスの方が遥かに衝突しやすくて問題だろ
0970デフォルトの名無しさん2009/06/15(月) 21:29:26
>>969
自信をもって名前空間の文法作ったら抜けがあったというオチでC++っぽく解決されたものかと。ちょっとカッコワルイ
0971デフォルトの名無しさん2009/06/15(月) 21:31:49
あーでもextern aliasと衝突したら::以外に回避する手段がないな
0972デフォルトの名無しさん2009/06/15(月) 21:35:44
>>956
あえて言えば、結果(=戻り値+例外)と、同期処理の分離が悪いという所かね。
例外が結果ではなく、同期側にくっついている上、使用者からみて直接必要とは思えない呼び出し先のオブジェクトが要求されている。
ライブラリの設計が悪いと言えるかもしれない。
0973デフォルトの名無しさん2009/06/15(月) 21:41:24
別のクラスにまとめてOnExceptionみたいなイベントで渡すのが適切な気がする
0974デフォルトの名無しさん2009/06/15(月) 21:45:15
呼び出し式のイベントはスレッドが絡むとデッドロックの問題が凶悪な状態になるので、いったん何処かにプールしておくのは正しいと思うよ。
0975デフォルトの名無しさん2009/06/15(月) 22:18:22
わからなくなってきた
同じ名前の型や名前空間が他にあったとしても名前空間や型名のエイリアスが
常に優先されるから問題にならなくね?
DLLに名前空間エイリアスを付ける場合は変更が利かないから::使うようにしないとまずいだろうけど
それ以外で問題になるケースってある?
0976デフォルトの名無しさん2009/06/15(月) 22:28:05
方法 : 名前空間エイリアス修飾子を使用する (C# プログラミング ガイド) - MSDN
http://msdn.microsoft.com/ja-jp/library/c3ay4x3d.aspx
0977デフォルトの名無しさん2009/06/15(月) 22:34:54
見たことあるのは自動生成コードかな。resx コード
ジェネレータが global:: よく使ってるね。

まぁ常識的にそんなかぶらない気もするけど、かぶ
ればこれがなければどうしようもないのは確かかも
なぁ
0978デフォルトの名無しさん2009/06/15(月) 22:35:51
>>918ヨロシクお願いします
0979デフォルトの名無しさん2009/06/15(月) 22:35:55
じゃ単に互換性上の理由で識別子としてのglobalとキーワードとしてのglobalを区別するのが目的ってことか?
0980デフォルトの名無しさん2009/06/15(月) 22:51:38
同僚のソース見たら
public partial class Hoge:HogeHoge
って宣言が8カ所にあったんだが、お舞ら的にどうよ(´・ω・`)
俺的にはありえなかった。
0981デフォルトの名無しさん2009/06/15(月) 22:55:54
>>980
きっと何かのツールで自動生成してるんだよ。

それか、拡張メソッド定義用のクラスは結構ばらばらに書いたりするけど。
0982デフォルトの名無しさん2009/06/15(月) 22:56:32
巨大な独自コントロールとか作ってたら十分ありえるね
0983デフォルトの名無しさん2009/06/15(月) 22:58:01
拡張メソッド定義用のクラス()笑
0984デフォルトの名無しさん2009/06/15(月) 22:59:59
partial class で鬼分け自体は元 DLR かなんかですごいことしてた
気がするからまぁいいんじゃないかって思うがアクセス修飾子と
継承元は一箇所でいいんじゃないかな
0985デフォルトの名無しさん2009/06/15(月) 23:10:21
ソースファイル分割しようとしてる分だけマシなんじゃないか?
0986デフォルトの名無しさん2009/06/15(月) 23:12:22
あー俺ネストクラスを別ソースファイルにしたいがために
パーシャル連発することはあるわ
なんかまずい?
0987デフォルトの名無しさん2009/06/15(月) 23:12:44
それは俺もする
0988デフォルトの名無しさん2009/06/15(月) 23:32:49
C#でクラスをネストするメリットってなんぞ?
0989デフォルトの名無しさん2009/06/15(月) 23:36:00
中でしか使わないなら隠したい
0990デフォルトの名無しさん2009/06/15(月) 23:36:20
あるクラス内部でしか使わないようなクラスをネストして定義する事はある
ネストするのは他に公開しないため
0991デフォルトの名無しさん2009/06/15(月) 23:37:07
アクセス制限以外に何がある
0992デフォルトの名無しさん2009/06/15(月) 23:37:52
外に見せたくない namespace直下だとinternalが限界だからな
あと外側クラスの private メンバを見れる
0993デフォルトの名無しさん2009/06/16(火) 00:07:58
>>992
後者のメリットが大きいね。
C++ でいう、friend 的な関係のものに使用できる。
0994デフォルトの名無しさん2009/06/16(火) 01:11:54
インテリセンスで効率よく名前を探すためかな、ネストクラスは
0995デフォルトの名無しさん2009/06/16(火) 13:43:25
>>993
そういるルールだからです。
「ぬーやる」バーガーはしってますか?
0996デフォルトの名無しさん2009/06/16(火) 18:51:30
みなさんはデリゲートばりばりですか
現場であまり使う機会がないですがみなさんどうですか
0997デフォルトの名無しさん2009/06/16(火) 19:02:22
using っておかしくね?
使い方複数あるし

どっちかincludeにした方がいいね
0998デフォルトの名無しさん2009/06/16(火) 19:07:13
別にincludeしてるわけじゃねーし
使い方が複数あるのなんか他のキーワードにもある
0999デフォルトの名無しさん2009/06/16(火) 19:07:20
includeは違う。
1000デフォルトの名無しさん2009/06/16(火) 20:04:20
なんでこんなところまでブロント語が波及してるんだ。。。


というわけで1000。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。