[ASP.NET/C#] inheritance

Pagina: 1
Acties:

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
Waarschijnlijk komt dit over als een ongelooflijke noobvraag, maar ik kan dit echt niet vinden. Ik wil graag met c# en asp.net beginnen, maar ik kom ergens niet doorheen (ASP classic beheers ik wel).

Ik heb de volgende bestanden:
default.aspx
code:
1
<%@ page inherits="myCodeBehind" src="test.cs" language="C#"%>


test.cs
code:
1
2
3
public class myCodeBehind : framework.Engine {
void Page_Load() { //hier zooi}
}


framework.cs
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Xml;
using System.Xml.Xsl;
using System.Data;
using System.Data.OleDb;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Net.Sockets;
using System.Net;

namespace framework 
{
    public class Engine : Page 
    {
                          //hier komt veelgebruikte zooi
    }
}


Ik weet dat dit niet werkt en ik kan me ook voorstellen dat ik helemaal verkeerd zit. Maar hoe kan ik in C#/ASP.NET externe files gebruiken, zodat ik veel gebruikte functies (mn engine) kan scheiden van de specifiekere code? Ik heb me echt suf gezocht op Internet, maar kon niks vinden en kan me ook dan voorstellen dat ik de plank helemaal mis sla.

De precieze foutmelding is overigens:
Compiler Error Message: CS0246: The type or namespace name 'framework' could not be found (are you missing a using directive or an assembly reference?)

[ Voor 10% gewijzigd door zoepercavia op 07-02-2003 00:49 ]

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het probleem zit hem waarschijnlijk dat je de regel
C:
1
using framework;

niet hebt toegevoegd.
Maar om veel gebruikte functies te kunnen gebruiken hoef je zeker geen gebruik te maken inheritance. Je kan ook gewoon andere classes maken waarvan je instanties maakt of classes die static functies hebben gebruiken

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • EfBe
  • Registratie: Januari 2000
  • Niet online
zoepercavia schreef op 07 februari 2003 @ 00:47:
Waarschijnlijk komt dit over als een ongelooflijke noobvraag, maar ik kan dit echt niet vinden. Ik wil graag met c# en asp.net beginnen, maar ik kom ergens niet doorheen (ASP classic beheers ik wel).

Ik heb de volgende bestanden:
default.aspx
code:
1
2
<%@ page inherits="myCodeBehind" src="test.cs" 
language="C#"%>


test.cs
code:
1
namespace framework
Je code zit in de namespace 'framework'. Je page zelf niet. Die 'inherit' van de class die jij aangeeft in de page directive in de aspx regel hierboven. Jij specificeert de code en de classname verkeerd.

Wat je zou moeten opgeven is:
code:
1
2
<%@ Page language="c#" Codebehind="test.cs"
 AutoEventWireup="false" Inherits="framework.test" %>

Nu geef je op dat de code in de codebehindpage 'test.cs' zit en de class waarvan je inherit heet test, en die zit in de namespace framework. ASP.NET maakt at runtime via reflection een nieuwe class aan voor je page, compileert deze en die runt op de webserver.
Ik weet dat dit niet werkt en ik kan me ook voorstellen dat ik helemaal verkeerd zit. Maar hoe kan ik in C#/ASP.NET externe files gebruiken, zodat ik veel gebruikte functies (mn engine) kan scheiden van de specifiekere code? Ik heb me echt suf gezocht op Internet, maar kon niks vinden en kan me ook dan voorstellen dat ik de plank helemaal mis sla.
Je moet afstappen van de asp classic logica van includes. Die bestaan niet meer. Daarvoor in de plaats gekomen zijn de webcontrols (ascx) en user controls. webcontrols zijn het simpelst: die hebben een html template en een code behind. usercontrols bestaan uit een class die html write, meer low level zeg maar.

In ASP.NET kun je dus logica en weergave perfect scheiden, doordat de logica in de code behind classes zit en die compileer je naar een dll, een assembly. In je HTML pages, de aspx pages, geef je op van welke class in die code behind assembly je 'inherit' en geeft in feite het template op voor die class. Het is wellicht verstandig even op google te zoeken op IHttpModule en IHttpHandler, vooral bij de MSDN hebben ze goede artikelen daarover. Je krijgt dan een goed beeld hoe ASP.NET intern werkt, wat je aan het doen bent in de code behind, wat de global.asax doet, etc.

[ Voor 12% gewijzigd door EfBe op 07-02-2003 10:02 . Reden: &#^%$@^%$#@ Kan dat code font niet wat kleiner!? ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
Maar om veel gebruikte functies te kunnen gebruiken hoef je zeker geen gebruik te maken inheritance. Je kan ook gewoon andere classes maken waarvan je instanties maakt of classes die static functies hebben gebruiken
ik had inderdaad ook al bedacht dat het helemaal niet nodig hoeft te zijn om over te erven. Alleen is mijn vraag dan hoe 'compile' ik mijn eigen gemaakte classes mee? Dus hoe krijg ik het voor elkaar dat ik "using Framework.Engine" kan gebruiken op mijn pagina's. Als ik dat weet kan ik gewoon een aantal veel gebruikte functies in class Engine zetten.
In ASP.NET kun je dus logica en weergave perfect scheiden
Daar heb ik al wat voor: XML icm XSLT. Ik ben van plan om een aantal classic ASP projecten die geheel draaien op XML en XSLT om te schrijven naar C#, dus ik weet dan niet helemaal wat het nut is van webcontrols en usercontrols (zover ik begrepen had weinig).

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
[nohtml]
zoepercavia schreef op 07 February 2003 @ 12:01:
[...]


ik had inderdaad ook al bedacht dat het helemaal niet nodig hoeft te zijn om over te erven. Alleen is mijn vraag dan hoe 'compile' ik mijn eigen gemaakte classes mee? Dus hoe krijg ik het voor elkaar dat ik "using Framework.Engine" kan gebruiken op mijn pagina's. Als ik dat weet kan ik gewoon een aantal veel gebruikte functies in class Engine zetten.
Project - Add Reference in VS.NET

https://fgheysels.github.io/


Verwijderd

De foutmelding die je krijgt wordt veroorzaakt door het feit dat je de klasse Engine nog niet gecompileerd hebt. De compiler zoekt naar het type (class) framework.Engine en kan deze niet vinden.

Als je Visual Studio .NET gebruikt moet je even je project compileren en dan zal het wel werken. (menu Build > Build Solution) Als je geen VS.NET hebt zul je het met de command line compiler moeten doen (volgens mij csc.exe) of met Sharpdevelop, een gratis IDE voor .NET (http://www.icsharpcode.net/OpenSource/SD/Default.aspx)

Succes!

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
werkt dat ook met ASP.NET?
want moet hij dan niet automatisch compilen?
nog even voor de duidelijkheid, ik maak een webapplicatie met C# en ASP.NET.

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • maikel
  • Registratie: Januari 2001
  • Laatst online: 24-08 12:52
Nee, je moet eerst zelf compilen.
Dan maakt ie een DLL aan waarin alle classes in staan. Pas dan kan je pagina de classes gebruiken.

Verwijderd

Je hebt deels gelijk, ASP.NET paginas (.aspx files) worden automatisch gecompileerd door het framework. Het framework maakt dan van jouw html een class met daarin (simpel gezegd) een heleboel Response.Write statements. Deze class erft standaard van System.Web.UI.Page, tenzij je een andere class opgeeft, dit kan dan de codebehind class zijn met logica specifiek voor die pagina of (zoals in jouw geval) een standaard basis class. De C# files worden door het framework niet automatisch gecompileerd, deze moet je dus zelf compileren voordat je de pagina oproept.

Samegevat:
.aspx file worden automatisch gecompileerd.
.cs files moet je zelf compileren

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Zeg zoepercavia, ik tik niet voor jan k*t een lange posting om je te helpen. Als je die wellicht even doorleest, heb je een serie van je vragen beantwoord.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
efbe, ik heb geen zin om off-topic te gaan en een slotje te krijgen, maar ik heb je topic gelezen (en er over nagedacht). Als je misschien even aangeeft wat ik dan gemist heb?

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


Verwijderd

Rustig aan EfBe, als je dan advies geeft moet het wel kloppen. Als onze vriend soepercavia gewoon zijn project compileert (ervan uitgaand dat hij VS.NET gebruikt) dan gaat zijn CodeBehind class die correct afleidt van framework.Engine ook gewoon mee en dan werkt het gewoon. Wat jij zegt klopt, maar is niet de oplossing van zijn probleem en daar gaat het hier toch om.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 07 February 2003 @ 14:58:
Rustig aan EfBe, als je dan advies geeft moet het wel kloppen. Als onze vriend soepercavia gewoon zijn project compileert (ervan uitgaand dat hij VS.NET gebruikt) dan gaat zijn CodeBehind class die correct afleidt van framework.Engine ook gewoon mee en dan werkt het gewoon. Wat jij zegt klopt, maar is niet de oplossing van zijn probleem en daar gaat het hier toch om.
Hij had een totaal verkeerde reference regel in zn aspx file en je gaat snel de mist in als je de werking achter asp.net niet goed begrijpt. de meeste mensen gebruiken VS.NET en die prakt die regel er zelf bij, maar wanneer je geen VS.NET gebruikt, moet je zelf op basis van kennis die regels goed kunnen invullen. Ik kreeg niet de indruk dat zoepercavia, net als velen overigens, een diepe kennis van de achterliggende engine van ASP.NET heeft zodat hij weet waarom wat hoe is gedaan en moet. Dit is niet erg, want MS' documentatie is daarover niet echt uitgebreid, maar is wel de basis van veel problemen en vragen, zoals die van zoepercavia.

Overigens bevat de .NET SDK wel degelijk goede documentatie hoe je een asp.net app moet compileren met de commandline tools.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
het is gelukt!
Inderdaad met VS.NET. Maar ik snap nu wel iets beter waarom het zo werkt. Het was voor mij gewoon even wennen dat ik eerst mijn project moet compilen, voordat ik externe bestanden kan gebruiken. Als jullie vinden dat ik die vraag hier niet kan stellen omdat ie te basic is, so be it, maar ik had eigenlijk ook niet verwacht dat ik antwoord zou krijgen op een echt n00bforum.

Efbe, ik ga zeker de documentatie lezen over de interne structuur van asp.net. Maar ik vind het toch wel handig om eerst iets werkend te hebben, voor we me in de structuur te diepen. Ik ben geen professional, maar omdat ik het niet doe om van te leven, dus ik zou het juist uit interesse goed willen begrijpen.

Maar goed, nu kan ik eindelijk aan de slag. Eindelijk strong-typed, goeie error report, en een hele zoot functies die ik in ASP heb gemist.

Overigens ben ik trouwens van mening dat je zelf voor kleine projectjes net zo goed C# kan gebruiken (om even op het PHP is dood topic verder te gaan). Kosten spelen zeker een rol, maar er is eventueel hosting te vinden die goedkoop ASP.Net host.

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • EfBe
  • Registratie: Januari 2000
  • Niet online
haha, je hebt vs.net? Hoe krijg je dan die regel zo brak dat het niet werkt! :D.
Het was voor mij gewoon even wennen dat ik eerst mijn project moet compilen, voordat ik externe bestanden kan gebruiken. Als jullie vinden dat ik die vraag hier niet kan stellen omdat ie te basic is, so be it, maar ik had eigenlijk ook niet verwacht dat ik antwoord zou krijgen op een echt n00bforum.
Die externe bestanden - compilen link snap ik niet helemaal, wat bedoel je daarmee? Tuurlijk mag je hier je vraag stellen. Zeikstralen die vinden dat n00bs naar beginnersweb.nl moeten richten meer ellende aan dan dat ze zelf aan n00bs toeschrijven.

De documentatie van ASP.NET is op zich wel wat summier hoor. Ik zou als ik jou was zeker de quickstarts op www.gotdotnet.com doornemen, want die zetten je snel op het rechte spoor.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
Die externe bestanden - compilen link snap ik niet helemaal, wat bedoel je daarmee?
ik bdoel er mee dat ik ASP style coden gewend ben, includes etc... bij ASP hoef je ook helemaal niks te compilen. Als je het op de server zet werkt het meteen. Dat is jammer aan ASP.Net, het betekent dat je altijd een compiler bij je moet hebben wil je aanpassingen doen aan nieuwe classes. Dat wordt dus niet meer prutsen op de faculteit :(
Voor de rest roelt ASP.NET natuurlijk 100x harder dan ASP.

Waarom ik het zo brak gekregen heb? Ik ben begonnen in UltraEdit, van scratch zeg maar, vandaar :)

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
[nohtml]
zoepercavia schreef op 07 February 2003 @ 17:08:
[...]

Dat is jammer aan ASP.Net, het betekent dat je altijd een compiler bij je moet hebben wil je aanpassingen doen aan nieuwe classes.
Neen, da's een voordeel. ;)
Doordat de code gecompileerd wordt, heb je snellere code en heb je de mogelijkheid tot strong-typing, indicatie van warnings/errors/hints, ....

Trouwens, die C# compiler kan je gratis downen hoor.

https://fgheysels.github.io/

Pagina: 1