0

さて、私はインターフェースを持っています、それを呼び出しましょう

public interface bar {
     string Foo;
}

インターフェイスを実装するクラスもあります

public fooBar : bar {
   public string Foo {get; set;}
}

次に、次のように、さまざまな実装を含むインターフェイス「バー」のリストを含む別のオブジェクトにぶら下がっているプロパティがあります。

public list<bar> listOfBars;

今、式ツリー/関数をそのように使用すると

function(parentObj x) { x.listOfBars(0).Foo;}

式ツリーから memberinfo を取得できます。ただし、me​​mberinfo はインターフェイス メソッドを指しており、そのクラスはインターフェイスです。それはほとんど機能しますが、その親クラスが何であるかを知る必要があるため、memberinfo オブジェクトから、「bar」インターフェイスから離れたメソッドの呼び出しを見つけて確認する必要があり、クラス タイプは「fooBar」です。これを行う方法はありますか?ウォッチ ウィンドウで memberinfo オブジェクトを掘り下げましたが、親型に到達できません。私は何かが欠けているかもしれません。

4

1 に答える 1

0

いくつかの概念が混乱していると思います。インターフェイスを実装するとき、実際にはインターフェイスからクラスを派生させているわけではありません。あなたは実際にこれをやっています:

public class fooBar : object, Foo { }

クラスはオブジェクトから派生し、インターフェース Foo も実装します。クラスは 1 つのオブジェクト タイプからのみ派生できますが、複数のインターフェイスを実装できます。

もう 1 つの問題は、インターフェイスにフィールドを含めることができないことです。これを変更する必要があります:

public interface bar {string Foo;}

これに

public interface bar {string Foo {get;set;} }

ここで、これらの項目をすべて変更すると仮定すると、IS キーワードを調べることができます。次のようにして、クラスがインターフェイスを実装しているかどうかを確認できます。

object o = new object();
if(o is bar) {
  //do interface bar stuff here
}
于 2009-08-21T19:16:52.210 に答える