관리 메뉴

Algo μ“°μž

11. μ˜€λ²„λΌμ΄λ”©(virtual, override, new) λ³Έλ¬Έ

πŸ’» Programming Language/C#

11. μ˜€λ²„λΌμ΄λ”©(virtual, override, new)

S.Honey 2022. 4. 6. 09:24
namespace Override
{

    class BaseClass
    {
        public virtual void echo()
        {
            Console.WriteLine("기반 클래슀");
        }

        public virtual void echo2()
        {
            Console.WriteLine("기반 echo2");
        }
    }

    class DerivedClass : BaseClass
    {
        override public void echo()
        //λΆ€λͺ¨ν΄λž˜μŠ€ 내에 virtual둜 μ„ μ–Έλ˜μ–΄ μžˆλŠ” λ©”μ†Œλ“œλ₯Ό νŒŒμƒν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν• λ•Œ
        // override ν‚€μ›Œλ“œλ₯Ό μ•žμ— 뢙이고 λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•΄μ€€λ‹€.
        // => μ΄λ ‡κ²Œ μ‚¬μš©ν•˜λŠ”κ²Œ μ •ν™•ν•œ 방법이고 μ—λŸ¬λ‚˜ κ²½κ³ κ°€ μ•ˆλœΈ
        {
            Console.WriteLine("νŒŒμƒ 클래슀");
        }

        public new void echo2()
        {
            Console.WriteLine("νŒŒμƒ echo2");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {

            DerivedClass dc = new DerivedClass();
            dc.echo();
            dc.echo2();

            BaseClass bdc = new DerivedClass();
            bdc.echo2();
        }
    }
}
Output

νŒŒμƒ 클래슀
νŒŒμƒ echo2
기반 echo2

  • μ˜€λ²„λΌμ΄λ“œ(Override) : λ©”μ†Œλ“œ μž¬μ •μ˜

  • virtual :λΆ€λͺ¨(기반 : base) 클래슀 λ©”μ†Œλ“œ μ•žμ— λΆ™λŠ” ν‚€μ›Œλ“œ
    • μžμ‹(νŒŒμƒ: derived) ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ 될 수 μžˆλ‹€. = μž¬μ •μ˜ ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

  • override : μžμ‹(derived) 클래슀 λ©”μ†Œλ“œ μ•žμ— λΆ™λŠ” ν‚€μ›Œλ“œ
    • λΆ€λͺ¨λ‘œλΆ€ν„° 받은 λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ ν•œλ‹€.
    • 주의) λΆ€λͺ¨μ˜ λ©”μ†Œλ“œμ΄λ¦„κ³Ό 같은 λ©”μ†Œλ“œμ—¬μ•Ό ν•˜λ©° ν•œμ •μžμ™€ 같은 ν”„λ‘œν† νƒ€μž…λ„ μΌμΉ˜μ‹œμΌœμ•Όν•œλ‹€.(Ex : public void 와 같은것듀)

  • new : new ν‚€μ›Œλ“œλŠ” μ˜€λ²„λΌμ΄λ“œμ™€ λ‹€λ₯΄κ²Œ 같은 μ΄λ¦„μ˜ λ©”μ†Œλ“œλ”λΌλ„ 독립적인 λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©ν•œλ‹€.
    • μ˜€λ²„λΌμ΄λ”©κ³ΌλŠ” λ‹€λ₯Έ κ°œλ…μœΌλ‘œ λ©”μ†Œλ“œλ₯Ό μˆ¨κΈ°λŠ” κΈ°λŠ₯이닀.