2012-12-12 21 views
6

Powiedzmy mam interfejs tak:Czy możliwe jest wymuszenie jawnej implementacji interfejsu (lub jego części)?

public interface MyInterface 
{ 
    int Property1 
    { 
     get; 
    } 

    void Method1(); 
    void Method2(); 
} 

jest jakiś sposób, aby wymusić realizatora interfejsu do wdrożenia jego części wyraźnie? Coś jak:

public interface MyInterface 
{ 
    int Property1 
    { 
     get; 
    } 

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

Edytuj: Dlaczego dbam o to, czy interfejs jest implementowany jawnie czy nie; to nie ma znaczenia, jeśli chodzi o funkcjonalność, ale może pomóc ukryć niepotrzebne szczegóły od osób używających kodu.

Próbuję naśladować wielokrotnego dziedziczenia w moim systemie, używając tego wzoru:

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. 

    } 
} 

Jeśli właściwość MovableComponent został wdrożony wyraźnie, że byłoby w większości przypadków być ukryte przed ktokolwiek używał klasę . Mam nadzieję, że to wyjaśnienie nie było zbyt straszne.

+0

Szukasz [wirtualny] (http://msdn.microsoft.com/en-us/library/aa645767 (v = vs.71). aspx)? To powinno umożliwić zadeklarowanie w tym celu jawnej metody. – Codeman

+1

Nie można implementować części interfejsu. To wszystko albo nic. – rae1

+1

Dlaczego obchodzi cię, czy jest zaimplementowany jawnie czy niejawnie? – Jacob

Odpowiedz

8

Nie, nie można zmusić wykonawców do wybrania jawnej lub niejawnej implementacji interfejsu.

0

Co szukasz nazywa się klasą abstrakcyjną

+0

To nie odpowiada na moje pytanie. –

+0

Nie, to nie jest to, czego szuka. Istnieje powód, dla którego chcesz używać interfejsów do enkapsulacji funkcjonalności zamiast ograniczania ubezpieczenia funkcjonalności do pochodnej baseclass. – Dbl

Powiązane problemy