2012-01-18 17 views
5

私はツールによって生成された部分クラスを持っています。派生クラスまたは部分クラスを使用してインターフェイスを実装する方法は?

Foo.cs

public partial class Foo { 
    [SomeAttribute()] 
    public string Bar {get;set;} 
} 

私はFoo.csに触れることなくFooため、以下のインタフェースを実装する必要があります。

IFoo.cs

Fooさを拡張
public interface IFoo { 
    string Bar {get;set;} 
} 

オプションもありますが、 Barプロパティはそうではありません。

これはできますか?

+0

なぜあなたはFooを拡張できないのですか:IFoo、あなたが求めているのであれば? – Tigran

+0

@Tigran:Foo.csファイルに手を触れることができません – Ropstah

+0

@DBM:「バー」は公開されています – Ropstah

答えて

8

あなたが別のファイルでこれをやり直さないようにするにはどうしたらいいですか?

Barプロパティは既に存在するため、再実装する必要はありません。

か、新しいクラスで

public class FooExtended : Foo, IFoo 
{ 
} 

fooはすでにそれを実装しているのでここでも、あなたはBarを実装する必要はありません。

+0

私はこれを試しましたが、これはコンパイルされません。 – Ropstah

+1

部分クラスのオプションには制限があります。ファイルを同じアセンブリに配置する必要があります。拡張クラスのオプションは普遍的に機能するはずです。コンパイルエラーとは何ですか? –

+0

バーがバーチャルでない限り、バーを再実装することはできませんので、これは正しい方法です。 – Alex

1

IFooを実装するFooの部分クラスを作成することはできますが、Barプロパティは公開されていないため動作しません。

バープロパティが公共だった場合:Barとして

partial class Foo 
{ 
    public string Bar { get; set; } 
} 

interface IFoo 
{ 
    string Bar { get; set; } 
} 

partial class Foo : IFoo 
{ 

} 
+0

私の@Tomislav Markovskiを見てください、 'バー'は公開されるべきです – Ropstah

1

がプライベートで、ここにあなたが探しているものです:とにかく

public partial class Foo : IFoo 
{ 
    string IFoo.Bar 
    { 
     get 
     { 
      return this.Bar; // Returns the private value of your existing Bar private field 
     } 
     set 
     { 
      this.Bar = value; 
     } 
    } 
} 

、これは混乱して、可能であれば避けるべきです。

EDITBarは現在公開されているようにさて、あなたは、あなたの質問を変更した、Barは常にFooに実装されているもう問題はありません。

関連する問題