2017-12-18 4 views
0

Ich habe mehrere Namensräume, die verschiedene Hersteller DMM Racal_xxxxx Agilent_Xxxxx Fluke_xxxxxAus Bibliothek von dmm Klassen einen auswählen möchten und nach oben mit einem gemeinsamen Namen

Wie ich es verstehe, kann ich eine Schnittstelle schreiben, erzwingt passieren alle oben genannten haben die gleiche Funktionalität.

Ich kann tun, was ich auf diese Weise wollen in Test_Station:

public Racal_4152A_DMM.main dmm = new Racal_4152A_DMM.main(); 

und ich kann es in der nächsten Klasse verwenden nach oben, Test_Exec

Gibt es trotzdem die dmm passieren nach oben, ohne sie öffentlich zu sein ?

Und, muss ich wirklich nicht öffentlich machen.

Die Hierarchie wird:

Test_Exec (Racal_4152A_DMM als dmm verwenden muss, muss aber als solche in Test_Station zugewiesen werden)

Test_Station

Racal_4152A_DMM

Alle sind separate Namensräume

Antwort

1

Namensräume sind wirklich nur eine Frage der Benennung. Sie geben keine Beschränkungen in Bezug auf Zugriffsrechte vor. Wenn Sie also Klassen ausblenden möchten, müssen Sie sie entweder in eine andere Klasse einbinden und sie als privat kennzeichnen oder sie in verschiedene Projekte einfügen und sie intern machen.

Ich zeige Ihnen, wie Sie sie in einer Klasse einpacken können. Definieren Sie eine Schnittstelle

public interface IMultimeter 
{ 
    //TODO: declare members 
} 

public static class MulimeterFactory 
{ 
    private class Racal_4152A : IMultimeter 
    { 
     //TODO: Implement interface 
    } 

    private class Agilent_XXX : IMultimeter 
    { 
     //TODO: Implement interface 
    } 

    public static IMultimeter Create_Racal_4152A() 
    { 
     return new Racal_4152A(); 
    } 

    public static IMultimeter Create_Agilent_XXX() 
    { 
     return new Agilent_XXX(); 
    } 
} 

Jetzt können Sie erstellen DMM wie diese

IMultimeter dmm = MulimeterFactory.Create_Racal_4152A(); 

Die Klasse Racal_4152A bleibt unsichtbar außerhalb von MulimeterFactory.

+0

Beginnen, Sinn zu machen, danke. – user3279899

+0

Gibt es eine Möglichkeit, dies mit separaten Klassendateien zu tun? Das heißt: Agilent_XXXX.cs Fluke_xxxx.cs Racal_XXXX.cs So, dass die einzige Sache, die aktualisiert werden muss, wenn ein dmm getauscht wird aus der entsprechenden Zeile Test_Exec.cs allein in Test_Station.cs ist verlassen. – user3279899

+0

Ja, Sie können die Factory als partiell deklarieren: 'public static partial class MulimeterFactory'. Dadurch können Sie sie auf verschiedene Dateien innerhalb derselben Assembly und desselben Namespaces aufteilen. I.e. Sie können mehrere Deklarationen 'public static partial class MulimeterFactory' haben. Die partielle Klasse ist physisch geteilt, ist aber immer noch eine einzige logische Klasse. –

Verwandte Themen