c# ๋ถ๋ชจํจ์ ์์์ ์์ ํด๋์ค๊ฐ ์ค๋ฒ๋ผ์ด๋ํ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ ์์๊น์?
์ ๊ฐ ๋ถ๋ชจ์ Dosomething() ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ ๊ฑด๋ฐ
๊ทธ๋ฌ๋ฉด ๋ถ๋ชจํด๋์ค์์ ํธ์ถํ๋ ๋๋ค๋ฅธ ํจ์ ์์ ์๋ย ย Dosomething() ๊ตฌ๋ฌธ๋ ์์ ํด๋์ค์ ๊ฒ์ผ๋ก ์ฐ๊ฒํ ์๋ ์๋์ฌ?
์ ๊ฐ ๊ธ์ ์ ๋ชป์จ์ ์ดํด๊ฐ ์๋์ ๋ค๋ฉด ์ฃ์กํฉ๋๋คใ ใ
์ ๊ฐ ๋ถ๋ชจ์ Dosomething() ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ ๊ฑด๋ฐ
๊ทธ๋ฌ๋ฉด ๋ถ๋ชจํด๋์ค์์ ํธ์ถํ๋ ๋๋ค๋ฅธ ํจ์ ์์ ์๋ย ย Dosomething() ๊ตฌ๋ฌธ๋ ์์ ํด๋์ค์ ๊ฒ์ผ๋ก ์ฐ๊ฒํ ์๋ ์๋์ฌ?
์ ๊ฐ ๊ธ์ ์ ๋ชป์จ์ ์ดํด๊ฐ ์๋์ ๋ค๋ฉด ์ฃ์กํฉ๋๋คใ ใ
๋ถ๋ชจ์ธ ํด๋์ค a์ ์์์ธ ํด๋์ค b๊ฐ ์๊ณ bํด๋์ค๋ DoSomething()์ด๋ผ๋ ํจ์๋ฅผ overrideํ๋๋ฐ, ํด๋์ค a๊ฐ b.DoSomething()์ ์ธ์์๋๋ ๋ง์?
๋ค๋ค
์๊ฐํด๋ณด๋๊น ๊ทธ๋ฅ ๋๋จธ์ง ํจ์๋ ์ค๋ฒ๋ผ์ด๋ฉํ๋ฉด ๋๊ฒ ๋ค์... ๋ค๋ค ๊ฐ์ฌํด์
๋ถ๋ชจ ํจ์ new๋ก ์ ์ธ, ์์์๋ base.Dosomething()์ผ๋ก
์์ด์. ๋ด ์์ ์ ์์ ํด๋์ค๋ก ํ๋ณํํด์ ํธ์ถ ํ๋ ๋ฐฉ๋ฒ ๋ฐ์๋ (this as child).Dosomething() ์ด๋ฐ์์ผ๋ก. ๊ทผ๋ฐ ์ด๋ฌ๋ฉด ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์๊น. ๊ทธ๋ฌ๋ ์ด๋ฐ์์ ์ฝ๋๋ ์ง์ํด์ผ ํ๋ค๊ณ ์๊ฐํจ
์ ํํ๋ if(this is child){ (this as child).Dosomething() } ์ด๋ ๊ฒ ์จ์ผํ ๋ฏ?
๊ทธ๋ฅ ํธ์ถํ๋ฉด ์์์ ์์๊ฑฐ๋ก ํธ์ถ๋์ง ์์?
abstract๋ virtual ๋ก ํด๋๊ณ ๋์ด ๋ก๊ธฐ๋ฉด ๋ ๊ฑฐ ๊ฐ๊ธด ํ๋ฐ
๊ทธ๋ฅ ์ฐ๋ฉด ์์์ ์์๊ป๋ก ํธ์ถ๋ ํ ๋ฐ