Announcement

Collapse
No announcement yet.

Namespace Alias in Scope setzen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Namespace Alias in Scope setzen?

    Hi,

    Wird vermutlich nicht möglich sein, aber ich frage trotzdem mal, falls ich was übersehe.

    In unserer ERP-Umgebung können wir an bestimmten Stellen kleine "Funktionen" in .NET erstellen. Dabei befinde ich mich in einem Method-Scope.
    Formular-Elemente werden im Standard per DevExpress-Komponenten realisiert. Über einen DirectCast ist es allerdings möglich, diese in WindowsForms-Komponenten zu übertragen.

    Beispielhaft:
    [highlight=csharp]System.Windows.Forms.Form MyForm = (System.Windows.Forms.Form)XtraForm;[/highlight]
    Bei längeren Scripten ist das sehr viel Scheibarbeit, daher wollte ich die Namespaces gerne abkürzen.
    Da ich mich im Method-Scope befinde, kann ich keinen Namespace-Alias setzen. Und die Subnamespaces erreiche ich tatsächlich nur über den globalen Namespace.

    Gibt es eine Möglichkeit, innerhalb eines Method-Scope ein Kürzel zu generieren?

    Als Beispiel:
    [highlight=csharp]MyForms = System.Windows.Forms;
    MyForms.Form = (MyForms.Form)XtraForm;[/highlight]
    Klar, dass das so nicht geht, aber ich hoffe, Ihr versteht, was ich meine?
    Es ist natürlich nur ein Bequemlichkeitsfaktor, aber vielleicht hat jemand ja eine Möglichkeit dafür?

    Danke
    Arne
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    Kannst du genauer erklären was da passiert? Ich vermute mal das XtraForm eine Ableitung von Form ist daher sehe ich nicht warum man da einen expliziten Cast braucht. Wenn ein XtraForm eine Form ist kann man einfach zuweisen. Einen DirectCast kennt C# übrigens nicht.

    Da du schon von Namespace Alias spricht. Die Aliase bei der using Direktive, die auch für Klassen funktioniert nicht nur für Namespaces, helfen dir nicht? Also sowas

    [HIGHLIGHT=C#]using WinForm = System.Windows.Forms.Form;
    .....
    var form = (WinForm)XtraForm;
    [/HIGHLIGHT]

    Wenn da irgendwas an unleserlichem Code nötig ist den du ersetzen möchtest (klingt positiver als Bequemlichkeit) hast du auch die Option einer Extensionmethode (mit einem guten Namen) zuschreiben die das hässliche übernimmt und dann nur einmal existiert. Etwa

    [HIGHLIGHT=C#]
    static System.Windows.Forms CastToForm(this DevExpress.XtraEditors.XtraForm form)
    {
    return (System.Windows.Forms)form;
    }
    ....

    var MyForm = XtraForm.CastToForm();
    [/HIGHLIGHT]

    Ob du beides in dem Context deines ERP benutzen kannst weiß ich dann natürlich nicht.

    Comment


    • #3
      Hallo Ralf,

      Danke für Deine Antwort.

      Ich befinde mich tatsächlich im Method-Scope, bspw. schematisch:
      [highlight=csharp]
      namespace Somewhere {

      public partial class FooBar : Baz {

      public bool ClosedMethodScope( ... ) {

      // .. hier bin ich drin und kann nicht raus brechen.

      }

      }

      }
      [/highlight]Und an der Stelle kann ich weder Namespace-, noch Class-Aliase verwenden. Logisch, weil use an der Stelle schon nicht erlaubt ist.

      Ich vermute mal das XtraForm eine Ableitung von Form ist daher sehe ich nicht warum man da einen expliziten Cast braucht.
      Wie Du in Deinem unteren Code richtig dargestellt hast, ist das die DevExpress-Form Variante, die muss ich casten, weil ich sonst nicht an die Windows-Control Properties rankomme.

      Eine "Extension"-Methode habe ich dafür bereits, aber die hilft nur bedingt weiter.
      Ich kann zwar var anstelle des expliziten Datentyp verwenden, aber dann habe ich bspw. keine Property-Vorschläge im Editor. Die macht er leider nur, wenn der Datentyp explizit angegeben wurde.


      Aber danke für Deine Mühe.
      PHP rocks!
      Eine Initiative der PHP Community

      Comment


      • #4
        Wie Du in Deinem unteren Code richtig dargestellt hast, ist das die DevExpress-Form Variante, die muss ich casten, weil ich sonst nicht an die Windows-Control Properties rankomme.
        Da habe ich Zweifel. Wenn XtraForm eine Form ist hat XtraForm auch alle Properties die Form hat. Man kann bei einer Ableitung keine Member verschwinden lassen. Oder anders ausgedrückt man kann die Sichtbarkeit von Membern nicht reduzieren. Das würde jegliches Grundprinzip in der OO Programmierung kaputt machen.
        Was ich mir vorstellen kann ist das die Entwicklungsumgebung vor der du da Sitz nicht Visual Studio ist sondern irgendwas von deinem ERP und die Codevervollständigung da nicht für Ableitungen funktioniert (Die Member sind aber natürlich da und du musst sie halt quasi blind hinschreiben). Das ist dann ein Problem der IDE und lässt sich mit Sprachmitteln nicht lösen.

        Comment


        • #5
          Ja genau, dass die IDE das Problem an der Stelle mit var ist, ist mir bewusst. Nur manchmal benötige ich an der Stelle auch mal eine Property-List, wenn mir bspw. mal der Name nicht einfällt.
          Dafür müsste ich eben die Datentypen explizit angeben, was mir nicht so gut gefällt. Daher dachte ich, dass ich das kürzen kann.

          Aber ich merke schon, dass das so nicht geht.
          Ist auch nicht so schlimm, ich behaupte mal, dass das eh mehr "Kosmetik" am Code wäre.

          Danke Dir!
          Gruß
          Arne
          PHP rocks!
          Eine Initiative der PHP Community

          Comment

          Working...
          X