App 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class App
{
//생성자 메서드
public App()
{
//업캐스팅
IAttackable marine = new Marine();
marine.Attack();
//다운캐스팅
Marine m = (Marine)marine;
m.StimPack();
}
}
}
Marine 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
public class Marine : TerranUnit, IAttackable
{
//멤버변수
//생성자메서드
public Marine()
{
}
//멤버메서드
public void Attack()
{
Console.WriteLine("총으로 공격합니다.");
}
public void StimPack()
{
}
}
}
Firebat 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Firebat : TerranUnit, IAttackable
{
//멤버변수
//생성자메서드
public Firebat()
{
}
//멤버메서드
public void Attack()
{
Console.WriteLine("화염방사기로 공격합니다.");
}
}
}
Vector2 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
//구조체 : 값형식
//클래스랑 똑같지만
//구조체 형식은 다른 클래스 또는 구조체 형식에서 상속할 수 없으며, 클래스의 기본이 될 수 없습니다.
// 매개 변수가 없는 생성자를 선언할 수 없습니다.
//구조체 형식의 생성자가 형식의 모든 instance 필드를 초기화해야 합니다.
//적은 양의 데이터
//일회용 사용
public struct Vector2
{
public int x;
public int y;
//생성자
public Vector2(int x, int y)
{
this.x = x;
this.y = y;
}
}
}
IAttackable 인터페이스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
public interface IAttackable
{
//기능 정의
void Attack();
}
}
추상 클래스는 인스턴스화 할 수 없습니다. [new 사용불가]
봉인 클래스 = sealed 기본 클래스 사용 불가
'C#프로그래밍' 카테고리의 다른 글
배열 (정수형, 문자형, foreach) (0) | 2023.07.24 |
---|---|
속성 (0) | 2023.07.24 |
업캐스팅과 다운캐스팅 (0) | 2023.07.24 |
생성자 체이닝 (0) | 2023.07.24 |
virtual, override, overload, base (0) | 2023.07.24 |