こんにちは、Diosanです

何を話そうかな?

目次

ニュース

aaaa

日記カテゴリ

書庫

Blog 利用状況

MyPage

インターフェースの実装と明示的な実装の違い(メモ)

クラスにインターフェースの宣言を追加すると、VisualStudioのインテリセンスでは以下の2種類の実装方法が提示されます。
① インターフェース'xxx'を実装します
② インターフェース'xxx'を明示的に実装します

一見同じに見えますが、実は違うんですよね。 私も最近までわからずに使っていました。
なので、ちょっとメモ。

まずはインターフェースの宣言です。
interface ITestable
{
  void Test();
}

で、インターフェースの宣言をクラスに追加して、
①の方を選択するとVSではこんな感じになりますね。
class TestA : ITestable
{
  #region IBarkable メンバ
  public void Test()
  {
    Console.Out.WriteLine("TestA");
  }
  #endregion
 }

②を選ぶとこんな感じのソースになります。
class TestB : ITestable
{
  #region ITestable メンバ
  void ITestable.Test()
  {
    Console.Out.WriteLine("TestB");
  }
  #endregion
 }

で、これらは使う時に差が出てきます。

例1.
 TestA t1 = new TestA();
 t1.Test();  // OK

↑ これはOKです。

例2.
 TestB t2 = new TestB();
 //t2.Test();   // NG

↑ これはNGです。 明示的な実装ではインターフェースとして
明示しないと動いてくれません。(コンパイルも通りません)
なので、正解はこっちです。↓

 ITestable t3 = t2 as TestB;
 t3.Test();  // OK

奥が深いですね。

どんな時に使い分けるかは...。
うーん。 どなたか、良い例お願いします。

 

[めたぼ ならさんの情報を元に追加しました。2008/06/04 11:41]

http://msdn.microsoft.com/ja-jp/library/ms229034.aspxより

明示的な実装のガイドラインを見出しだけ引用

・ 積極的な理由がない場合は、インターフェイス メンバの明示的な実装を避けます。

・ インターフェイスを介してのみメンバを呼び出す場合は、インターフェイス メンバの明示的実装を検討します。

・ 分散をシミュレートする (つまり、オーバーライドされたメンバのパラメータや戻り値の型を変更する) 場合は、インターフェイス メンバの明示的な実装を検討します。

・ メンバを隠ぺいし、より適切な名前を持つ等価なメンバを追加する場合は、インターフェイス メンバの明示的な実装を検討します。

・ 明示的なメンバをセキュリティの境界として使用しないでください。

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

基本的には明示的な実装はせず、必要な時にのみ検討するということですね。

投稿日時 : 2008年6月3日 18:03

Feedback

# re: インターフェースの実装と明示的な実装の違い(メモ) 2008/06/03 18:14 めたぼ なら

へぇ~~~。
勉強になりました。


> どんな時に使い分けるかは...。
よーわかりません。
ポリモフィズム専用ってことなんかな?

# re: インターフェースの実装と明示的な実装の違い(メモ) 2008/06/03 18:51 シャノン

1:1つのクラスが、同名同引数のメソッドを持つ複数のインターフェイスを実装し、かつ、それぞれのメソッドを呼び分けたい場合。
2:インターフェイスメソッドの意味が、クラスに対して不自然な場合。

とか。

# re: インターフェースの実装と明示的な実装の違い(メモ) 2008/06/03 20:35 中博俊

よくあるのはDisposeを隠蔽しているパターンです。

# re: インターフェースの実装と明示的な実装の違い(メモ) 2008/06/03 21:45 NAL-6295

明治的ではなく明示的な実装はライブラリ側でだけ利用したい時に、利用者に対する隠蔽を目的に利用しています。

# re: インターフェースの実装と明示的な実装の違い(メモ) 2008/06/04 0:35 Streetw☆

「C# Language Specification 1.2.doc」の
「13.4.1 インターフェイス メンバの明示的実装」に
中さんが書かれたことの具体例とか、
明示的な実装の目的とか書いてました。

# re: インターフェースの実装と明示的な実装の違い(メモ) 2008/06/04 9:59 めたぼ なら

ほんまや。
http://msdn.microsoft.com/ja-jp/library/aa664591.aspx


デザインのガイドラインにも見っけ。
http://msdn.microsoft.com/ja-jp/library/ms229034.aspx

勉強になりました。
<(_ _)>

Streetw☆さんもありがとう。
(^o^)/

# re: インターフェースの実装と明示的な実装の違い(メモ) 2008/06/04 11:33 diosan

C# Language Specification 1.2.docはVisualStudioを入れると
Program Files\Microsoft Visual Studio 8\VC#\Specifications\1041
の下にインストールされているんですね。
知りませんでした。

ガイドライン良いですね。勉強になりました。
元ネタの方にまとめて置きます。

# re: インターフェースの実装と明示的な実装の違い(メモ) 2008/06/04 13:19 Streetw☆

