2011-07-13 13 views
1

C#でインターフェイスに動的メソッドを追加できますか?C#でインターフェイスに動的メソッドを追加できますか?

したがって、インターフェイスメソッドは存在しませんが、基になるクラスに存在し、インターフェイス経由で呼び出す必要があります。種類のインタフェース点を敗北

おかげ

+1

簡単な回答はありません。なぜあなたはそれをしたいのですか? – Chandu

+1

いいえ、インターフェイスメソッドが存在しない場合は、インターフェイスがそれをどのように呼び出すことができるので、これを行うことはできませんか?それは分かりません。あなたが行うことができる最も近いことは、インターフェイスメソッドを基になるクラスのオブジェクトにキャストすることですが、これを行うことによって多分多態性を失うことになります。あなたに何をしようとしているのか考え直すことです。 – Icemanind

答えて

3

。あなたがそれをいくつかのクラスに必要とし、他のクラスでは望んでいなければ、あなたはそれをそのように実装することができますが、それを最初に既知のクラスタイプにキャストする必要があります。

あなたは、あなたがそれについては本当にうるさいこと(とキャストするタイプを知って避ける)にしたい場合は呼び出したいメソッドを持っているあなたは、おそらく下の敷設クラスタイプにチェックするために、いくつかのリフレクションを使用することができ

0

作ってみましょうあなたのクラス間の「仲介者」の一種として、元のインタフェースと基礎となるインタフェース

public interface IFoo 
{ 
    string PropA { get; set; } 
} 

public interface IFooExtended 
{ 
    void MyMethod(); 
} 

public class ConcreteFoo : IFooExtended 
{ 
    // implementation... 
} 

それを実装する新しいインタフェースは、「ダイナミック」ではないのですが、これは役立つかもしれません。

0

いいえ - 同様の目的を達成するために、インターフェイスに拡張メソッドを追加することができます。

0

私はそれに従うべき正しい練習は、あなたが達成しようとしているものにできるだけ近いものが、古いものを継承する新しいインターフェイスを作成することだと思います。

ような何か:

interface IMyInterface : IExistingInterface 
{ 
    void MyCustomMethod(); 
} 

そして、あなたはあなたのコードであなたの新しいインターフェイスに対処します。それを実装しているクラスには、継承されたインタフェースのメソッドだけでなく、新しいメソッドもあります。

既存のインターフェイスを変更することはできません。これは、インターフェイス自体の目的を無効にします。

0

あなたが求めている場合は、動的インターフェース(Visual Basicでのように、例えば、強い型付けされたダックタイピング)、なしを使用したい場合は、C#がネイティブにこの機能をサポートしていません。しかし、Code Projectの記事Dynamic interfaces in any .NET languageをチェックすることができます。

関連する問題