최근 Asp.Net을 배워서 C#을 사용해 코드를 작성했는데, C#을 배우다 보면 상속과 다형성에 대한 특별한 이해가 없는 초보자들이 많다는 것을 알게 되어서 이 예제를 만들어 보았습니다. 예제는 매우 간단합니다.
Page FileTestProfileClass2.aspx
<%@ 페이지 언어="C#" ContentType="text/html" ResponseEncoding="gb2312" Src="profile2.cs" %>
<%@ Import Namespace="shai" %>
<html>
<머리>
<스타일>
div{글꼴:Arial, Helvetica, 산세리프;
배경색:#cccccc;
테두리 색상:검정색;
테두리 너비:1;
테두리 스타일:단색;
패딩:10,10,10,10;
}
</style>
<스크립트 언어="c#" runat="서버">
공개 무효 Page_Load(개체 전송자,EventArgs e)
{
프로필 프로필 = new Profile();
message.InnerHtml += "<u>프로필 클래스</u><br>";
message.InnerHtml += "이름:"+profile.getFirstname()+"<br>";
message.InnerHtml += "성:"+profile.getLastname()+"<br>";
message.InnerHtml += "전화번호:"+profile.getPhonenumber()+"<br><br>";
프로필.저장();
ExtendedProfile Extendedprofile = 새로운 ExtendedProfile();
message.InnerHtml += "<u>확장 프로필 클래스</u></br>";
message.InnerHtml += "이름:"+profile.getFirstname()+"<br>";
message.InnerHtml += "성:"+profile.getLastname()+"<br>";
message.InnerHtml += "전화:"+extendedprofile.getPhonenumber()+"<br>";
message.InnerHtml += "주소1:"+extendedprofile.getAddress1()+"<br>";
message.InnerHtml += "주소2:"+extendedprofile.getAddress2()+"<br>";
message.InnerHtml += "도시:"+extendedprofile.getCity()+"<br>";
message.InnerHtml += "상태:"+extendedprofile.getState()+"<br>";
message.InnerHtml += "우편:"+extendedprofile.getPostal()+"<br>";
message.InnerHtml += "설명:"+extendedprofile.getDescription()+"<br>";
확장된 프로필.저장();
}
</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="message" runat="서버" />
</body>
</html>
클래스 정의 파일 profile2.cs
시스템 사용;
System.IO 사용;
System.Xml 사용;
네임스페이스 shai //네임스페이스 shai
{
인터페이스 ISaveData //다형성 특성으로 인해 Profile의 기본 클래스로 상속되는 ISaveData 인터페이스를 정의합니다.
{ //다른 클래스가 메서드를 호출하고 수정합니다.
무효 저장();
}
public class Profile:ISaveData //클래스 프로필 정의
{
protected string _firstname; //3개의 속성, 즉 _firstname, _lastname, 전화번호를 포함합니다.
보호된 문자열 _lastname;
보호된 문자열 _phonenumber;
public Profile() //속성의 초기값을 정의합니다.
{
_firstname = "사이디";
_lastname = "첸";
_phonenumber = "(010)88716990";
}
공개 문자열 getPhonenumber() //Profile 클래스의 메소드 getPhonenumber()
{
_전화번호 반환;
}
public virtual void setPhonenumber(문자열 전화번호)
{
_phonenumber = 전화번호;
}
공개 문자열 getFirstname() //Profile 클래스의 메소드 getFirstname()
{
_이름을 반환합니다.
}
공개 무효 setFirstname(문자열 이름)
{
_이름 = 이름;
}
공개 문자열 getLastname() //Profile 클래스의 getLastname() 메소드
{
_성 반환;
}
공개 무효 setLastname(문자열 성)
{
_성 = 성;
}
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("전화:"+_phonenumber.ToString());
sw.플러시();
sw.닫기();
fs.닫기();
}
}
public class 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(stringphonenumber) //Profile 클래스의 setPhonenumber() 메서드 상속
{ //setPhonenumber() 메소드 오버로딩
_phonenumber = 전화번호;
}
공개 문자열 getAddress1() //하위 클래스 ExtendedProfile의 getAddress1() 메소드 등
{
_address1을 반환합니다.
}
공개 문자열 getAddress2()
{
_address2를 반환합니다.
}
공개 무효 setAddress(문자열 주소1,문자열 주소2)
{
_address1 = 주소1;
_주소2 = 주소2;
}
공개 문자열 getCity()
{
_city를 반환합니다.
}
공공 무효 setCity(문자열 도시)
{
_city = 도시;
}
공개 문자열 getState()
{
_state를 반환합니다.
}
공개 무효 setState(문자열 상태)
{
_상태 = 상태;
}
공개 문자열 getPostal()
{
_우편물 반환;
}
공공 무효 setPostal(문자열 우편)
{
_postal = 우편;
}
공개 문자열 getDescription()
{
_설명을 반환합니다.
}
공개 무효 setDescription(문자열 설명)
{
_설명 = 설명;
}
public override void save() // 다형성으로 인해 save() 메서드의 오버로드인 ISaveData() 인터페이스에서 save() 메서드를 호출합니다.
{ //하위 클래스 ExtendedProfile은 save() 메서드를 사용자 정의하고 수정할 수 있습니다.
string _document = "d:\myweb2\saidy.xml";
XmlTextWriter 작가 = null; //Xml 파일로 저장
노력하다
{
작가 = 새로운 XmlTextWriter(_document,null);
작가.포맷팅 = 포맷팅.들여쓰기;
작가.WriteStartDocument(false);
writer.WriteDocType("Profile",null,null,null); // <!DOCTYPE 프로필>을 나타냅니다.
writer.WriteStartElement("Profile"); //루트 요소 생성
writer.WriteElementString("firstname",_firstname); //하위 요소 <firstname>_firstname</firstname> 생성
writer.WriteElementString("성",_lastname);
작가.WriteElementString("phonenumber",_phonenumber);
작가.WriteElementString("address1",_address1);
작가.WriteElementString("address2",_address2);
작가.WriteElementString("도시",_city);
작가.WriteElementString("state",_state);
작가.WriteElementString("우편",_postal);
작가.WriteEndElement();
작가.Flush();
작가.닫기();
}
잡기(예외 ee)
{
Console.WriteLine("예외:{0}",ee.ToString());
}
}
}
}