๐ฆ 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 ํค์๋๋ฅผ ์ธ ์ ์์
'๐ฎunity > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] Nullable Type (0) | 2022.11.14 |
---|---|
[C#] ref & out (0) | 2022.10.26 |
C# ์ฃผ์์ ๋ํ XML ํ๊ทธ (0) | 2021.11.01 |