2 Stimmen

Namenskonflikt zwischen Typ des System-Namespaces und benutzerdefiniertem Typ in unterschiedlichen Assemblys

Ich habe ein Problem mit der Namensauflösung eines Typs namens Action. Während das Projekt in einem frühen Stadium war und alles im selben Projekt deklariert wurde, bevorzugte der Compiler immer meine eigene Klasse. Jedoch, seit es notwendig geworden ist, das Projekt in verschiedene Assemblys zu trennen (z.B. ProjectName.Common, ProjectName.Engine, etc.), ist ein Namenskonflikt zwischen System.Action und ProjectName.Common.Action aufgetreten.

Ich habe herausgefunden, dass ich den internen Namespace des Projekts explizit innerhalb der Namespace-Deklaration einer beliebigen Projektdatei importieren kann, während System immer noch im globalen Gültigkeitsbereich importiert wird, wie ursprünglich vom IDE erstellt. Tatsächlich funktioniert das, sieht aber nicht sehr elegant aus. Gibt es einen besseren Ansatz, um dieses Problem zu lösen? Das Umbenennen meiner Action-Klasse ist keine akzeptable Lösung, da es sich um einen ziemlich häufigen Domänennamen handelt und nicht um etwas Besonderes wie z.B. Math, usw.

Code Beispiel:

using System;
...

namespace ProjectName.Engine {

    using ProjectName.Common;

    class SomeClass {

        private Action action;
        ...

    }

}

Vielleicht kennt jemand ein Rezept für solche Namenskonflikte ...

4voto

Oded Punkte 475566

Sie können einen Namespace-Alias verwenden:

using Example = ProjectName.Common;

class SomeClass {

    private Example.Action action;
    ...

}

Oder alternativ, einen Typ-Alias nur für den Action-Typ:

using Act = ProjectName.Common.Action;

class SomeClass {

    private Act action;
    ...

}

3voto

Michael Liu Punkte 48128

Betrachten Sie es, Ihre Action-Klasse im Stamm ProjectName-Namespace anstelle von ProjectName.Common zu platzieren. Wenn Sie das tun, wird innerhalb des ProjectName-Namespace oder eines Subnamespace Action auf ProjectName.Action und nicht auf System.Action verweisen, und Sie müssen keine using-Direktiven zu all Ihren anderen Quelldateien hinzufügen.

1voto

Ry- Punkte 208020

Sie können using mit einem Alias verwenden:

using Common = ProjectName.Common;

Verweisen Sie dann einfach auf System.Action als Action und Ihre Aktion als Common.Action. Wenn Sie damit einverstanden sind, den Namen nur in bestimmten Teilen ein wenig zu ändern:

using CAction = ProjectName.Common.Action

Und Sie können CAction und Action nach Bedarf verwenden.

1voto

Botz3000 Punkte 38010

Sie können anstelle des vollständigen Namensraums auch ein Alias verwenden:

using CommonAction = ProjectName.Common.Action;

1voto

parapura rajkumar Punkte 23657

Sie können dies dadurch unterscheiden, dass Sie zwischen Ihrer Aktion und der Systemaktion unterscheiden

using MyAction = Project.Common.Action

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X