Zitat von
himitsu:
was ist denn mit dem IS loß :shock:
also ich hätte da Eine erwartet
Ich hatte nicht umsonst nach einer Begründung gefragt.
Zitat von
himitsu:
wenn ich die Funktions Parameter nach TObject ändere, dann kommt eine :gruebel:
Was auch logisch ist. IS testet eine Spezialisierung ab, wenn die Variable schon vom Typ TStrings ist, dann kann darin nur ein TStrings oder dessen Nachfahre sein - oder NIL. Das sind die einzigen zuweisungskompatiblen Inhalte. Somit ist die IS Prüfung sinnlos. Delphi prüft einzig auf <> nil, was auch das einzige ist, was von IS übrig bleibt. NIL kann niemals von einer Spezialisierung sein.
Bei deinem Beispiel habt ihr beide einen harten Cast gemacht, die einzige halbwegs unaufwändige Methode das ganze mit einem fremden Objekttyp aufzurufen. Aber gerade mit dem harten Cast umgeht ihr ja diese Zuweisungsinkompatibilität und schreibt Delphi vor: das ist TStrings. Und genau weil ihr das macht, tragt ihr die Verantwortung, da Delphi alles prüft - aber genau die Prüfung habt ihr umgangen. Damit knallts beim Zugriff (großer Zufall natürlich) auf .Count.
Wenn ihre eine Dose habt und da steht "Brotdose" drauf, dann ist die entweder leer oder da ist Brot drin. Wenn dich nun einer fragt, ist da Brot drin, dann weisst du genau: entweder Brot oder nix. Somit einfach die Dose schütteln: wenn was zu hören ist, kannst du bestätigen das Brot drinne ist. Wenn du nix hörst kannst du behaupten sie ist leer. Wenn du nun gefragt wirst ob da Mehrkornbrot drinne ist, dann musst du reinschauen und dir das Brot anschauen. Abhängig davon kannst du dies bejahen, verneinen oder feststellen, das gar nichts drinne ist.
Alles das funktioniert, wenn du davon ausgehst, dass die Dose nur sinnbestimmt verwendet wird. Wenn nun aber ein Scherzkeks dort Kaffesahne reinpackt, dann hast du bei der nächsten Brot-vorhanden-Frage eine Sauerei in der Küche - aber ist dann nicht dein Fehler, sondern von dem, der die Dose nicht bestimmungsgemäß verwendet hat. Die Brotdose trägt keine Schuld und du als "Tester" auch nicht...