μμ½: λ€νμ±μ΄λ κ°μ²΄κ° μ¬λ¬ ννλ₯Ό κ°μ§ μ μμμ μλ―Ένλ€.
λ€νμ±μ μλ νμ νμ λ€νμ±μ μ€λ§μ΄λ€.
μμ μΌλ‘λΆν° μμλ°μ λ§λ€μ΄μ§ νμν΄λμ€λ₯Ό ν΅ν΄ λ€νμ±μ μ€ννλ€.
μ€λ²λΌμ΄λ©μ νμν΄λμ€κ° κΈ°λ°ν΄λμ€μμ ꡬνλ ν¨μλ₯Ό μ¬μ μνλ κ²μ΄λ€.
μ€λ²λΌμ΄λ©μ ν΅ν΄ λ€νμ±μ΄ μ€νλλ€.
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ λ€νμ±μ κ°μ²΄κ° μ¬λ¬ ννλ₯Ό κ°μ§ μ μμμ μλ―Ένλ€.
λ€νμ±μ μλ νμ νμ λ€νμ±μ μ€λ§μ΄λ€.
λ©μλλ₯Ό μ€λ²λΌμ΄λ©νκΈ° μν΄μλ ν κ°μ§ μ‘°κ±΄μ΄ νμνλ€.
κ·Έ 쑰건μ λ°λ‘ μ€λ²λΌμ΄λ©μ ν λ©μλκ° virtual ν€μλλ‘ νμ λμ΄ μμ΄μΌ νλ€λ κ²μ΄λ€.
μ€λ²λΌμ΄λ©μ νλ μΈ‘μμλ κΈ°λ° ν΄λμ€μ μ μΈλμ΄ μλ λ©μλλ₯Ό μ¬μ μνκ³ μμμ μ»΄νμΌλ¬μ μλ €μΌ νλ―λ‘ overrideλ‘ νμ ν΄μ£Όμ΄μΌ νλ€.
μ΄λ€ λ©μλκ° ν₯ ν μ€λ²λΌμ΄λ©μ΄ λ μ§ μ λ μ§λ₯Ό νλ¨νλ κ²μ κΉμ΄ μκ°ν μλ‘, λ λ§μ΄ κ²½νν μλ‘ μ’μ λ΅μ μ»κΈ°λ νμ§λ§ 곡μμ μλ€.
μ°¨νμ μ κ·Έλ μ΄λκ° μμ κ²μΌλ‘ κ³ λ €λλ λ©μλλ virtualλ‘ μ μΈνκ³
μ¬μ μν λ override ν€μλλ₯Ό μμ±ν΄μ£Όλλ‘ νμ.
<privateλ‘ μ μΈν λ©μλλ μ€λ²λΌμ΄λ© ν μ μλ€.>
privateλ‘ μ μΈλ λ©€λ²λ μ΄μ°¨νΌ νμ ν΄λμ€μμ 보μ΄μ§λ μλλ€.
κ°μ μ΄λ¦, κ°μ νμ, κ°μ λ§€κ° λ³μλ₯Ό μ΄μ©νμ¬ μ μΈνλ€ νλλΌλ μ»΄νμΌλ¬λ κΈ°λ° ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνλ€κ³ μκ°νμ§ μκ³ μ ν μμλ λ©μλλ₯Ό μ μΈνλ€κ³ κ°μ£Όν κ²μ΄λ€.
<μμ νλ‘κ·Έλ¨>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class ArmorSuite
{
public virtual void Initialize()
{
WriteLine("Armored");
}
}
class IronMan : ArmorSuite
{
public override void Initialize()
{
base.Initialize();
WriteLine("Repulsor Rays Armed");
}
}
class WarMachine : ArmorSuite
{
public override void Initialize()
{
base.Initialize();
WriteLine("Double-Barrel Cannons Armed");
WriteLine("Micro-Rocket Launcher Armed");
}
}
class MainApp
{
static void Main(string[] args)
{
WriteLine("Creating ArmorSuite...");
ArmorSuite armorSuite = new ArmorSuite();
armorSuite.Initialize();
WriteLine("\nCreating IronMan...");
ArmorSuite ironman = new IronMan();
ironman.Initialize();
WriteLine("\nCreating WarMachine...");
ArmorSuite warmachine = new WarMachine();
warmachine.Initialize();
}
}
}
<μΆλ ₯ κ²°κ³Ό>
Creating ArmorSuite...
Armored
Creating IronMan...
Armored
Repulsor Rays Armed
Creating WarMachine...
Armored
Double-Barrel Cannons Armed
Micro-Rocket Launcher Armed
<ν μ€νΈ μ½λ1> : μλ¬΄λ° ν€μλ μμ΄ μ¬μ μ
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class Base
{
public void MyMethod()
{
WriteLine("Base.MyMethod()");
}
}
class Derived : Base
{
public void MyMethod()
{
WriteLine("Derived.MyMethod()");
}
}
class MainApp
{
static void Main(string[] args)
{
WriteLine("1...");
Base test1 = new Base();
test1.MyMethod();
WriteLine("\n2...");
Derived test2 = new Derived();
test2.MyMethod();
}
}
}
<μΆλ ₯ κ²°κ³Ό> μλν λλ‘ μΆλ ₯
1...
Base.MyMethod()
2...
Derived.MyMethod()
<ν μ€νΈ μ½λ2> νμ ν΄λμ€μ μ¬μ μ λ©μλμ new ν€μλ μΆκ°
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class Base
{
public void MyMethod()
{
WriteLine("Base.MyMethod()");
}
}
class Derived : Base
{
public new void MyMethod()
{
WriteLine("Derived.MyMethod()");
}
}
class MainApp
{
static void Main(string[] args)
{
WriteLine("1...");
Base test1 = new Base();
test1.MyMethod();
WriteLine("\n2...");
Derived test2 = new Derived();
test2.MyMethod();
}
}
}
<μΆλ ₯ κ²°κ³Ό> μλν λλ‘ μΆλ ₯
1...
Base.MyMethod()
2...
Derived.MyMethod()
<ν μ€νΈ μ½λ3> κΈ°λ° ν΄λμ€μ μ¬μ μν λ©μλμ virtual ν€μλ μΆκ°
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class Base
{
public virtual void MyMethod()
{
WriteLine("Base.MyMethod()");
}
}
class Derived : Base
{
public void MyMethod()
{
WriteLine("Derived.MyMethod()");
}
}
class MainApp
{
static void Main(string[] args)
{
WriteLine("1...");
Base test1 = new Base();
test1.MyMethod();
WriteLine("\n2...");
Derived test2 = new Derived();
test2.MyMethod();
}
}
}
<μΆλ ₯ κ²°κ³Ό> μλν λλ‘ μΆλ ₯
1...
Base.MyMethod()
2...
Derived.MyMethod()
<ν μ€νΈ μ½λ> - μ»΄νμΌ μλ¬
μ¬κ°λ μ½λ μ€λͺ
νλ‘μ νΈ νμΌ μ€ λΉνμ μ€λ₯(Suppression) μν
μ€λ₯ CS0506 'Derived.MyMethod()': μμλ 'Base.MyMethod()' λ©€λ²λ virtual, abstract λλ overrideλ‘ νμλμ§ μμμΌλ―λ‘ μ¬μ μν μ μμ΅λλ€.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class Base
{
public void MyMethod()
{
WriteLine("Base.MyMethod()");
}
}
class Derived : Base
{
public override void MyMethod()
{
WriteLine("Derived.MyMethod()");
}
}
class MainApp
{
static void Main(string[] args)
{
WriteLine("1...");
Base test1 = new Base();
test1.MyMethod();
WriteLine("\n2...");
Derived test2 = new Derived();
test2.MyMethod();
}
}
}
<ν μ€νΈμ½λ> κΈ°λ° ν΄λμ€ λ©μλμ virtual ν€μλ μΆκ° λ°
νμ ν΄λμ€ μ¬μ μ λ©μλμ override ν€μλ μΆκ°
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class Base
{
public virtual void MyMethod()
{
WriteLine("Base.MyMethod()");
}
}
class Derived : Base
{
public override void MyMethod()
{
WriteLine("Derived.MyMethod()");
}
}
class MainApp
{
static void Main(string[] args)
{
WriteLine("1...");
Base test1 = new Base();
test1.MyMethod();
WriteLine("\n2...");
Derived test2 = new Derived();
test2.MyMethod();
}
}
}
<μΆλ ₯ κ²°κ³Ό>
1...
Base.MyMethod()
2...
Derived.MyMethod()
<λ©μλ μ¨κΈ°κΈ°>
λ©μλ μ¨κΈ°κΈ°λ μμ ν λ€νμ±μ νννμ§ λͺ»νλ νκ³κ° μλ€.
λ©μλ μ¨κΈ°κΈ°λ, CLRμκ² κΈ°λ° ν΄λμ€μμ ꡬνλ λ²μ μ λ©μλλ₯Ό κ°μΆκ³
νμ ν΄λμ€μμ ꡬνλ λ²μ λ§ λ³΄μ¬μ£Όλ κ²μ λ§νλ€.
λ©μλ μ¨κΈ°κΈ°λ νμ ν΄λμ€ λ²μ μ λ©μλλ₯Ό new νμ μλ‘ μμν¨μΌλ‘μ¨ ν μ μλ€.
λ€μμ μ¬λ¬κ°μ§ ν μ€νΈ μ½λμ΄λ€.
<1> λ©μλ μ¨κΈ°κΈ°μ κ²½μ°
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class Base
{
public void MyMethod()
{
WriteLine("Base.MyMethod()");
}
}
class Derived : Base
{
public new void MyMethod()
{
WriteLine("Derived.MyMethod()");
}
}
class MainApp
{
static void Main(string[] args)
{
Base baseOrDerived = new Derived();
baseOrDerived.MyMethod(); //Base.MyMethod()
}
}
}
<2> μ무 ν€μλλ μμ κ²½μ°
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class Base
{
public void MyMethod()
{
WriteLine("Base.MyMethod()");
}
}
class Derived : Base
{
public void MyMethod()
{
WriteLine("Derived.MyMethod()");
}
}
class MainApp
{
static void Main(string[] args)
{
Base baseOrDerived = new Derived();
baseOrDerived.MyMethod(); //Base.MyMethod()
}
}
}
<3> κΈ°λ°ν΄λμ€ - virtual ν€μλ νμν΄λμ€ - override ν€μλ μμ κ²½μ°
μλν λλ‘ μΆλ ₯
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class Base
{
public virtual void MyMethod()
{
WriteLine("Base.MyMethod()");
}
}
class Derived : Base
{
public override void MyMethod()
{
WriteLine("Derived.MyMethod()");
}
}
class MainApp
{
static void Main(string[] args)
{
Base baseOrDerived = new Derived();
baseOrDerived.MyMethod(); //Derived.MyMethod()
}
}
}
<4> virtual ν€μλλ§ μμ κ²½μ°
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Overriding
{
class Base
{
public virtual void MyMethod()
{
WriteLine("Base.MyMethod()");
}
}
class Derived : Base
{
public void MyMethod()
{
WriteLine("Derived.MyMethod()");
}
}
class MainApp
{
static void Main(string[] args)
{
Base baseOrDerived = new Derived();
baseOrDerived.MyMethod(); //Base.MyMethod()
}
}
}
'C# > μ΄κ²μ΄ C#μ΄λ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
27. μ½κΈ° μ μ© νλ, readonly (0) | 2022.02.11 |
---|---|
26. μ€λ²λΌμ΄λ© λ΄μΈνκΈ° (0) | 2022.02.11 |
24. C# νμ λ³ν μ°μ°μ μν μ°μ°μ, isμ as (0) | 2022.02.11 |
[μ€κ°μ κ²] μ κ·Όνμ μ internalμμ κ°μ μ΄μ λΈλ¦¬λ (0) | 2022.02.11 |
23. μμ, μ½λ μ¬νμ©, κΈ°λ° ν΄λμ€, νμ ν΄λμ€, base, sealed (0) | 2022.02.11 |