へぇ~~
ガイドラインにも書いてるって知りませんでした~
明示的な実装はなんとなく避けてきたけど、
ズバリと書いてあるからスッキリしましたw
私も勉強になりました。

# thanks for the postmishertAtroro 2010/11/08 20:46 physical therapist

Wow this is a great resource.. I’m enjoying it.. good article

# re: 無意味なコメント(前回ソースゴミのエントリーの延長線) 2017/07/24 11:49 zzzzz

http://www.nbajerseys.us.org/
http://www.pandorajewelryoutlets.in.net/
http://www.uggboots-forwomen.in.net/
http://www.nikeshoes2017.us.com/
http://www.michaelkors-handbags.org.uk/
http://www.nikeshoesoutlet.us.org/
http://indianapoliscolts.jerseyscheap.us.com/
http://www.louisvuitton-sacpascher.fr/
http://www.dolceandgabbana.in.net/
http://www.cheapray-banssunglasses.us.com/
http://chicagobears.jerseyscheap.us.com/
http://www.coachoutlet-storeonline.com.co/
http://www.fitflopssale-clearances.us.com/
http://www.uggsforwomen.eu.com/
http://www.kate-spadehandbags.us.com/
http://www.true-religionoutlets.us.com/
http://www.eccoshoesoutlet.us/
http://www.nikehuarache2017.in.net/
http://www.montblancpensoutlet.com.co/
http://www.nikestores.org.uk/
http://www.chaussurelouboutinpas-cher.fr/
http://atlantafalcons.jerseyscheap.us.com/
http://www.christianlouboutinoutlets.us/
http://www.nhljerseyswholesaler.us.com/
http://www.fitflopsclearancesale.us.com/
http://www.polo-outlets.us.com/
http://newenglandpatriots.jerseyscheap.us.com/
http://www.nikeoutlet-stores.us.com/
http://www.nikeblazerlow.fr/
http://www.nikefactorystore.us.com/
http://www.prada-shoes.us.com/
http://www.replicawatchesforsale.us.com/
http://www.redvalentino.in.net/
http://www.ugg-slippers.de.com/
http://www.uggs-forwomen.de.com/
http://www.conversetrainer.org.uk/
http://www.uggs-onsale.eu.com/
http://sanfrancisco49ers.jerseyscheap.us.com/
http://www.cheapjordanshoes.in.net/
http://neworleanssaints.jerseyscheap.us.com/
http://www.truereligionjeansoutletonline.us.com/
http://www.ugg-slippers.eu.com/
http://www.michaelkors-handbagswholesale.in.net/
http://www.new-balanceshoes.in.net/
http://www.michaelkorshandbagswholesale.in.net/
http://www.ralph-laurenoutlets.us.com/
http://miamidolphins.jerseyscheap.us.com/
http://www.coachoutletstore-online.eu.com/
http://www.raybanssunglasses.net.co/
http://www.oakleysunglassesoutlete.us.com/

# re: [Tips][Visual Studio]Visual Studio 2008で、ソースコードの行数をカウントする方法 2017/09/29 10:02 chenlina

http://www.polo-ralphlaurenoutlet.in.net
http://www.nfljerseysfromchina.us.com
http://www.cheapralphlaurensale.co.uk
http://www.toryburchoutletoff.us.com
http://www.uggoutletsonline.us.com
http://www.uggsoutletstore.org
http://www.poloshirt.in.net
http://www.uggsonline.in.net
http://www.truereligion-jeans.us
http://www.uggbootsclearanceoutlet.com.co
http://www.air-jordanpascher.fr
http://www.katespadehandbagsoutlet.us.org
http://www.uggbootsaustralia.us.org
http://www.jordanretro.us
http://www.blackhawksjersey.com
http://www.mlbjerseys.org
http://www.michael-kors-outlet.eu.com
http://www.timberlandoutlet.name
http://oakley.sunglassescheap.us.com
http://www.cheaplouboutinshoesuk.org.uk
http://www.north-face-outlet.in.net
http://www.cheapairjordans.us.com
http://www.cheapjerseysnflwholesale.us
http://www.adidastore.co.uk
http://www.burberry.us.org
http://www.nikeairforce1.net
http://www.ugg-bootscheap.com.co
http://www.uggbootsoutlets.org
http://www.pandora-rings.net
http://www.michaelkorsukoutlet.me.uk
http://www.uggsslippers.com.co
http://www.coach-factoryoutletusa.com
http://www.outletuggboots.com.co
http://www.adidastrainersuk.uk
http://www.raybans-sunglassesoutlet.us.com
http://www.the-northfaceoutlet.net.co
http://www.coachfactory-outletonline.org
http://www.oakleysungalsses.nom.co
http://www.cheap-ugg-boots.us.org
http://www.christianlouboutinoutletusa.us.com
http://www.christianlouboutindown.com
http://www.northfaceclearance.us.com
http://www.burberryscarfsale.in.net
http://www.nikerunningshoes.co.uk
http://www.canadagoosecanada.name
http://www.ray-banaviatorsunglasses.org.uk
http://www.katespade-outlet.in.net
http://www.nike-air-huarache.org.uk
http://www.outletlongchamp.us.org
http://www.uggoutletstore.net.co
http://www.jordanshoes.us.org
http://www.giuseppe-zanotti.us.com
http://www.uggoutlets.com.co
http://www.montblanc-pens.name
http://www.ferragamoshoesoutlet.us.com
http://www.thenorthface-outlet.in.net
http://www.longchamp-handbags.us.org
http://www.uggs-outlet-online.us
http://www.uggbootsonsale75off.in.net
http://www.replica-watches.us.com
http://www.pradaoutletonlinestore.us.com
http://www.montblanc.com.co
http://www.uggboots70off.com.co
http://www.cheapraybansunglasses.net.co
http://www.basketballshoesstore.us.com
http://www.uggbootscheaponline.in.net
http://www.saleuggboots.co.uk
http://www.adidasyeezy-boost.us.com
http://www.adidasshoesforsale.in.net
http://www.nikefootballbootsuk.org.uk
http://www.pandora-jewelry.me.uk
http://www.coachwallets.us.com
http://www.coachfactoryoutlet-onlinestore.us.com
http://www.michaelkorstotehandbags.us.com
http://www.uggbootsoutlets.in.net
http://www.thenorthfaceclearance.us.com
http://www.outletuggs.net.co
http://www.hermesbags.me.uk
http://www.michael--kors.us.org
http://www.canadagooseclearance.us.com
chenlina20170929

