1. abstract, interface, virtual
1) abstract
abstractλ νμ ν΄λμ€μκ² κ³΅ν΅μ μΈ μ μλ₯Ό μ 곡ν¨κ³Ό λμμ νμ ν΄λμ€μ μ¬μ©λ κΈ°λ₯μ κ°μ μ μΌλ‘ μ¬μ μν¨μ μλ€.
- abstract ν€μλλ‘ μ μν λ©μλλ μμ±μ λ³Έλ¬Έμ μ μν μ μλ€.
- μΌλ° λ©μλλ μμ±μ μ μν μ μλ€.
- μΈμ€ν΄μ€νν μ μλ€.
abstract class Animal
{
public string name;
public abstract void Speak();
public void Sleep()
{
Console.WriteLine("Zzzzz...");
}
}
class Dog : Animal
{
public Dog(string name)
{
this.name = name;
}
public override void Speak()
{
Console.WriteLine($"hello I'm {name} !!");
}
}
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog("Doggy");
dog.Speak(); // hello I'm Doggy !!
dog.Sleep(); // Zzzzz...
}
}
2) interface
interfaceλ μμμ κ°λ λ³΄λ¨ κΈ°λ₯μ νμ₯νλ κ°λ μΌλ‘ κ°μ₯ λμ μΆμμ±μ μ 곡νλ€.
- λ©μλ, νλ‘νΌν° μΈλ±μλ§ κ°μ§ μ μλ€.
- abstractκ° μλ νλλ μ μν μ μλ€. μ¦, κ°μ μ μΌλ‘ μ¬μ μκ° νμνλ€.
- μ κ·Ό μ νμλ₯Ό μ¬μ©ν μ μμΌλ©° λͺ¨λ νλλ publicμ΄ μ μ©λλ€.
- λ€μ€ μμμ΄ κ°λ₯νλ€.
abstract class Animal
{
public abstract void Speak();
}
interface IWalk
{
void Walk();
}
class Dog : Animal, IWalk
{
public override void Speak()
{
Console.WriteLine("I'm Dog !!");
}
public void Walk()
{
Console.WriteLine("Dog : λ€ λ°λ‘ μκΈ μκΈ");
}
}
class Human : IWalk
{
public void Walk()
{
Console.WriteLine("Human : λ λ°λ‘ λλ²
λλ²
");
}
}
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
dog.Speak(); // I'm Dog !!
dog.Walk(); // Dog : λ€ λ°λ‘ μκΈ μκΈ
Human human = new Human();
human.Walk(); // Human : λ λ°λ‘ λλ²
λλ²
}
}
3) virtual
virtualμ μ¬μ μν μ μμ§λ§ νμλ μλλ©° κ·Έ μ체λ‘λ μλ²½ν κΈ°λ₯μ μ 곡νλ€.
class Animal
{
public virtual void Speak()
{
Console.WriteLine("I'm Creature");
}
}
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("I'm Dog!");
}
}
class Cat : Animal
{
}
class Program
{
static void Main(string[] args)
{
Animal animal = new Animal();
Dog dog = new Dog();
Cat cat = new Cat();
animal.Speak(); // I'm Creature
dog.Speak(); // I'm Dog!
cat.Speak(); // I'm Creature
}
}
2. override, new
virtual method(κ°μ λ©μλ)λ abstract method(μΆμ λ©μλ)μ λ¬λ¦¬ μ¬μ μ μ¬λΆλ μ νμ΄λ€. κ·Έλμ κ°μ λ©μλκ° ν¬ν¨λ ν΄λμ€λ₯Ό μμνμ¬ μμ ν΄λμ€μμ μ¬μ μν λ, override, new λ νμ μλ‘ μ μν μ μλ€. μΆμ λ©μλλ overrideλ§ κ°λ₯νλ€.
- overrideλ μμ μ΄ μμλ°μ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μ νλ κ²μ΄λ€.
- newλ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν 무μνκ³ λμΌν μ΄λ¦μ μλ‘μ΄ λ©μλλ₯Ό λ§λλ κ²μ΄λ€.