enum Job
{
Warrior,
Mage,
Rogue
}
Player player1 = new Player(100);
player1.job = Job.Warrior;
player1.job = (Job)2;
int i = (int)Job.Warrior;
하나의 클래스는 하나의 역할만 해야한다.
이 클래스가 여러가지의 일을 하는가? 를 체크해야한다.
확장에는 개방되어있고, 수정에는 닫혀 있어야 한다.
기능 추가 할 일이 생겼을 때, 기본 코드는 최대한 수정하지 않아야한다.
왠만해서는 새로운 코드만 추가하는 것이 맞다.
protected int hp;
public int Hp { get { return hp; } set { hp = value; } }
protected는 본래 클래스 (private) + 상속받은 클래스만 사용가능하다.
프로그램(한 프로젝트)안에서만 접근이 가능하다는 뜻이다.
internal class Animal
{
protected int i;
public Animal(int _i)
{
i = _i;
}
}
internal class Cat : Animal
{
}
클래스 이름 뒤에 : Animal을 써주면 상속이 된다.
Animal클래스 안에 Bark()라는 함수가 있다.
public virtual void Bark() //가상함수
{
Console.WriteLine("짖기");
}
부모 클래스에 virtual을 붙여서 함수를 만들게되면 부모 클래스의 기능을 자식클래스에서 덮어쓰기 할 수 있다.
public override void Bark()
{
Console.WriteLine("야옹");
}
Cat클래스 내에 override해서 함수를 만들게되면 다른 형식의 함수를 만들 수 있다.
public virtual void Attack()
{
Console.WriteLine("공격");
}
animal클래스에 이런 함수가 있을 때,
public override void Attack()
{
base.Attack(); //base가 부모클래스인 animal을 뜻함
Console.WriteLine("할퀴기");
}
하게되면 animal클래스에 만들어둔 함수가 실행되고 다음 뒤에 할퀴기가 출력된다.
생성자로 cat을 만들게될 때 부모생성자에 있는 값이 필요하다.
public Cat() : base(10) //부모클래스의 생성자에 값을 넘겨주겠다.
{
}
위처럼 사용할 수 있다.
Dog is a Animal
Cat is a Animal
Sword is Weapon
기억하자.
player has a inventory
player has a weapon
using System;
namespace _260601_1
{
internal class Animal
{
protected int i;
public Animal(int _i)
{
i = _i;
}
public virtual void Bark() //가상함수
{
Console.WriteLine("짖기");
}
//부모 클래스의 기능을 자식클래스에서 덮어쓰기 할 수 있다.
public virtual void Attack()
{
Console.WriteLine("공격");
}
}
}
using System;
namespace _260601_1
{
internal class Cat : Animal
{
public override void Bark()
{
Console.WriteLine("야옹");
}
public override void Attack()
{
Console.WriteLine("할퀴기");
}
public Cat() : base(10) //부모클래스의 생성자에 값을 넘겨주겠다.
{
}
}
}
using System;
namespace _260601_1
{
internal class Dog : Animal
{
public override void Bark()
{
Console.WriteLine("멍멍");
}
public override void Attack()
{
base.Attack();
Console.WriteLine("물기");
}
public Dog() : base(10) //부모클래스의 생성자에 값을 넘겨주겠다.
{
}
}
}