This blog has moved to http://ikhwanhayat.net

Friday, December 17, 2004

Petualangan .NET: How To Use Inheritence In ASP.NET?

Satu konsep yg paling aku gemari dalam OOP ialah "Inheritance". Inheritance dapat mengurangkan line of codes dan menggalakkan reusablity. Masalahnya dalam aku tak pasti mcm mana nak implement benda ni dalam app ASP.NET dan Visual Studio .NET .. Cara yg aku pakai sekarang macam ni, ada satu base class (class shj, takde aspx), kita namakan MyFormBase.vb, yg inherit System.Web.UI.Page. Dan kemudian satu lagi class (namakan MyForm.vb) yg inherit MyFormBase tadi, dan satu aspx (namakan MyForm.aspx) yg inherit class MyForm..

-- In MyFormBase.vb
Public Class MyFormBase
    Inherits System.Web.UI.Page

    Protected WithEvents btnButton As Button
    Protected WithEvents lblTitle As Label
    Protected WithEvents lblLabel As Label

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not (IsPostBack) Then
            lblTitle.Text = " to enter the inherited world..."
        End If
    End Sub

    Private Sub btnButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnButton.Click
        lblLabel.Text = "Hello To Inherited World! ( <-- this event handled by base class) "
    End Sub

End Class

-- In MyForm.vb
Public Class MyForm
    Inherits MyFormBase
    
    Protected WithEvents pnlCode As Panel
    Protected WithEvents lblLabel2 As Label

    Private Sub btnButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnButton.Click
        lblLabel2.Text = "(this event handled by derived class --> )"
        pnlCode.Visible = True
    End Sub
    
End Class

-- In MyForm.aspx
<%@ Page Language="vb" AutoEventWireup="false" Inherits="MyWebForm.MyForm"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>MyForm</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
      <asp:Label id="lblTitle" style="Z-INDEX: 101; LEFT: 112px; POSITION: absolute; TOP: 16px" runat="server">Title</asp:Label>
      <asp:Label id="lblLabel" style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 56px" runat="server"
        BackColor="#FFC080" Font-Bold="True"></asp:Label>
      <asp:Button id="btnButton" style="Z-INDEX: 103; LEFT: 16px; POSITION: absolute; TOP: 16px" runat="server"
        Text="Click Here"></asp:Button>
      <asp:Panel id="pnlCode" style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 8.5pt; Z-INDEX: 104; LEFT: 16px; 
        PADDING-BOTTOM: 5px; PADDING-TOP: 5px; FONT-FAMILY: courier new; POSITION: absolute; TOP: 112px"
        runat="server" Width="824px" Height="440px" BackColor="WhiteSmoke" BorderStyle="Dashed"
        BorderWidth="1px" Visible="False">
        /** long code here **/        
      </asp:Panel>
      <asp:Label id="lblLabel2" style="Z-INDEX: 105; LEFT: 16px; POSITION: absolute; TOP: 88px" runat="server"></asp:Label>
    </form>
</body>
Tapi agak sukar nak buat mcm ni sbb dlm Visual Studio .NET bila kita add a new WebForm (*.aspx), dia akan auto create class (*.aspx.vb) yg automatik akan jadi base class bagi aspx tadi. Menggunakan cara aku kat atas, aku memecahkan pertalian ni, aku buat rangkaian inheritance sendiri. (MSDN: Wb Forms Code Model). Jadi susah la sikit, file *.aspx.vb kena delete. Kenapa aku tanak pakai file ni, sebab bila guna code-behind model ni, control yg ada dalam aspx akan automatik di declare dalam code-behindnya. Sedangkan aku tanak macam ni, aku nak control tu dideclare kat base class supaya boleh aku letakkan routine2 yg dikongsi di dlm base class. Aku rasa cara aku ni ada tak betul sikit, tapi takde sapa nak tunjukkan cara yg betul ni. Kena banyak baca dan study code org lain ni. Ermmm, penatnya..

2 Comments:

At 12/17/2004 03:12:00 pm, Blogger CJ Housewife said...

aku wpon penah gune ni tp aku ingat tak ingat penah tak gune inheritance..hish...dah lupe laa..aku ade ingat skit je pon ttg class...create class laa...but dah lupe cara penggunaannye...emm..menarik nk blaja ni..tp aku takde mase laa...sibuk design screen jek..dah nk meletup...ko try bukak kat codeproject.com.byk gak coding yang best...dah terer nnti bule ajor aku...he:P

 
At 12/17/2004 03:23:00 pm, Blogger Ikhwan Hayat said...

dah terer nanti? aku dah terer dah pun skarang ni.. muahahaha (belagak siyal!)

hihihi.. part2 simple2 senang nak guna.. setakat yg ada ni ok la, takde masalah.. bila part masuk advance2 mcm caching, customizable theme (skinning), yg tuh pening2 tuh.. nak belajar pattern yg org guna utk .NET, baru boleh buat kerja cara pro..
Enterprise Solution Patterns Using Microsoft .NETp.s: entry ni sebenarnya bukan tutorial etc, tapi sebenarnya adalah *pertanyaan*.. aku dlm kebingungan nih..

 

Post a Comment

<< Home