2011-01-12 13 views
1

私は、次のような状況があります。親クラスのメンバーを使用してC#でインターフェイスを満たすにはどうすればよいですか?

public interface IStuffer 
{ 
    public string Foo { get; } 
} 

public class BaseClass 
{ 
    public static string Foo { get { ... } } 
} 

public class MyClass : BaseClass, IStuffer 
{ 
} 

MyClassのはFooのメンバを必要とするので、これはビルドされません。 FooのMyClassの要件を満たすためにBaseClassのFoo実装を使用するにはどうすればよいですか?

答えて

11

これは、FooがBaseClassの静的メンバーであるためです。静的キーワードを取り除くだけ!

public class BaseClass 
{ 
    public string Foo { get { ... } } 
} 

編集:あなたは本当にそれが静的滞在したい場合は、明示的な実装

public class MyClass : BaseClass, IStuffer 
{ 
    string IStuffer.Foo { get { return BaseClass.Foo; } } 
} 
+0

また、そうでない場合は、静的なFooは、要件を満たすために。 –

+4

+1通常、静的メンバーはインターフェイスを満たすことができません。 – KeithS

+0

ありがとうございます。 2番目の例は、私が探していたものです。 MyClassのFooのアクセシビリティは何ですか? – mmcdole

1

問題は、あなたのインターフェースが非静的「の文字列foo」を期待していることであるを使用することができそうで、あなたがBaseClassのにFooの非静的を作る場合

0

インタフェースをサポートすることはできません、それはあなたのインターフェイス:)

幸運を満足させます静的なプロパティまたはメソッド。インターフェイスを使用している場合、そのインターフェイスのすべてのメソッドはクラススコープではなくインスタンスでなければなりません。

0
二つの方法で

:何か他のものへ

1.名前の変更はFooと、このようなメソッドはFooを追加します。

public class BaseClass 
{ 
public static string FormerlyCalledFoo { get { ... } } 
public string Foo { get { ... } } 
} 

2.あなたは絶対に、静的はFooプロパティを持っていなければならない場合次のように明示的なインターフェイス実装としてIStufferインターフェイスを実装できます。

public class BaseClass : IStuffer 
{ 
public static string Foo { get { ... } } 
string IStuffer.Foo { get { ... } } 
} 

後者のメソッドを使用する場合は、IStuffer.FooプロパティにアクセスするためにBaseClassのインスタンスをIStufferにキャストする必要があることに注意する必要があります。

関連する問題