C#, C♯, C#相談室 Part52
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/04/01(水) 10:15:52前スレ
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:220952デフォルトの名無しさん
2009/06/15(月) 20:25:52EndInvoke以外に何かあるのかっていうか普通はEndInvoke必須なんだから
0953949
2009/06/15(月) 20:26:04namespace 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 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:35var sync = obj.BeginInvoke(関数);
try
{
sync.Result;
}
catch (InvokeException msg)
{
例外処理
}
こんな感じで受け止められます。
0956デフォルトの名無しさん
2009/06/15(月) 20:44:46try
{
var result = obj.EndInvoke(sync);
}
catch (??Exception ex)
{
例外処理
}
でダメな理由を教えてくれたまえ。
0957デフォルトの名無しさん
2009/06/15(月) 20:50:00ひどうきしょりになつてないよね
0958デフォルトの名無しさん
2009/06/15(月) 20:53:510959デフォルトの名無しさん
2009/06/15(月) 20:59:230960デフォルトの名無しさん
2009/06/15(月) 21:00:27??ってどういう意味?はじめてみる
0961デフォルトの名無しさん
2009/06/15(月) 21:02:340962949
2009/06/15(月) 21:07:46ああ、言われてみれば例外受け止めるだけならそれだけで十分ですね
こちらは、スレッドを立てるのと同時にスレッド間の通信経路を確保する必要があって、実際はもっと大規模な物になっています。
便利になってしまったので、こればっかり使っていたので……
0963デフォルトの名無しさん
2009/06/15(月) 21:13:15??演算子ってマイナーだよな。::演算子の次くらいに
0964デフォルトの名無しさん
2009/06/15(月) 21:15:430965デフォルトの名無しさん
2009/06/15(月) 21:16:12ここは??が使えると頭にすぐ浮かぶかどうか
0966デフォルトの名無しさん
2009/06/15(月) 21:16:470967デフォルトの名無しさん
2009/06/15(月) 21:24:480968デフォルトの名無しさん
2009/06/15(月) 21:26:330969デフォルトの名無しさん
2009/06/15(月) 21:26:49わざわざ演算子追加するほどのことなのかなあ
名前空間エイリアスよりも型名エイリアスの方が遥かに衝突しやすくて問題だろ
0970デフォルトの名無しさん
2009/06/15(月) 21:29:26自信をもって名前空間の文法作ったら抜けがあったというオチでC++っぽく解決されたものかと。ちょっとカッコワルイ
0971デフォルトの名無しさん
2009/06/15(月) 21:31:490972デフォルトの名無しさん
2009/06/15(月) 21:35:44あえて言えば、結果(=戻り値+例外)と、同期処理の分離が悪いという所かね。
例外が結果ではなく、同期側にくっついている上、使用者からみて直接必要とは思えない呼び出し先のオブジェクトが要求されている。
ライブラリの設計が悪いと言えるかもしれない。
0973デフォルトの名無しさん
2009/06/15(月) 21:41:240974デフォルトの名無しさん
2009/06/15(月) 21:45:150975デフォルトの名無しさん
2009/06/15(月) 22:18:22同じ名前の型や名前空間が他にあったとしても名前空間や型名のエイリアスが
常に優先されるから問題にならなくね?
DLLに名前空間エイリアスを付ける場合は変更が利かないから::使うようにしないとまずいだろうけど
それ以外で問題になるケースってある?
0976デフォルトの名無しさん
2009/06/15(月) 22:28:05http://msdn.microsoft.com/ja-jp/library/c3ay4x3d.aspx
0977デフォルトの名無しさん
2009/06/15(月) 22:34:54ジェネレータが global:: よく使ってるね。
まぁ常識的にそんなかぶらない気もするけど、かぶ
ればこれがなければどうしようもないのは確かかも
なぁ
0978デフォルトの名無しさん
2009/06/15(月) 22:35:510979デフォルトの名無しさん
2009/06/15(月) 22:35:550980デフォルトの名無しさん
2009/06/15(月) 22:51:38public partial class Hoge:HogeHoge
って宣言が8カ所にあったんだが、お舞ら的にどうよ(´・ω・`)
俺的にはありえなかった。
0981デフォルトの名無しさん
2009/06/15(月) 22:55:54きっと何かのツールで自動生成してるんだよ。
それか、拡張メソッド定義用のクラスは結構ばらばらに書いたりするけど。
0982デフォルトの名無しさん
2009/06/15(月) 22:56:320983デフォルトの名無しさん
2009/06/15(月) 22:58:010984デフォルトの名無しさん
2009/06/15(月) 22:59:59気がするからまぁいいんじゃないかって思うがアクセス修飾子と
継承元は一箇所でいいんじゃないかな
0985デフォルトの名無しさん
2009/06/15(月) 23:10:210986デフォルトの名無しさん
2009/06/15(月) 23:12:22パーシャル連発することはあるわ
なんかまずい?
0987デフォルトの名無しさん
2009/06/15(月) 23:12:440988デフォルトの名無しさん
2009/06/15(月) 23:32:490989デフォルトの名無しさん
2009/06/15(月) 23:36:000990デフォルトの名無しさん
2009/06/15(月) 23:36:20ネストするのは他に公開しないため
0991デフォルトの名無しさん
2009/06/15(月) 23:37:070992デフォルトの名無しさん
2009/06/15(月) 23:37:52あと外側クラスの private メンバを見れる
0993デフォルトの名無しさん
2009/06/16(火) 00:07:58後者のメリットが大きいね。
C++ でいう、friend 的な関係のものに使用できる。
0994デフォルトの名無しさん
2009/06/16(火) 01:11:540995デフォルトの名無しさん
2009/06/16(火) 13:43:25そういるルールだからです。
「ぬーやる」バーガーはしってますか?
0996デフォルトの名無しさん
2009/06/16(火) 18:51:30現場であまり使う機会がないですがみなさんどうですか
0997デフォルトの名無しさん
2009/06/16(火) 19:02:22使い方複数あるし
どっちかincludeにした方がいいね
0998デフォルトの名無しさん
2009/06/16(火) 19:07:13使い方が複数あるのなんか他のキーワードにもある
0999デフォルトの名無しさん
2009/06/16(火) 19:07:201000デフォルトの名無しさん
2009/06/16(火) 20:04:20というわけで1000。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。