![]() |
Re: IsObject / IsClass
Ah. Das ist also weniger eine Sicherheitsfrage (im Sinne von Erkennung manipulierter Daten) als eine Frage von sauberer Programmierung und Fehlererkennung. Dann iss mir alles klar :)
|
Re: IsObject / IsClass
Naja, primär hatte ich IsObject() entwickelt weil es sicherer als der Operator is ist. Wird is auf ein falsches Objekt angewendet dann ist garantiert das es AVs hagelt. IsObject() macht nun eigentlich das was ich vom is Operator erwartet hätte, es erzeugt keine AVs sondern kehrt in diesem Falle mit FALSE zurück.
Man muß sich mal die Verwendung vom is Operator vergegenwärtigen:
Delphi-Quellcode:
aus meiner Sicht darf in einem solchen Konstrukt KEINE Exception ausgelösst werden. IsObject() ist also als "safer Replacement" vom is Operator gedacht.if Variable is TMyClass then Ein Programmierer der also sowas wie oben abfragen möchte interessiert sich primär nur für EINE Sache, nämlich "ist in Variable ein Objekt der Klasse TMyClass ?" und nicht "ist in Variable ein Objekt von TMyClass ? oder wenn es garkein gültiges Objekt ist dann erzeuge mit Pi*Daumen Wahrscheinlichkeit eine Exception". Das eine ist eine EINDEUTIGE Frage im Source, das andere ist eine mehrdeutige ANTWORT mit dem Seiteneffekt einer dritten ungewollten Programmverzweigung per Exception. IsObject() korregiert nun dieses unsaubere Verhalten. Klar, man kann sich darüber streiten was nun die Ursachen sind, diese sind mir aber im wahrsten Sinne Wurst, mich interessiert nur die Zielsetzung. Ergo: muss ich immer davon ausgehen das ich aufbauend auf schlechteren Source meine Ziele erreichen muß, ist einfach mal aus praktischen Erwägungen heraus so notwendig. Denn wie sähe die korrekte Alternative denn aus ?
Delphi-Quellcode:
also ziemlich unübersichtlich und aufwändig, denn daswäre bei jeder is Abfrage notwendig. Im Grunde macht IsObject() nur sowas wie oben, halt mit einigen kleineren zusätzlichen Verbeserungen.
var
Korrekt: Boolean; begin try Korrekt := Variable is TMyClass; except Korrekt := False; end; if Korrekt then ; end; Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz