Laden...

Vererbung bei Code Behind

Erstellt von the_lmich vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.277 Views
the_lmich Themenstarter:in
248 Beiträge seit 2005
vor 17 Jahren
Vererbung bei Code Behind

Hallo zusammen,

ich arbeite mich grade in die Architektur von ASP.NET 2.0 ein und habe ein grundlegendes Verständnisproblem:

Es gilt doch, dass meine aspx-Seite von meiner CodeBehind-Datei eine Subklasse ist und weiter diese CodeBehind von Page erbt?

Wenn dem so ist, wieso sehe ich meine Controls, die ich über den Designer hinzugefügt habe im Code der aspx, aber nicht in der cs-Datei? Und wieso kann ich trotzdem auf diese mit "this" zugreifen?
Und nochwas: Meine cs-Datei ist eine partielle Klasse. Wo ist der andere Teil versteckt?

Was verstehe ich hier nicht?

Grüße
🙂 Torsten

5.942 Beiträge seit 2005
vor 17 Jahren

Hallo Thorsten

Original von the_lmich
Es gilt doch, dass meine aspx-Seite von meiner CodeBehind-Datei eine Subklasse ist und weiter diese CodeBehind von Page erbt?

Die aspx Seite ist keine Klasse, sondern eben eine aspx Datei.
Das Codebehind einer aspx Seite erbt immer von Page, ja.

Original von the_lmich
Wenn dem so ist, wieso sehe ich meine Controls, die ich über den Designer hinzugefügt habe im Code der aspx, aber nicht in der cs-Datei? Und wieso kann ich trotzdem auf diese mit "this" zugreifen?
Und nochwas: Meine cs-Datei ist eine partielle Klasse. Wo ist der andere Teil versteckt?

Es gibt zwei möglichkeiten, entweder arbeitest du mit dem Designer oder im Code der aspx Datei. Auf dieses Deklarationen hast du dann in deiner CS Datei Zugriff.
Oder erstellst z.B. ein Control dynamisch in deiner cs Datei.
Je nach Vorliebe und Anwendungsfall ist die eine oder andere Möglichkeit besser geeignet.

Eine partielle Klasse bedeutet nichts anderes / einfacheres, als dass du eine Klasse auf mehrere Dateien verteilen kannst.
Dazu benutzt du bei deiner verteilten Klasse überall das Schlüsselwort "partial" und definierst die Klasse ansonsten normal.
Siehe hierzu: http://www.microsoft.com/germany/msdn/library/net/csharp/KuenftigeFeaturesDerCSharpProgrammiersprache.mspx?mfr=true (partial)

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

the_lmich Themenstarter:in
248 Beiträge seit 2005
vor 17 Jahren

Hallo Peter,

danke für Deine Antwort. Ich nehme mal eben Stellung.

Bislang dachte ich die aspx würde auch zu IL kompiliert und wäre dann eben eine Klasse. Ganz wie bei Javas Servlets. Diese würde von der CS-Klasse erben. Bei Galileo im OpenBook heisst es:

Bei der Datei codebehind_02.aspx stellt sich zunächst die Aufgabe, festzulegen, dass die Seite nicht von der Klasse Page direkt abgeleitet werden soll, sondern von der Klasse, die Sie selbst definiert haben. Das erreichen Sie, indem Sie die Page-Direktive entsprechend anpassen. <%@ Page Inherits="Codebehind_02_baseclass" ... %>

Das ist zwar VB-Code aber immerhin steht da inherits. Also wäre m.E. nach die Hierarchie ASPX : CS : Page. (Denke ich jedenfalls) Mir ist daher unklar woher die CS-Datei die Controls aus der ASPX kennt. Mich würde das architektonisch interessieren. Logischer wäre doch der designer würde die Controls in die CS implementieren, diese würden dann von der ASPX geerebt.

Partielle Klassen sind mir bekannt, mir stellt sich nur die Frage WO der andere Teil der partiellen CS-Datei ist. Oder gibt es den nicht? Warum benutzt VS dann per default die partielle Klase beim Anlegen der CS-Datei einer ASPX? Sind dort nicht vielleicht die Controls versteckt, von denen ich meine die ASPX müsste sie erben?

Soweit klar, was ich meine?

Grüße
🙂 Torsten