Announcement

Collapse
No announcement yet.

Runtime error zu vermeiden

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

  • Runtime error zu vermeiden

    Zu erst hallo an alle

    Ich hab' ein großes Problem. Ganz am Anfang muss ich mein Struktur erklären.
    In mein Program habe ich Schnittstellen, die die Sprache für den Leuten definieren. Die Leute werden das alles in Classe A benutzen. Fast alle Schnittstellen haben Implementierung.

    Wie das aussieht :

    Interfaces : IA, IB und IC , wo in IA findet man
    Code:
    public interface A
    {
    IAB B { get;  set; }
    IAC C { get;  set; }
    }
    Implementierung : A , wo alles von IA implementiert ist, und in A findet man :
    Code:
    //constructor
    public A_impl()
    {
    	B = new AB_impl();
    }
    //members
    public IAB	B { get;  set; }
    public IAC	C { get;  set; }
    Jetzt , wenn ich in andere Klasse bin , wo natürlich alle Verweise da sind und mache :
    Code:
    //constructor
     public Example()
            {
              A = new A_impl();
            }
    //member
    public IA A { get; set; }
    später in eine Methode rufe ich es so ab :
    Code:
    A.B.property_X = 2; // OK
    A.C.property_Z = 2; // Runtime Error
    Es gibt kein Build Error ich kriege Runtime Error und das ist ja vollig in Ordnung.

    Allerdings möchte ich es schon bei der Generirung sehen, das ich ein Objekt benutze, der kein Instanz hat.

    Als Erklärung ich möchte es genau so machen, aber möchte kein Runtime Error zu haben. Wie kann ich und was kann ich es machen , um dieses Fehler schon bei der Genrierung zu sehen.

    VG
    Marceli

  • #2
    Wenn ich dich richtig verstehe (und du zum Beispiel mit Generierung eigentlich Kompilierung meinst) dann geht das nicht.

    Die Instanzierung eines Objekts ist ein Laufzeitproblem und das kannst nicht beim Kompilieren prüfen ob das später zur Laufzeit auch wirklich gemacht wird.

    In deinem Fall haben zum Beispiel deine veröffentlichten Interface Properties auch Setter. Da könnte man also zur Laufzeit auch null zuweisen und danach die Property aufrufen was natürlich garantiert knallt. Wie sollte das beim kompilieren schon geprüft werden?

    Comment


    • #3
      na ja , danke für deine Antwort.

      Ich hab gedacht es gibt schon was um das Nullreferenzierung zu sehen.

      Schade ;(

      Comment


      • #4
        Nun es gibt da das Hilfsmittel des NonNullable Konstrukts. Also eine Entsprechung für Nullable Types aber eben als NonNullable Type.
        Das hilft um zur Laufzeit zu verhindern das eine Referenz null wird. Aber auch damit wirst du keine Unterstützung zur Designzeit bekommen( und auch keine Unterstützung beim Design wie bei nullable Types durch den ? Marker).

        Wenn dich das interessiert guckst du z.B. hier. Es gibt aber noch viele andere Ansätze. Einfach mal googeln.

        Comment


        • #5
          Danke sehr , werde einfach googeln


          wenn nein, wende ich mich hier zurück

          VG
          Marceli

          Comment

          Working...
          X