24. C# νμ λ³ν μ°μ°μ μν μ°μ°μ, isμ as
| μ°μ°μ | μ€λͺ |
| is | κ°μ²΄κ° ν΄λΉ νμμ ν΄λΉνλμ§ κ²μ¬νμ¬ κ·Έ κ²°κ³Όλ₯Ό bool κ°μΌλ‘ λ°ννλ€ (κ°μ²΄(νμ κ°λ¦¬ν€λ λ³μ)κ° μ°Ύκ³ μλ μμ±μ νμμ κ°λ¦¬ν€λκ² λ§λμ§λ₯Ό νμΈ!!! λ€λ₯Έ μμ±μ νμμ κ°λ¦¬ν¬ μλ μμΌλκΉ) |
| as | μΊμ€νΈ. λ§κ·Έλλ‘ νμ λ³ν! νμ λ³ν μ°μ°μμ κ°μ μν μ νλ€. (μ무리 μμ±μ νμμ κ°λ₯΄ν¬μ§ μΈμ μλ²½νκ² νλ³ννκΈ° μν΄μλ λ³μ μ체λ κ·Έ μ μΈμ κ°μ νμΌλ‘ μ§μ ν΄μ£Όμ΄μΌ νλ€.) λ€λ§ νμ λ³ν μ°μ°μκ° λ³νμ μ€ν¨νλ κ²½μ° μμΈλ₯Ό λμ§λ λ°λ©΄μ as μ°μ°μλ κ°μ²΄ μ°Έμ‘°λ₯Ό nullλ‘ λ§λ λ€λ κ²μ΄ λ€λ₯΄λ€. |
as μ¬μ© λ°©λ²
Mammal mammal3 = new Cat();
if (mammal3 is Cat)
{
Cat cat2 = mammal3 as Cat;
cat2.Meow();
}
Mammal mammal3 = new Cat();
if (mammal3 is Cat)
{
Cat cat2 = (Cat)mammal3;
cat2.Meow();
}
κΈ°λ° ν΄λμ€ λ³μμλ€λ©΄
κ²°κ΅ μμ ν΄λμ€ μμ±μλ₯Ό ν λΉνκΈ° μν΄ new μμν΄λμ€μλ³μ() λΆλ¬μ μ°Έμ‘° μ€μ λ°κΏμ£Όκ³ ,
λ€μ μμν΄λμ€ λ³μμλ€ as ν€μλ μ°κ±°λ (κ°μ νλ³ν)ν€μλλ₯Ό μ¨μ 볡μ¬ν΄μ£Όμ΄μΌ νλ€.~~~
λλ€ μΆλ ₯ κ²°κ³Όκ° λκ°κ³
Meow()λ₯Ό μ μμ μΌλ‘ νΈμΆνλ€.
μΌλ°μ μΌλ‘ (Dog)λ (Mammal) κΌ΄λ‘ μννλ νμ λ³ν λμ as μ°μ°μλ₯Ό μ¬μ©νλ μͺ½μ κΆμ₯νλ€!
(λΉ μκ·Έλ, [Effective C3]μ°Έμ‘°)
νμ λ³νμ μ€ν¨νλλΌλ μμΈκ° μΌμ΄λ κ°μκΈ° μ½λμ μ€νμ΄ μ ννλ μΌμ΄ μμΌλ―λ‘
μ½λλ₯Ό κ΄λ¦¬νκΈ°κ° λ μμνκΈ° λλ¬Έμ΄λ€.
λ¨, as μ°μ°μλ μ°Έμ‘° νμμ λν΄μλ§ μ¬μ©μ΄ κ°λ₯νλ―λ‘
κ° νμμ κ°μ²΄λ κΈ°μ‘΄μ νμ λ³ν μ°μ°μλ₯Ό μ¬μ©ν΄μΌ νλ€.
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 UsingOut
{
class Mammal
{
public void Nurse()
{
WriteLine("μμμ μμ‘νλ μ€...");
}
}
class Dog: Mammal
{
public void Bark()
{
WriteLine("Bark!");
}
}
class MainApp
{
static void Main(string[] args)
{
Dog dog = new Dog();
Mammal mammal = dog as Mammal;
if (mammal != null)
{
mammal.Nurse();
}
else
{
WriteLine("μ΄μν μ½λ");
}
}
}
}
<μΆλ ₯ κ²°κ³Ό>
μμμ μμ‘νλ μ€...
<μμ >
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 UsingOut
{
class Mammal
{
public void Nurse() { }
}
class Dog: Mammal
{
public void Bark()
{
WriteLine("Bark!");
}
}
class Rabbit : Mammal
{
public void Jump() { }
}
class Whale : Mammal
{
public void Swim() { }
}
class Cat : Mammal
{
public void Meow()
{
WriteLine("Meow!");
}
}
class MainApp
{
static void Main(string[] args)
{
Mammal mammal1 = new Dog();
Dog dog;
if(mammal1 is Dog)
{
dog = (Dog)mammal1; //mammal1 κ°μ²΄κ° Dog νμμμ νμΈνμΌλ―λ‘ μμ νκ² νλ³ν
dog.Bark();
}
Mammal mammal2 = new Cat();
Cat cat = mammal2 as Cat;
if (cat != null) //mammal2κ° Cat νμ λ³νμ μ€ν¨νλ€λ©΄ catμ nullμ΄ λλ€.
{ //νμ§λ§ μ΄ μ½λμμ mammal2λ Catνμμ ν΄λΉνλ―λ‘ μμ νκ² μΊμ€νΈλμμΌλ―λ‘
cat.Meow(); //(1)λνλ¨
}
//mammal1 = new Cat(); //ν΄λΉ μ£Όμμ νλ©΄ (2)μ΄ λνλ¨
Cat cat2 = mammal1 as Cat;
if (cat2 != null)
{
cat2.Meow(); //(2)λνλμ§ μμ
}
else
WriteLine("cat2 is not a Cat!");
}
}
}
<μΆλ ₯>
Bark!
Meow!
cat2 is not a Cat!
<λ³ν μμ >
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 UsingOut
{
class Mammal
{
public void Nurse() { }
}
class Dog: Mammal
{
public void Bark()
{
WriteLine("Bark!");
}
}
class Rabbit : Mammal
{
public void Jump() { }
}
class Whale : Mammal
{
public void Swim() { }
}
class Cat : Mammal
{
public void Meow()
{
WriteLine("Meow!");
}
}
class MainApp
{
static void Main(string[] args)
{
Mammal mammal1 = new Dog();
Dog dog;
if(mammal1 is Dog)
{
dog = (Dog)mammal1;
dog.Bark();
}
Mammal mammal2 = new Cat();
Cat cat = mammal2 as Cat;
if (cat != null)
{
cat.Meow(); //(1)λνλ¨
}
mammal1 = new Cat(); //ν΄λΉ μ£Όμμ νλ©΄ (2)μ΄ λνλ¨
Cat cat2 = mammal1 as Cat;
if (cat2 != null)
{
cat2.Meow(); //(2)λνλ¨
}
else
WriteLine("cat2 is not a Cat!"); //(3)λνλμ§ μμ
}
}
}
<μΆλ ₯ κ²°κ³Ό>
Bark!
Meow!
Meow!
μμ½
<1>
Mammal mammal1 = new Dog();
Dog dog;
if(mammal1 is Dog)
{
dog = (Dog)mammal1; //mammal1 κ°μ²΄κ° Dog νμμμ νμΈνμΌλ―λ‘
//μμ νκ² νμ λ³νμ ν΄μ€λ€.
dog.Bark();
}
Bark!
<2>
Mammal mammal1 = new Dog();
if(mammal1 is Dog)
{
Dog dog = (Dog)mammal1;
dog.Bark();
}
Bark!
<3>
Mammal mammal1 = new Dog();
if(mammal1 is Dog)
{
Dog dog = mammal1 as Dog;
dog.Bark();
}
Bark!
<κΈ°ν μ°μ΅>
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 UsingOut
{
class Mammal
{
public void Nurse() { }
}
class Dog: Mammal
{
public void Bark()
{
WriteLine("Bark!");
}
}
class Rabbit : Mammal
{
public void Jump()
{
WriteLine("κΉ‘μΆ©κΉ‘μΆ©!");
}
}
class MainApp
{
static void Main(string[] args)
{
Mammal mammal1 = new Dog();
Dog dog = mammal1 as Dog;
dog.Bark();
Mammal mammal2 = new Rabbit();
Rabbit rabbit = mammal2 as Rabbit;
if (rabbit != null)
{
rabbit.Jump();
}
else
{
WriteLine("μ΄μν μ½λ");
}
}
}
}
<μΆλ ₯ κ²°κ³Ό>
Bark!
κΉ‘μΆ©κΉ‘μΆ©!
<κΈ°ν μ°μ΅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 UsingOut
{
class Mammal
{
public void Nurse() { }
}
class Dog: Mammal
{
public void Bark()
{
WriteLine("Bark!");
}
}
class Rabbit : Mammal
{
public void Jump()
{
WriteLine("κΉ‘μΆ©κΉ‘μΆ©!");
}
}
class MainApp
{
static void Main(string[] args)
{
Mammal mammal1 = new Dog();
Dog dog = mammal1 as Dog;
dog.Bark();
Mammal mammal2 = new Dog();
Rabbit rabbit = mammal2 as Rabbit;
if (rabbit != null)
{
rabbit.Jump();
}
else
{
WriteLine("μ΄μν μ½λ");
}
}
}
}
<μΆλ ₯ κ²°κ³Ό>
Bark!
μ΄μν μ½λ