private WeaponController<BaseWeapon> weaponController;
public void AddEvent<T>(WeaponController<T> weaponController) where T : BaseWeapon
{
this.weaponController = weaponController as WeaponController<BaseWeapon>;
// Add Events..
}
ํธ์ถํ๋ ๊ณณ์์ T์ BaseWeapon ์์๋ฐ์ SwordWeapon ๋ฃ์ด์ ํธ์ถํ๋ฉด
this.weaponController์ null์ด ๋ค์ด๊ฐ๋๋ผ๊ตฌ
WeaponController<SwordWeapon>์์ WeaponController<BaseWeapon> ํ์ ์ผ๋ก ์ ์บ์คํ ๊ฐ๋ฅํ์ง ์์?
๋ ์ ์ฃ ,,,
//
๊ณต๋ณ์ฑ ๋ฐ๊ณต๋ณ์ฑ ๋ถ๋ณ์ฑ์ด ์ด์ฉ๊ณ ์ ์ฉ๊ณ ์๋๋ผ
๊ณต๋ณ์ฑ๊ณผ ๋ฐ๊ณต๋ณ์ฑ ๊ณต๋ณ์ฑ๊ณผ ๋ฐ๊ณต๋ณ์ฑ ์ด๋ค ์๋ฏธ์ด๊ณ ์ด๋ป๊ฒ ์ฐ๋ ๊ฒ์ด ์ข์๊น? ๊ฐ์ ์ฌ์ค ๊ณต๋ณ์ฑ๊ณผ ๋ฐ๊ณต๋ณ์ฑ์ ํต์นญ ๊ฐ๋ณ์ฑ์ด๋ผ๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ฐ๋๋๋ ์๋ฏธ๋ก๋ ๋ถ๋ณ์ฑ์ด ์๋ค. ๊ฐ๋ณ์ฑ(Variance) : ํน์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ํ์ ์ ๊ฐ์ฒด๋ก ๋ณํํ ์ ์๋ ์ฑ๊ฒฉ์ ๋งํ๋ค. ๊ณต๋ณ์ฑ(Covariant) : X -> Y๊ฐ ๊ฐ๋ฅํ ๋ C๊ฐ C -> C๋ก ๊ฐ๋ฅํ๋ค๋ฉด ์ด๋ ๊ณต๋ณ์ด๋ค. ๋ฐ๊ณต๋ณ์ฑ(Contravariant) : X -> Y๊ฐ ๊ฐ๋ฅํ ๋ C๊ฐ C -> C๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ฉด ์ด๋ ๋ฐ๊ณต๋ณ์ด๋ค. ๋ถ๋ณ์ฑ(Invariant) : X -> Y๊ฐ ๊ฐ๋ฅํ๋๋ผ๋ C๋ C๋ก๋ง ์ฌ์ฉํ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ค๋ฆญ์ ๋ถ๋ณ์ด๋ค. ์ข ๋ ์์ธํ ์ค๋ช ํ๊ธฐ ์ํด์ ์๋์ ๊ฐ์ ๋คํ์ฑ์ ๊ฐ์ง ํ๊ฒฝ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. class ..
sticky32.tistory.com
์ ๊ฑด ์ ์บ์คํ ์ด ์๋ ์์. T_Base๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ํ๋ WeaponController ๋ ์ปดํ์ผ ํ์์ class WeaponController_T_Base {} ๊ฐ ๋ง๋ค์ด์ง๊ณ , T_Derv๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ํ๋ WeaponController ๋ ์ปดํ์ผ ํ์์ class WeaponController_T_Derv {}๊ฐ ๋ง๋ค์ด์ง. ๊ทธ๋ฐ๋ฐ , class T_Baseํ๊ณ class T_Derv๋ ๋ถ๋ชจ ์์๊ด๊ณ์ง๋ง class WeaponController_T_Base ํ๊ณ classs WeaponController_T_Derv ๊ฐ ๋ถ๋ชจ ์์ ๊ด๊ณ์? ์๋์์.
๋ ์ด ์ฉ์ด๋ฅผ ๊ทธ๋ฅ ์์ด๋ก ์จ์ผํ๋ค๊ณ ์๊ฐํจ. ์์ด->๊น์น์ธ์ด๋ก ๋ฐ๋๋ฉด์ ์คํ๋ ค ๋ ํท๊ฐ๋ฆผ. ๋๋ถ๋ถ์ ์ ๊ณต๋จ์ด๊ฐ ๊ทธ๋ ๊ฒ ์ง๋ง