10

私がこのようなインターフェースを持っているとしましょう:

public interface MyInterface
{
    int Property1
    {
        get;
    }

    void Method1();
    void Method2();
}

インターフェイスの実装者にその一部を明示的に実装させる方法はありますか?何かのようなもの:

public interface MyInterface
{
    int Property1
    {
        get;
    }

    explicit void Method1();
    explicit void Method2();
}

編集:インターフェイスが明示的に実装されているかどうかを気にする理由について。機能に関しては重要ではありませんが、コードを使用している人から不要な詳細を隠すと役立つ場合があります。

次のパターンを使用して、システムで多重継承を模倣しようとしています。

public interface IMovable
{
    MovableComponent MovableComponent
    {
         get;
    }
}

public struct MovableComponent
{
    private Vector2 position;
    private Vector2 velocity;
    private Vector2 acceleration;

    public int Method1() 
    {
        // Implementation
    }

    public int Method2() 
    {
        // Implementation
    }

}

public static IMovableExtensions
{
    public static void Method1(this IMovable movableObject) 
    {
        movableObject.MovableComponent.Method1();
    }

    public static void Method2(this IMovable movableObject) 
    {
        movableObject.MovableComponent.Method2();
    }
}

public class MovableObject : IMovable
{
    private readonly MovableComponent movableComponent = new MovableComponent();

    public MovableComponent MovableComponent 
    {
        get { return movableComponent; }  // Preferably hiddem, all it's methods are available through extension methods.
    } 
}

class Program
{
     static void Main(string[] args)
     {
          MovableObject movableObject = new MovableObject();
          movableObject.Method1();   // Extension method
          movableObject.Method2();   // Extension method
          movableObject.MovableComponent    // Should preferably be hidden.

     }
}

MovableComponentプロパティが明示的に実装されている場合、ほとんどの場合、クラスを使用しているユーザーからは非表示になります。説明がそれほどひどいものではなかったことを願っています。

4

3 に答える 3

12

いいえ、実装者にインターフェースの明示的または暗黙的な実装を選択させることはできません。

于 2012-12-12T01:19:03.557 に答える
0

あなたが探しているものは抽象クラスと呼ばれています

于 2012-12-12T01:20:58.063 に答える
-1

MovableComponentプロパティが明示的に実装されている場合、ほとんどの場合、クラスを使用しているユーザーからは非表示になります。

明示的なインターフェース実装の目標は、実装を隠すことではなく、同じ制約を定義するが同じ実装に従うことができないインターフェース間の衝突を可能にすることです。
このため、実際のタイプを使用する場合は、衝突する実装の1つを除くすべてを非表示にする必要があります。代わりに、特定のインターフェイスタイプが使用されている場合にのみ「表示」します。しかし、それは主な目的ではありません。開発者が適切なタイミングで適切な実装を積極的に選択できるように、何らかの方法であいまいさを解決しなければならないことによる論理的な結果です。

次に、インターフェイスデザイナーとして、特定の実装についても、実装クラスがサードパーティによってどのように処理されるかについても心配する必要があります。ここでいくつかの境界を越えて、間違った原点から変更を加えようとしています。

于 2021-08-23T07:50:57.513 に答える