
Mellékelt példa megnyitása előtt szükséges egy CHTWriterTest nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A megoldás a Page osztály CreateHtmlTextWriter nevű metódusával lehetséges, azonban ennek megismerése előtt ki kell térni arra, milyen osztályokkal történik a Weblapok megjelenítése, a metódus milyen osztályokkal áll szorosabb kapcsolatban.
ASP.NET oldalaink tulajdonképpen gyűjteményei az összes kontrolnak, melyekre kérés érkezik, mondhatnánk azt, hogy egy nevesített konténer. Ennek eredményeképpen felhasználható kódunkban a Control osztály (mint ősosztály) Render metódusa a gyűjtemény kódelemeinek küldéséhez. A Render metódus egy paraméterrel rendelkezik, amely egy HtmlTextWriter osztályú paraméter. Az osztály gazdag metódusgyűjteménye teszi lehetővé, hogy karakterről-karakterre írjuk kódjainkat a kimeneti HTML adatfolyamba. Annak érdekében, hogy egyedi tulajdonságokkal rendelkező osztályt készítsünk, ebből kell származtatnunk.
A HtmlTextWriter osztályból származó osztályunk létrehozásához fel kell használnunk még egy osztályt, ez pedig a TextWriter osztály, mely a System.IO névtér eleme, és a karakteres írást teszi lehetővé a legváltozatosabb célfolyamokba. Absztrakt osztály lévén funkcionalitása származtatott osztályokban specializálódik.
Származtatott HtmlTextWriter osztály létrehozásához a következőket kellett tennünk. Deklaráltunk egy osztályt MyHtmlTextWriter néven, melyet majd felhasználunk az oldal kontroljainak írásához:
public class MyHtmlTextWriter : HtmlTextWriter
{
Létrehoztuk az osztály konstruktorát úgy, hogy a kontruktor taginicializáló listájában megadtuk az alaposztály konstruktorát, így nem kellett törődnünk a TextWriter osztályból származó osztály létrehozásával. Az osztályunk is az alaposztályban megadott TextWriter-t használja:
public MyHtmlTextWriter(TextWriter writer):base(writer)
{
writer.Write("<font color=blue> A 'MyHtmlTextWriter' osztály egy példánya elkészült, használható a HTML-kód böngészőre írásához!</font>");
writer.Write("<br></br>");
writer.Write("<font color=green> A kliens-oldalon " + HttpContext.Current.Request.Browser.Platform + " platform és " + HttpContext.Current.Request.Browser.Type + " böngésző fut.</font>");
}
A konstruktorban elvégzünk néhány műveletet annak érdekében, hogy az osztály példányosításakor annak látható eredménye legyen.
A származtatott osztályban felülírtuk az ősosztály Write metódusát, hogy még egyedibb viselkedést adjunk a példány objektumunknak. Ez minden adatfolyamba íráskor tesz egy kis megjegyzést a szignifikáns kódhoz.
public override void Write(string s)
{
HttpContext.Current.Response.Write(s + "<font size=1 color=yellow><br>(SoftwareOnline)</br></font>");
}
}
A következőkben nincs más teendőnk, mint a létrehozott osztályt használni egy ASP.NET oldal kontroljainak írásához. Mindenekelőtt adunk egy referenciát a kódban felhasználandó, a Page osztály tagmetódusát képező CreateHtmlTextWriter metódusról:

CreateHtmlTextWriter
Osztály: Page
protected virtual HtmlTextWriter CreateHtmlTextWriter(
TextWriter tw
);
A Page osztályból származó osztályok esetén (mint amilyen ASP.NET oldalunk is) létrehoz és visszaad egy HtmlTextWriter objektumot, amely származtatott osztályokban a kontrolok kiírásához (ún. „Render-elés”) használható.
Paraméterek
TextWriter tw
A kiíráshoz használható absztrakt osztály, melynek metódusaival az írás történik.
Visszatérési érték
Egy HtmlTextWriter típusú objektum, melynek esetünkben saját viselkedést adtunk.
Hozzuk létre az oldal osztályát a Page osztályból származtatva. Az inicializáláshoz itt is az alaposztályt használjuk:
public class MyPage : Page
{
public MyPage():base()
{
}
A CreateHtmlTextWriter metódust használva hozzunk létre egy példányt a fent deklarált MyHtmlTextWriter osztályból:
protected override HtmlTextWriter CreateHtmlTextWriter(TextWriter writer)
{
return new MyHtmlTextWriter(writer);
}
Az oldal töltődésekor írjuk az adatfolyamba a szükséges HTML kódot a Render metódus felülírásával. Látható, hogy a saját MyHtmlTextWriter osztály Write függvénye fut, amikor a Render metódusban a paraméterben kapott HtmlTextWriter objektum meghívja azt. A művelet eredményeképpen megjelenik a szerver órájának aktuális időértéke, néhány megjegyzés kíséretében:
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<br></br>");
writer.AddAttribute("color", "red");
writer.AddAttribute("size", "4pt");
writer.RenderBeginTag(HtmlTextWriterTag.Font);
writer.Write("Az idő a szerver szerint: " + System.DateTime.Now.ToLongTimeString());
writer.RenderEndTag();
}
}