C# 리드 변환 지침
문서 목록
장점
1. 코드의 중용성을 높이고 서브클래스는 부류의 방법과 속성을 가진다.2. 코드의 확장성을 높이고 서브클래스는 부류와 비슷하지만 부류와 달리 자신의 특성을 보존한다.
유형 변환
변형 표시: 상위 객체를 하위 클래스 유형으로 변환하려면 강제 변환을 사용해야 합니다.
case1
Person p = new Person();
Person p1 = new Student ();// ,
case2
Person p = new Person();
Student stu = (Student)p;//
stu.SayHello();
case3
Person p = new Teacher();
Teacher t = (Teacher)p;//
t.SayHi();
암시적 변환: 하위 클래스 대상을 부모 클래스로 변환하면 바로 변환할 수 있습니다
Student stu = new Student();//
Person p = stu;
p.Show();
키워드 is/as 변환:
is 변환: bool 값을 되돌려줍니다.true는 변환할 수 있고false는 변환할 수 없습니다.as변환: as변환을 사용할 때 변환이 불가능할 경우 이상을 보고하지 않으며 반환값은 Null입니다.호출 방법에 이상이 있습니다.
// is
Person p = new Student();//
bool result = p is Teacher;
if(result )
{
Teacher t=(Teacher)p;
}
else
{
Console.WriteLine(" ");
}
Console.ReadKey();
// as
Teacher t = new Teacher();//
Person p = t as Person;
p.PerShow();
Person p = new Teacher();//
Teacher t = p as Teacher;
t.TeaShow();
키워드 is 변환 연습
무작위 생성 클래스, 생성 클래스를 추출하는 방법.
static void Main(string[] args)
{
Person[] per = new Person[10];//
Random r = new Random();//
for (int i = 0; i < per.Length ; i++)
{
int num = r.Next(1, 7);
switch (num)//
{
case 1: per[i]=new Teacher();break;
case 2: per[i] = new Student();break;
case 3: per[i] = new ShuaiGuo();break;
case 4: per[i] = new MeiNv();break;
case 5: per[i] = new YeShou();break;
case 6: per[i] = new Person();break;
}
}
for (int i = 0; i < per.Length ; i++)
{
SayType(per[i]);
}
Console.ReadKey();
}
public static void SayType(Person p)// :
{
if(p is Teacher)
{
((Teacher)p).PerShow();
}
else if(p is Student )
{
((Student)p).StuShow();
}
else if(p is ShuaiGuo)
{
((ShuaiGuo)p).shuaiShow();
}
else if(p is MeiNv)
{
((MeiNv)p).MeiShow();
}
else if(p is YeShou)
{
((YeShou)p).YeShow();
}
else if (p is Person)
{
((Person)p).PerShow();
}
}