0317 인터페이스/Virtual
2021. 3. 17. 14:29ㆍC#/수업내용
관련 기능 그룹에 대한 정의>>만<< 포함되어 있다.
여러 소스의 동작을 클래스에 포함할 수 있다.
> 클래스에서 여러 상속을 지원하지 않기 때문에
> 구조체는 다른 구조체를 상속할 수 없기 때문에
interface I인터페이스 이름(형용사)<T>
{ bool 인터페이스(T obj); }
인터페이스에서 상속받은 클래스는 반드시 메서드를 구현해야하고, 클래스에서는 메서드를 사용할 수 있다.
직접 인터페이스 인스턴스화 할 수 없다. (new (); 사용 불가)
클래스는 여러 인터페이스를 구현할 수 있다.
클래스는 기본 클래스를 상속할 수 있고, 하나 이상의 인터페이스를 제공할 수 있다.
Virtual
파생 클래스에서 재정의할 수 있다. (더 구체적으로)
Override 메서드를 확장하거나 수정
virtual을 부모 클래스에서 쓰고 자식 클래스에서 override
public class ZergUnit
{
public ZergUnit()
{
Console.WriteLine("저그 유닛 생성자");
}
public virtual void Attack()
{
Console.WriteLine("공격 했습니다.");
}
}
interface IBurrow
{
void Burrow();
}
public class Lurker :ZergUnit,IBurrow
{
public Lurker()
{
Console.WriteLine("Lucker 생성자");
}
public override void Attack()
{
Console.WriteLine("가시로 공격했습니다.");
}
public void Burrow()
{
Console.WriteLine("럴커가 버로우 했습니다.");
}
}
public class Ultralisk : ZergUnit
{
public Ultralisk()
{
Console.WriteLine("울트라리스크가 생성 되었습니다.");
}
public override void Attack()
{
Console.WriteLine("뿔로 공격했습니다.");
}
}
public App()
{
Lurker lurker = new Lurker();
lurker.Burrow();
lurker.Attack();
Ultralisk ultralisk = new Ultralisk();
ultralisk.Attack();
}
public class TerranUnit
{
public TerranUnit()
{
Console.WriteLine("테란 유닛 생성자");
}
public virtual void Attack()
{
Console.WriteLine("공격 했습니다.");
}
}
interface ITransparent
{
void MakeTransparent();
}
public class Valkyrie:TerranUnit
{
public Valkyrie()
{
Console.WriteLine("발키리 생성자");
}
public override void Attack()
{
Console.WriteLine("미사일로 공격합니다.");
}
}
public class Wraith :TerranUnit,ITransparent
{
public Wraith()
{
Console.WriteLine("레이스 생성자");
}
public override void Attack()
{
Console.WriteLine("레이저로 공격합니다.");
}
public void MakeTransparent()
{
Console.WriteLine("레이스가 클로킹 했습니다.");
}
}
public class App
{
public App()
{
Valkyrie valkyrie = new Valkyrie();
valkyrie.Attack();
Wraith wraith = new Wraith();
wraith.Attack();
wraith.MakeTransparent();
}
}
public class ProtossUnit
{
public ProtossUnit()
{
Console.WriteLine("프로토스 유닛 생성자");
}
public void Move()
{
Console.WriteLine("이동합니다.");
}
}
interface ITransparent
{
void MakeTransparent();
}
interface IFly
{
void Fly();
}
public class Zealot:ProtossUnit
{
public Zealot()
{
Console.WriteLine("질럿 생성자");
}
}
public class Observer:ProtossUnit,ITransparent,IFly
{
public Observer()
{
Console.WriteLine("옵져버 생성자");
}
public void Fly()
{
Console.WriteLine("옵져버는 공중 유닛");
}
public void MakeTransparent()
{
Console.WriteLine("옵져버가 클로킹 합니다.");
}
}
public class DarkTemplar:ProtossUnit,ITransparent
{
public DarkTemplar()
{
Console.WriteLine("다크템플러 생성자");
}
public void MakeTransparent()
{
Console.WriteLine("다크템플러가 클로킹 합니다.");
}
}
public class App
{
public App()
{
Zealot zealot = new Zealot();
zealot.Move();
Observer observer = new Observer();
observer.Fly();
observer.MakeTransparent();
DarkTemplar darkTemplar = new DarkTemplar();
darkTemplar.Move();
darkTemplar.MakeTransparent();
}
}
public class Cookie
{
public Cookie()
{
Console.WriteLine("쿠키 생성자");
}
public void Run()
{
Console.WriteLine("쿠키가 달립니다.");
}
}
interface IDefense
{
void Defense();
}
interface IAttack
{
void Attack();
}
interface IHeal
{
void Heal();
}
public class HerbCookie:Cookie,IHeal
{
public HerbCookie()
{
Console.WriteLine("허브맛 쿠키 생성자");
}
public void Heal()
{
Console.WriteLine("힐링용 쿠키");
}
}
public class EspressoCookie:Cookie,IAttack
{
public EspressoCookie()
{
Console.WriteLine("에스프레소맛 쿠키 생성자");
}
public void Attack()
{
Console.WriteLine("공격형 쿠키");
}
}
public class MilkCookie:Cookie,IDefense
{
public MilkCookie()
{
Console.WriteLine("우유맛 쿠키 생성자");
}
public void Defense()
{
Console.WriteLine("방어형 쿠키");
}
}
public class App
{
public App()
{
HerbCookie herbCookie = new HerbCookie();
herbCookie.Run();
herbCookie.Heal();
Console.WriteLine();
EspressoCookie espressoCookie = new EspressoCookie();
espressoCookie.Run();
espressoCookie.Attack();
Console.WriteLine();
MilkCookie milkCookie = new MilkCookie();
milkCookie.Run();
milkCookie.Defense();
}
}
'C# > 수업내용' 카테고리의 다른 글
0317 Property 속성/Stack 클래스/Queue 큐 (0) | 2021.03.17 |
---|---|
0317 Abstract (0) | 2021.03.17 |
0317 배열 복습★★★★ (0) | 2021.03.17 |
0316 Collection> Dictionary (0) | 2021.03.16 |
0316 ArrayList/제너릭 클래스 (0) | 2021.03.16 |