3

以前にも同様の質問がありましたが、このような答えは見つかりませんでした。

C#

public interface I1 { //sealed interface, cannot change
  string Property1 {get; set;}
  void OnEvent();
}
public class C1 : I1 {//sealed class, cannot change
  public string Property1 {get; set;}
  public virtual void OnEvent() {/*update property1...*/}
}
public class C2 : C1 {//my class inherits C1. Now I want I2 for my class C2
  public string Property2 {get; set;}
  public override void OnEvent() {base.OnEvent(); /*populate property2...*/}
}

Property1を含み、Property2渡すことができるインターフェース「I2」を取得するにはどうすればよいですか?

4

4 に答える 4

2
public interface I2 { 
    string Property1 {get; set;}
    string Property2 {get; set;}
}

public class C2 : C1, I2 {
    public string Property2 {get; set;}
    public override void OnEvent() {base.OnEvent(); /*populate property2...*/}
}

C2基本クラスからProperty1の実装がすでにあるため、暗黙的にインターフェイスを実装するために使用されますI2

于 2012-11-10T05:51:34.153 に答える
2

インターフェースが意図されていないことをしようとしているようです。インターフェースは単なるコントラクトであり、クラスがそのコントラクトを実装する場合、何らかの方法でそれを実現することを約束しますが、インターフェース自体実装の詳細に関係しないため、気にしません。行動を子供に伝えたい場合は、サブクラス化する必要があります。

ただし、実際に親インターフェイスから「機能を引き継ぐ」インターフェイスを作成しようとしている場合、それは確実にサポートされ、簡単に実行できます。あなたがする必要があるのはあなたの親を継承するために子インターフェースを作成することです。

例:

interface IParentInterface
{
   int FirstProperty {get;set;}
   void OnChange();
}

interface IChildInterface: IParentInterface
{
   string SecondProperty {get;set;}
}

class InterfaceInheritanceGoodness: IChildInterface
{
   public int FirstProperty { get; set; }

   public string SecondProperty { get; set; }

   public void OnChange()
   {
       throw new NotImplementedException();
   }
}

そして、インターフェースは多重継承をサポートしています...楽しんでください!

于 2012-11-10T05:52:40.573 に答える
1

明示的な実装はどうですか?

public class C2 : C1, I2 
{
    string I2.Property1 
    {
        get { return base.Property1; } 
        set { base.Property1 = value; }
    }
    public string Property2 {get; set;}
    public override void OnEvent() {base.OnEvent(); /*populate property2...*/}
}
于 2012-11-10T05:52:30.657 に答える
0

クラスからインターフェースを取得することはできません。なぜC2を単独で使用できないのですか?

于 2012-11-10T05:42:09.743 に答える