C#

Interface, Abstract, Virtual

🟦 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

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/abstract-and-sealed-classes-and-class-members

 

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