给Asp.Net初学者的关于继承和多态性的例子
页面文件TestProfileClass2.aspx
<%@ Page Language=\"C#\" ContentType=\"text/html\" ResponseEncoding=\"gb2312\" Src=\"profile2.cs\" %>
<%@ Import Namespace=\"shai\" %>
<html>
<head>
<style>
div{font:Arial, Helvetica, sans-serif;
background-color:#cccccc;
border-color:black;
border-width:1;
border-style:solid;
padding:10,10,10,10;
}
</style>
<script language=\"c#\" runat=\"server\">
public void Page_Load(Object sender,EventArgs e)
{
Profile profile = new Profile();
message.InnerHtml += \"<u>Profile Class</u><br>\";
message.InnerHtml += \"Firstname:\"+profile.getFirstname()+\"<br>\";
message.InnerHtml += \"Lastname:\"+profile.getLastname()+\"<br>\";
message.InnerHtml += \"Phone:\"+profile.getPhonenumber()+\"<br><br>\";
profile.save();
ExtendedProfile extendedprofile = new ExtendedProfile();
message.InnerHtml += \"<u>ExtendedProfile Class</u></br>\";
message.InnerHtml += \"Firstname:\"+profile.getFirstname()+\"<br>\";
message.InnerHtml += \"Lastname:\"+profile.getLastname()+\"<br>\";
message.InnerHtml += \"Phone:\"+extendedprofile.getPhonenumber()+\"<br>\";
message.InnerHtml += \"Address1:\"+extendedprofile.getAddress1()+\"<br>\";
message.InnerHtml += \"Address2:\"+extendedprofile.getAddress2()+\"<br>\";
message.InnerHtml += \"City:\"+extendedprofile.getCity()+\"<br>\";
message.InnerHtml += \"State:\"+extendedprofile.getState()+\"<br>\";
message.InnerHtml += \"Postal:\"+extendedprofile.getPostal()+\"<br>\";
message.InnerHtml += \"Description:\"+extendedprofile.getDescription()+\"<br>\";
extendedprofile.save();
}
</script>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">
<title></title>
</head>
<body style=\"font:Arial, Helvetica, sans-serif \">
<b><h3>简单的继承/多态例子</h3></b><br><br>
object output:<br>
<br>
<div id=\"message\" runat=\"server\" />
</body>
</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); //表示<!DOCTYPE Profile>
writer.WriteStartElement(\"Profile\"); //生成根元素
writer.WriteElementString(\"firstname\",_firstname); //生成子元素 <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());
}
}
}
}
- 上一篇: 也说C#实现对Word文件读写
- 下一篇: 用asp.net还原与恢复sqlserver数据库