π¦ Interface, Abstract, Virtual
- ν¨ν΄ μ± μ 곡λΆνλλ° μμ κ°λ μ΄ μ‘νμ§μμ μ΄ν΄κ° μ΄λ €μ μ
- λλ¦λλ‘ μ΄ν΄ν κ²μ μ 리ν¨
π¦ Interface
π§ Document
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/interface
interface - C# Reference
:::no-loc text=interface::: (C# Reference)
docs.microsoft.com
- μΈν°νμ΄μ€
- ꡬνν΄μΌν λ©€λ²λ€μ μ μΈνλ κ²
- μΈν°νμ΄μ€ μμμ ꡬν λΆκ°
- μΈν°νμ΄μ€ μμ μΈ μ μλ λ©€λ²λ μ΄ 4κ°
- Methods
- Properties
- Indexers // μΈλ±μλ₯Ό 곡λΆν ν μμ±ν μμ
- Events
- μΈν°νμ΄μ€λ₯Ό μμλ°μ ν΄λμ€λ κΌ λͺ¨λ λ©€λ²λ₯Ό ꡬνν΄μΌ ν¨
- λ€μ€μμ κ°λ₯ : μΈν°νμ΄μ€λ 무μ νμΌλ‘ μμλ°μ μ μμ
π§ Methods
interface ICharacter
{
// Method
void Fire();
void Move();
void Jump();
}
- μΈν°νμ΄μ€ μμ±


- μΈν°νμ΄μ€λ₯Ό μμλ°μ ꡬνν ν΄λμ€
- λ¨μΆν€ : Ctrl + .
- μΈν°νμ΄μ€ ꡬν ν΄λ¦
π§ Properties
interface ICharacter
{
// Method
void Fire();
void Move();
void Jump();
// Properties
int Score { get; set; }
}
class player : ICharacter
{
public int Score { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public void Fire()
{
throw new System.NotImplementedException();
}
public void Jump()
{
throw new System.NotImplementedException();
}
public void Move()
{
throw new System.NotImplementedException();
}
}
π§ Events
interface ICharacter
{
// Method
void Fire();
void Move();
void Jump();
// Properties
int Score { get; set; }
// Events
delegate void WinHandler(int min, int sec);
event WinHandler winEvent;
}
class player : ICharacter
{
public int Score { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public event ICharacter.WinHandler winEvent;
public void Fire()
{
throw new System.NotImplementedException();
}
public void Jump()
{
throw new System.NotImplementedException();
}
public void Move()
{
throw new System.NotImplementedException();
}
}
π¦ Abstract
π§ Document
Abstract and Sealed Classes and Class Members - C# Programming Guide
The abstract keyword in C# creates incomplete classes and class members. The sealed keyword prevents inheritance of previously virtual classes or class members.
docs.microsoft.com
- μΆμν΄λμ€
- μΈν°νμ΄μ€λ λ©€λ² μ 체λ₯Ό ꡬνν μ μκ³ , μ μΈλ§ ν¨
- μΆμν΄λμ€λ λ©€λ²λ₯Ό ꡬνν μ μκ³ , μΆμ λ©μλλ₯Ό μ μΈν¨
- μΆμλ©μλλ 무쑰건 ꡬνν΄μΌν¨
- μΆμν΄λμ€λ μΈμ€ν΄μ€ μμ±ν μ μμ
- ν΄λμ€μ΄κΈ°λλ¬Έμ λ€μ€μμμ΄ λΆκ°λ₯
π§ abstract
public abstract class Monster : MonoBehaviour
{
// ꡬνλΆ
public int hp = 100;
public void Jump()
{
Debug.Log("jump!");
}
// μΆμλ©μλ
public abstract void Move();
}
class Gorlem : Monster
{
public override void Move()
{
throw new System.NotImplementedException();
}
}
- μΈν°νμ΄μ€μλ λ€λ₯΄κ² λ©€λ²λ€μ ꡬνν μ μμ
- 1κ°μ ν΄λμ€λ§ μμλ°μ μ μκΈ°λλ¬Έμ μ΅μμ ν΄λμ€μ MonoBehaviourλ₯Ό μμλ°μμ
- μ λν°μμ κ²μμ€λΈμ νΈμ μ€ν¬λ¦½νΈλ₯Ό λ£κΈ°μν΄μλ MonoBehaviour ν΄λμ€λ₯Ό 무쑰건 μμλ°μμΌν¨
π§ sealed
public abstract class Monster : MonoBehaviour
{
// ꡬνλΆ
public int hp = 100;
public void Jump()
{
Debug.Log("jump!");
}
// μΆμλ©μλ
public abstract void Move();
}
class Gorlem : Monster
{
public override void Move()
{
throw new System.NotImplementedException();
}
}
class WoodGorlem : Gorlem
{
public override void Move()
{
// μ¬μ μ
}
}
- λͺ¬μ€ν° μΆμν΄λμ€λ₯Ό μμλ°μ 골λ ν΄λμ€λ₯Ό μ°λ골λ ν΄λμ€μμ μμλ°μ
- μ°λ골λ ν΄λμ€μμ μΆμλ©μλλ₯Ό μ€λ²λΌμ΄λν΄μ μ¬μ μν μ μμ

- λ©μλμ sealed ν€μλλ₯Ό μΈ κ²½μ° μμ ν΄λμ€μμ μ€λ²λΌμ΄λκ° λΆκ°ν¨

- ν΄λμ€μλ μΈ μ μμ
- ν΄λΉ λ©μλλ₯Ό μμλ°μ§ λͺ»νλλ‘ ν¨
π¦ Virtual
π§ Document
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/virtual
virtual - C# Reference
virtual (C# Reference) In this article --> The virtual keyword is used to modify a method, property, indexer, or event declaration and allow for it to be overridden in a derived class. For example, this method can be overridden by any class that inherits i
docs.microsoft.com
- Method, Propertyλ₯Ό overrideν μ μκ²νλ ν€μλ
- virtualμ ꡬνμ μν΄λ λ¨
π§ Method

- overrideλ₯Ό νμ§ μμλ μ€λ₯κ° λμ§ μμ
class Food
{
string name;
public virtual void Show() { }
}
class Salad : Food
{
public override void Show()
{
}
}
- μΈν°νμ΄μ€, μΆμν΄λμ€μ²λΌ overrideνλ©΄ λ¨
π§ Property
class Food
{
float calorie;
public virtual float Calorie { get; set; }
}
class Salad : Food
{
public override float Calorie { get => base.Calorie; set => base.Calorie = value; }
}
π§ μΆμν΄λμ€μ κ°μ΄ μ°λ κ²½μ°
public abstract class Monster : MonoBehaviour
{
// ꡬνλΆ
public int hp = 100;
public void Jump()
{
Debug.Log("jump!");
}
// virtual
public virtual void Attack() { }
// μΆμλ©μλ
public abstract void Move();
}
- μμ κ°μ΄ μΆμ ν΄λμ€ μμ virtual ν€μλλ₯Ό μΈ μ μμ
'C#' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C#] Nullable Type (0) | 2022.11.14 |
---|---|
[C#] ref & out (0) | 2022.10.26 |
C# μ£Όμμ λν XML νκ·Έ (0) | 2021.11.01 |