# re: インターフェースの実装と明示的な実装の違い(メモ) 2017/11/28 12:04 cc

http://www.reebokoutlet.us.org
http://www.adidasnmds.com
http://www.kyrie3.us.com
http://www.fitflops-saleclearance.us.com
http://www.adidassuperstar.us.com
http://www.boostyeezy.us.com
http://www.yeezyboost350v2.org.uk
http://www.goldengoose-outlet.us.com
http://www.rosherun.us.com
http://www.adidasnmdrunner.us.com
http://www.hermes-birkin.us.com
http://www.outlettimberland.us.org
http://www.balenciagashoes.us.com
http://www.stephencurry-shoes.us.com
http://www.nikerosheone.co.uk
http://www.nikemercurial.us.com
http://www.tomford-sunglasses.us.com
http://www.adidasstansmith.us.com
http://www.nikeairmax2018.us.com
http://www.nikezoom.us.com
http://www.toryburchshoes.org.uk
http://www.michaelkors-outletsonline.us.com
http://www.toryburchshoes.us
http://www.hermes-belt.co.uk
http://www.longchamps.org.uk

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2018/01/04 14:04 chenlina

http://www.michaelkorsinc.us.com
http://www.adidaswings.name
http://www.outletcanadagoosesale.us.com
http://www.louboutin.uk
http://www.timberland.us.org
http://www.ferragamooutlet.us.com
http://www.nikeairmax.me.uk
http://www.swarovski-jewelry.us
http://www.ralphlaurencom.us.com
http://www.pradabags.in.net
http://www.christian--louboutin.us
http://www.cheapreplicawatches.us.com
http://www.rayban.in.net
http://www.thenorthfaceoutlet.ca
http://www.oakleysunglassescom.us.com
http://www.uggbootssaleoutlet.us.com
http://www.michaelkorsoutlet.us
http://www.pandoracharmjewelry.us.com
http://www.montblanc.com.co
http://www.thenorthfaceuk.co.uk
http://www.truereligionsale.com.co
http://www.doudounecanadagooseenfant.fr
http://www.michaelkorsoutlet70off.us.com
http://www.ugg.com.co
http://www.michaelkorsonline-outlet.us.com
http://www.raybansunglassesoutlet.net.co
http://www.timberlandoutlet.us.org
http://www.converseshoesoutlet.us.com
http://www.ralphlauren-poloshirts.co.uk
http://www.uggcanadaoutlet.ca
http://www.toryburchoutletoff.us.com
http://www.uggoutletinc.us.com
http://www.truereligionoutletjeans.us
http://www.ralphlaurenoutletofficial.us.com
http://www.truereligion-jeans.us
http://www.wholesaleoakleysunglasses.us.org
http://www.fitflops.org
http://www.soccerjersey.us.com
http://www.pandorajewelrycanada.ca
http://www.coachhandbagsfactoryoutletonline.us.com
http://www.outletcanadagoose.ca
http://www.vibram-fivefingers.us.com
http://www.ralphlauren.in.net
http://www.ugg-bootsonline.us.com
http://www.canadagoosecom.us.com
http://www.adidasyeezy-boost.us.com
http://www.uggsclassicboots.us.com
http://www.newcoachoutlet.us.com
http://www.montblancpensonline.us.com
http://www.airjordanretro.fr
http://www.michael-korstaschen.ch
http://www.pradaoutletonlinestore.us.com
http://www.beatsheadphones.us.com
http://www.michaeljordan-shoes.com
http://www.discountnike.us.com
chenlina20180104

タイトル  
名前  
Url
コメント