<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C#関連のネタ</title><link>http://blogs.wankuma.com/diosan/category/1817.aspx</link><description>C#関連のネタ</description><managingEditor>Diosan</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Diosan</dc:creator><title>VS2008 SP1 いかんです。 時間かかりすぎ。</title><link>http://blogs.wankuma.com/diosan/archive/2008/08/12/152807.aspx</link><pubDate>Tue, 12 Aug 2008 18:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/diosan/archive/2008/08/12/152807.aspx</guid><wfw:comment>http://blogs.wankuma.com/diosan/comments/152807.aspx</wfw:comment><comments>http://blogs.wankuma.com/diosan/archive/2008/08/12/152807.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/diosan/comments/commentRss/152807.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/diosan/services/trackbacks/152807.aspx</trackback:ping><description>&lt;P&gt;いろいろな方がBlogで書かれていますがVS2008のSP1がリリースされましたね。&lt;BR&gt;私もMSから案内メールがきたので、早速ダウンロード。&lt;BR&gt;休み時間にでも、さくっとインストールしようかなと思ったのが運のつきでした。&lt;/P&gt;
&lt;P&gt;状況はこんな感じです。&lt;/P&gt;
&lt;P&gt;17:30 インストール開始&lt;BR&gt;&amp;nbsp; &amp;nbsp;→ SilverLightのベータがインストールされているから駄目とのことなので、アンインストール&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;あまり入れた記憶はないのですが、ベータ系が3つほど入っていました。 &lt;BR&gt;17:45 ようやくSilverlightのアンインストール完了&lt;BR&gt;&amp;nbsp; &amp;nbsp;→ SP1インストール開始&lt;BR&gt;18:00 休み時間終了&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;一向に終わる気配なし。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; キャンセルも時間かかるからもうちょっと我慢してみるか。&lt;BR&gt;18:46 現在&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;まだ、半分もいっていない模様。 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 強制的にVS2008を起動。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 起動はOK。が、IntelliSense効かず。コンパイルもできないという最悪の状態。 &lt;/P&gt;
&lt;P&gt;何故にこんなに時間が&amp;#8230;。 &lt;/P&gt;
&lt;P&gt;仕事にならないので、あきらめて帰宅 orz&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/diosan/aggbug/152807.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>diosan</dc:creator><title>インターフェースの実装と明示的な実装の違い(メモ)</title><link>http://blogs.wankuma.com/diosan/archive/2008/06/03/141210.aspx</link><pubDate>Tue, 03 Jun 2008 18:03:00 GMT</pubDate><guid>http://blogs.wankuma.com/diosan/archive/2008/06/03/141210.aspx</guid><wfw:comment>http://blogs.wankuma.com/diosan/comments/141210.aspx</wfw:comment><comments>http://blogs.wankuma.com/diosan/archive/2008/06/03/141210.aspx#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://blogs.wankuma.com/diosan/comments/commentRss/141210.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/diosan/services/trackbacks/141210.aspx</trackback:ping><description>&lt;P&gt;クラスにインターフェースの宣言を追加すると、VisualStudioのインテリセンスでは以下の2種類の実装方法が提示されます。&lt;BR&gt;① インターフェース'xxx'を実装します&lt;BR&gt;② インターフェース'xxx'を明示的に実装します&lt;/P&gt;
&lt;P&gt;一見同じに見えますが、実は違うんですよね。 私も最近までわからずに使っていました。&lt;BR&gt;なので、ちょっとメモ。 &lt;/P&gt;
&lt;P&gt;まずはインターフェースの宣言です。&lt;BR&gt;interface ITestable&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; void Test();&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;で、インターフェースの宣言をクラスに追加して、&lt;BR&gt;①の方を選択するとVSではこんな感じになりますね。&lt;BR&gt;class TestA : ITestable&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;#region IBarkable メンバ&lt;BR&gt;&amp;nbsp;&amp;nbsp;public void Test()&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Out.WriteLine("TestA");&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;#endregion&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;②を選ぶとこんな感じのソースになります。&lt;BR&gt;class TestB : ITestable&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;#region ITestable メンバ&lt;BR&gt;&amp;nbsp;&amp;nbsp;void ITestable.Test()&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Out.WriteLine("TestB");&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;#endregion&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;で、これらは使う時に差が出てきます。&lt;/P&gt;
&lt;P&gt;例1．&lt;BR&gt;&amp;nbsp;TestA t1 = new TestA();&lt;BR&gt;&amp;nbsp;t1.Test();&amp;nbsp;&amp;nbsp;// OK&lt;/P&gt;
&lt;P&gt;↑ これはOKです。&lt;/P&gt;
&lt;P&gt;例2.&lt;BR&gt;&amp;nbsp;TestB t2 = new TestB();&lt;BR&gt;&amp;nbsp;//t2.Test();&amp;nbsp;&amp;nbsp; &lt;FONT color=#ff0000&gt;// NG&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;↑ これはNGです。 明示的な実装ではインターフェースとして&lt;BR&gt;明示しないと動いてくれません。(コンパイルも通りません)&lt;BR&gt;なので、正解はこっちです。↓&lt;/P&gt;
&lt;P&gt;&amp;nbsp;ITestable t3 = t2 as TestB;&lt;BR&gt;&amp;nbsp;t3.Test();&amp;nbsp;&amp;nbsp;// OK&lt;/P&gt;
&lt;P&gt;奥が深いですね。&lt;/P&gt;
&lt;P&gt;どんな時に使い分けるかは...。&lt;BR&gt;うーん。 どなたか、良い例お願いします。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;[&lt;/STRONG&gt;&lt;A id=Comments.ascx_CommentList__ctl5_NameLink href="/carbonara/" target=_blank&gt;&lt;FONT color=#009933&gt;&lt;STRONG&gt;めたぼ なら&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;STRONG&gt;さんの情報を元に追加しました。2008/06/04 11:41]&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/ms229034.aspx"&gt;http://msdn.microsoft.com/ja-jp/library/ms229034.aspx&lt;/A&gt;より&lt;/P&gt;
&lt;P&gt;明示的な実装のガイドラインを見出しだけ引用&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;EM&gt;・ 積極的な理由がない場合は、インターフェイス メンバの明示的な実装を避けます。&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;・ インターフェイスを介してのみメンバを呼び出す場合は、インターフェイス メンバの明示的実装を検討します。&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;・ 分散をシミュレートする (つまり、オーバーライドされたメンバのパラメータや戻り値の型を変更する) 場合は、インターフェイス メンバの明示的な実装を検討します。&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;・ メンバを隠ぺいし、より適切な名前を持つ等価なメンバを追加する場合は、インターフェイス メンバの明示的な実装を検討します。&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;・ 明示的なメンバをセキュリティの境界として使用しないでください。&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;・ 機能を派生クラスによって専門的に処理する場合は、明示的に実装されたメンバと同じ機能を提供するプロテクト仮想メンバ関数を用意します。&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;基本的には明示的な実装はせず、必要な時にのみ検討するということですね。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/diosan/aggbug/141210.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>