3
明示的なインターフェイス実装を使用して、インターフェイス実装クラスのプロパティタイプを変更しようとしています。Explicit Interface Implementationを使用しています
interface ISample
{
object Value { get; set; }
}
class SampleA : ISample
{
SomeClass1 Value { get; set; }
object ISample.Value
{
get { return this.Value; }
set { this.Value = (SomeClass1)value; }
}
}
class SampleB : ISample
{
SomeClass2 Value { get; set; }
object ISample.Value
{
get { return this.Value; }
set { this.Value = (SomeClass2)value; }
}
}
class SomeClass1
{
string s1;
string s2;
}
しかし、私は関数の中で、インタフェースOBJに渡す必要があるとき、私はSomeClass1またはSomeClass2のオブジェクトにアクセス傾けます。例えばのために
:
public void MethodA(ISample sample)
{
string str = sample.Value.s1;//doesnt work.How can I access s1 using ISample??
}
これが理解できるかどうかは知りませんが、私はこれを説明する簡単な方法を得るように見える傾けます。インターフェイスISampleを使用してSomeClass1のプロパティにアクセスする方法はありますか?あなたがインターフェイスとしてオブジェクトを受け取ったので、それはクラスの新しいプロパティの型を知っていないためである
おかげ
'SomeClass1'は' ISample'の型ではなく、 'ISample'が' SampleA'の場合に最初に例外を投げます。 – ntziolis
次に制約を使用します。物事が公開されていると仮定すると、彼のコードは公開されていないことを示しています。 – payo
ntziolisの型チェックをいくつか追加しました。私は安全なルートを示していませんでした。オブジェクトをキャストする方法を示していました。明らかに、コードをより信頼できるものにするために、いくつかのデザインを追加する必要があります。 – payo