私は最近 Asp.Net を学習し、C# を使用してコードを作成しました。C# を学習しているときに、多くの初心者が継承とポリモーフィズムについて特別に理解していないことがわかったので、この例を作成しました。
例
は非常に単純です。
<%@ ページ言語="C#" ContentType="text/html" ResponseEncoding="gb2312" Src="profile2.cs" %>
<%@ インポート名前空間 = "shai" %>
<html>
<頭>
<スタイル>
div{font:Arial、Helvetica、サンセリフ;
背景色:#cccccc;
境界線の色:黒;
境界線の幅:1;
境界線のスタイル:実線;
パディング:10,10,10,10;
}
</スタイル>
<script language="c#" runat="server">
public void Page_Load(オブジェクト送信者,EventArgs e)
{
プロファイル プロファイル = 新しいプロファイル();
message.InnerHtml += "<u>プロファイル クラス</u><br>";
message.InnerHtml += "名:"+profile.getFirstname()+"<br>";
message.InnerHtml += "姓:"+profile.getLastname()+"<br>";
message.InnerHtml += "電話:"+profile.getPhonenumber()+"<br><br>";
プロファイル.save();
ExtendedProfile 拡張プロファイル = 新しい ExtendedProfile();
message.InnerHtml += "<u>拡張プロファイル クラス</u></br>";
message.InnerHtml += "名:"+profile.getFirstname()+"<br>";
message.InnerHtml += "姓:"+profile.getLastname()+"<br>";
message.InnerHtml += "電話:"+extendedprofile.getPhonenumber()+"<br>";
message.InnerHtml += "Address1:"+extendedprofile.getAddress1()+"<br>";
message.InnerHtml += "Address2:"+extendedprofile.getAddress2()+"<br>";
message.InnerHtml += "都市:"+extendedprofile.getCity()+"<br>";
message.InnerHtml += "状態:"+extendedprofile.getState()+"<br>";
message.InnerHtml += "Postal:"+extendedprofile.getPostal()+"<br>";
message.InnerHtml += "説明:"+extendedprofile.getDescription()+"<br>";
拡張プロファイル.save();
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<タイトル></タイトル>
</head>
<body style="font:Arial、Helvetica、sans-serif">
<b><h3>単純な継承/ポリモーフィズムの例</h3></b><br><br>
オブジェクト出力:<br>
<br>
<div id="メッセージ" runat="サーバー" />
</body>
</html>
クラス定義ファイル profile2.cs
システムを使用する;
System.IO を使用します。
System.Xml を使用します。
名前空間シャイ //名前空間シャイ
{
interface ISaveData //Profile の基本クラスとして継承されるインターフェイス ISaveData を定義します。その多態性の特性により、
{ //異なるクラスがメソッドを呼び出して変更する
無効保存();
}
public class Profile:ISaveData //クラス プロファイルを定義
{
protected string _firstname; // _firstname、_lastname、phonenumber という 3 つの属性が含まれます。
保護された文字列 _lastname;
保護された文字列 _phonenumber;
public Profile() //プロパティの初期値を定義します
{
_firstname = "サイディ";
_lastname = "チェン";
_電話番号 = "(010)88716990";
}
public string getPhonenumber() //Profile クラスのメソッド getPhonenumber()
{
_電話番号を返す;
}
public virtual void setPhonenumber(string 電話番号)
{
_電話番号 = 電話番号;
}
public string getFirstname() //Profile クラスのメソッド getFirstname()
{
_firstname を返します。
}
public void setFirstname(string firstname)
{
_firstname = 名;
}
public string getLastname() //Profile クラスのメソッド getLastname()
{
_姓を返します;
}
public void setLastname(string lastname)
{
_lastname = 姓;
}
public virtual void save() // ISaveData インターフェースの save() メソッドを呼び出します
{
//データをテキスト形式で保存
FileStream fs = new FileStream("D:\myweb2\profile2.txt",FileMode.Create,FileAccess.Write);
StreamWriter sw = 新しい StreamWriter(fs);
sw.WriteLine("名:"+_firstname.ToString());
sw.WriteLine("姓:"+_lastname.ToString());
sw.WriteLine("電話:"+_電話番号.ToString());
sw.Flush();
sw.Close();
fs.Close();
}
}
パブリック クラス ExtendedProfile:Profile は、Profile のメソッドを継承できる Profile サブクラス ExtendedProfile を作成します。
{
protected string _address1; // サブクラス ExtendedProfile の属性
保護された文字列 _address2;
保護された文字列 _city;
保護された文字列 _state;
保護された文字列 _postal;
保護された文字列 _description;
public ExtendedProfile() //サブクラスExtendedProfileの属性の初期値
{
_address1 = "清華大学";
_address2 = "清華大学物理研究所";
_city = "北京";
_state = "北京";
_postal = "100024";
_description = "教授";
}
public override void setPhonenumber(string Telephonenumber) //クラス Profile の setPhonenumber() メソッドを継承します
{ //setPhonenumber() メソッドのオーバーロード
_電話番号 = 電話番号;
}
public string getAddress1() //サブクラス ExtendedProfile のメソッド getAddress1() など
{
_address1 を返します;
}
パブリック文字列 getAddress2()
{
_address2 を返します;
}
public void setAddress(文字列アドレス1,文字列アドレス2)
{
_アドレス1 = アドレス1;
_アドレス2 = アドレス2;
}
パブリック文字列 getCity()
{
_city を返す;
}
public void setCity(string city)
{
_city = 都市;
}
パブリック文字列 getState()
{
_state を返す;
}
public void setState(文字列状態)
{
_state = 状態;
}
パブリック文字列 getPostal()
{
_postal を返す;
}
public void setPostal(string postal)
{
_postal = 郵便;
}
パブリック文字列 getDescription()
{
説明を返します;
}
public void setDescription(文字列の説明)
{
_description = 説明;
}
public override void save() //ポリモーフィズムのため、save() メソッドのオーバーロードであるインターフェイス ISaveData() 内のメソッド save() を呼び出します。
{ //サブクラス ExtendedProfile は save() メソッドをカスタマイズおよび変更できます
string _document = "d:\myweb2\saidy.xml";
XmlTextWriter Writer = null; //Xml ファイルとして保存します。
試す
{
ライター = 新しい XmlTextWriter(_document,null);
Writer.Formatting = Formatting.Indented;
Writer.WriteStartDocument(false);
Writer.WriteDocType("Profile",null,null,null); //<!DOCTYPE プロファイル> を示します
Writer.WriteStartElement("Profile"); //ルート要素を生成する
Writer.WriteElementString("firstname",_firstname) // サブ要素 <firstname>_firstname</firstname> を生成します。
Writer.WriteElementString("姓",_姓);
Writer.WriteElementString("電話番号",_電話番号);
Writer.WriteElementString("アドレス1",_アドレス1);
Writer.WriteElementString("アドレス2",_アドレス2);
Writer.WriteElementString("都市",_city);
Writer.WriteElementString("状態",_state);
Writer.WriteElementString("郵便",_postal);
Writer.WriteEndElement();
Writer.Flush();
Writer.Close();
}
catch(例外 ee)
{
Console.WriteLine("例外:{0}",ee.ToString());
}
}
}
}