[原创]给Asp.Net初学者的关于继承和多态性的例子

本人学Asp.Net不久,用的是C#写代码,在学习C#中发现很多初学者对继承和多态性不是特别的了解,因此作了这个例子,希望对您有所帮助,例子很简单

页面文件TestProfileClass2.aspx

1@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" Src="profile2.cs" 
1@ Import Namespace="shai" 
 1<html>
 2<head>
 3<style>   
 4div{font:Arial, Helvetica, sans-serif;   
 5background-color:#cccccc;   
 6border-color:black;   
 7border-width:1;   
 8border-style:solid;   
 9padding:10,10,10,10;   
10}   
11</style>
12<script language="c#" runat="server">   
13public void Page_Load(Object sender,EventArgs e)   
14{   
15Profile profile = new Profile();   
16message.InnerHtml += "<u>Profile Class</u><br>";   
17message.InnerHtml += "Firstname:"+profile.getFirstname()+"<br>";   
18message.InnerHtml += "Lastname:"+profile.getLastname()+"<br>";   
19message.InnerHtml += "Phone:"+profile.getPhonenumber()+"<br><br>";   
20  
21profile.save();   
22  
23ExtendedProfile extendedprofile = new ExtendedProfile();   
24message.InnerHtml += "<u>ExtendedProfile Class</u></br>";   
25message.InnerHtml += "Firstname:"+profile.getFirstname()+"<br>";   
26message.InnerHtml += "Lastname:"+profile.getLastname()+"<br>";   
27message.InnerHtml += "Phone:"+extendedprofile.getPhonenumber()+"<br>";   
28message.InnerHtml += "Address1:"+extendedprofile.getAddress1()+"<br>";   
29message.InnerHtml += "Address2:"+extendedprofile.getAddress2()+"<br>";   
30message.InnerHtml += "City:"+extendedprofile.getCity()+"<br>";   
31message.InnerHtml += "State:"+extendedprofile.getState()+"<br>";   
32message.InnerHtml += "Postal:"+extendedprofile.getPostal()+"<br>";   
33message.InnerHtml += "Description:"+extendedprofile.getDescription()+"<br>";   
34  
35extendedprofile.save();   
36}   
37</script>
38<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
39<title></title>
40</head>
41<body style="font:Arial, Helvetica, sans-serif ">
42<b><h3>简单的继承/多态例子</h3></b><br/><br/>   
43object output:<br/>
44<br/>
45<div id="message" runat="server"></div>
46</body>
47</html>

类定义文件profile2.cs
using System;
using System.IO;
using System.Xml;
namespace shai //名称空间shai
{
interface ISaveData //定义一个接口ISaveData,他作为Profile的基类被继承,由于其有多态性的特点,可以被
{ //不同类调用其中的方法,并修改
void save();
}

public class Profile:ISaveData //定义类Profile
{
protected string _firstname; //里面包含三个属性,分别为_firstname、_lastname、phonenumber
protected string _lastname;
protected string _phonenumber;

public Profile() //为属性定义其中的初始值
{
_firstname = "Saidy";
_lastname = "Chen";
_phonenumber = "(010)88716990";
}

public string getPhonenumber() //Profile类中的方法getPhonenumber()
{
return _phonenumber;
}
public virtual void setPhonenumber(string phonenumber)
{
_phonenumber = phonenumber;
}

public string getFirstname() //Profile类中的方法getFirstname()
{
return _firstname;
}
public void setFirstname(string firstname)
{
_firstname = firstname;
}

public string getLastname() //Profile类中的方法getLastname()
{
return _lastname;
}
public void setLastname(string lastname)
{
_lastname = lastname;
}

public virtual void save() //调用ISaveData接口的save()方法
{
//保存数据为Text格式
FileStream fs = new FileStream("D:\\myweb2\\profile2.txt",FileMode.Create,FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Firstname:"+_firstname.ToString());
sw.WriteLine("Lastname:"+_lastname.ToString());
sw.WriteLine("Phone:"+_phonenumber.ToString());
sw.Flush();
sw.Close();
fs.Close();
}
}

public class ExtendedProfile:Profile 建立Profile子类ExtendedProfile,他可以继承Profile中的方法
{
protected string _address1; //子类ExtendedProfile的属性
protected string _address2;
protected string _city;
protected string _state;
protected string _postal;
protected string _description;

public ExtendedProfile() //子类ExtendedProfile中属性的初始值
{
_address1 = "清华大学";
_address2 = "清华大学物理实验室";
_city = "北京";
_state = "北京";
_postal = "100024";
_description = "教授";
}

public override void setPhonenumber(string phonenumber) //继承类Profile中的setPhonenumber()方法
{ //setPhonenumber()方法的重载
_phonenumber = phonenumber;
}

public string getAddress1() //子类ExtendedProfile中的方法getAddress1(),以下类推
{
return _address1;
}
public string getAddress2()
{
return _address2;
}
public void setAddress(string address1,string address2)
{
_address1 = address1;
_address2 = address2;
}

public string getCity()
{
return _city;
}
public void setCity(string city)
{
_city = city;
}

public string getState()
{
return _state;
}
public void setState(string state)
{
_state = state;
}

public string getPostal()
{
return _postal;
}
public void setPostal(string postal)
{
_postal = postal;
}

public string getDescription()
{
return _description;
}
public void setDescription(string description)
{
_description = description;
}

public override void save() //调用接口ISaveData()中的方法save(),save()方法的重载,由于多态性
{ //子类ExtendedProfile可以自定义并修改save()方法
string _document = "d:\\myweb2\\saidy.xml";
XmlTextWriter writer = null; //保存为一个Xml文件
try
{
writer = new XmlTextWriter(_document,null);
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument(false);
writer.WriteDocType("Profile",null,null,null); //表示

writer.WriteStartElement("Profile"); //生成根元素
writer.WriteElementString("firstname",_firstname); //生成子元素

1<firstname>_firstname</firstname>

writer.WriteElementString("lastname",_lastname);
writer.WriteElementString("phonenumber",_phonenumber);
writer.WriteElementString("address1",_address1);
writer.WriteElementString("address2",_address2);
writer.WriteElementString("city",_city);
writer.WriteElementString("state",_state);
writer.WriteElementString("postal",_postal);
writer.WriteEndElement();
writer.Flush();
writer.Close();
}
catch(Exception ee)
{
Console.WriteLine("Exception:{0}",ee.ToString());
}
}
}
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus