21. this, this() μμ±μ
"λ", "μ λ" ...
μκΈ° μμ μ μ§μΉν λ "λ"λΌκ³ νλ€.
thisλ κ°μ²΄κ° μμ μ μ§μΉν λ μ¬μ©νλ ν€μλμ΄λ€.
κ·Έλ¬λκΉ,
κ°μ²΄ μΈλΆμμλ κ°μ²΄μ νλλ λ©μλμ μ κ·Όν λ κ°μ²΄μ μ΄λ¦(λ³μ λλ μλ³μ)λ₯Ό μ¬μ©νλ€λ©΄,
κ°μ²΄ λ΄λΆμμλ μμ μ νλλ λ©μλμ μ κ·Όν λ this ν€μλλ₯Ό μ¬μ©νλ€.
thisκ° κ°μ²΄ μμ μ μ§μΉνλ ν€μλμΈ κ²μ²λΌ,
this()λ μκΈ° μμ μ μμ±μλ₯Ό 카리ν¨λ€.
this()λ μμ±μμμλ§ μ¬μ©λ μ μλ€.
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 Employee
{
private string Name;
private string Position;
public void SetName(string Name)//λ§€κ°λ³μ Name
{
this.Name = Name; //μμ μ νλ this.Name
}
public string GetName()
{
return Name;
}
public void SetPosition(string Position)
{
this.Position = Position;
}
public string GetPosition()
{
return this.Position;
}
}
class MainApp
{
static void Main(string[] args)
{
Employee pooh = new Employee();
pooh.SetName("Pooh");
pooh.SetPosition("Waiter");
WriteLine($"{pooh.GetName()} {pooh.GetPosition()}"); //Pooh Waiter
Employee tigger = new Employee();
tigger.SetName("Tigger");
tigger.SetPosition("Clenaer");
WriteLine($"{tigger.GetName()} {tigger.GetPosition()}"); //Tigger Clenaer
}
}
}
<μΆλ ₯κ²°κ³Ό>
Pooh Waiter
Tigger Clenaer
thisκ° κ°μ²΄ μμ μ μ§μΉνλ ν€μλμΈ κ²μ²λΌ,
this()λ μκΈ° μμ μ μμ±μλ₯Ό 카리ν¨λ€.
this()λ μμ±μμμλ§ μ¬μ©λ μ μλ€.
<μμ μ½λ>
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 MyClass
{
int a, b, c;
public MyClass()
{
this.a = 5425;
WriteLine("MyClass()");
}
public MyClass(int b) : this()
{
this.b = b;
WriteLine($"MyClass({b})");
}
public MyClass(int b, int c) : this(b)
{
this.c = c;
WriteLine($"MyClass({b}, {c})");
}
public void PirntFields()
{
WriteLine($"a:{a}, b:{b}, c:{c}");
}
}
class MainApp
{
static void Main(string[] args)
{
MyClass a = new MyClass();
a.PirntFields();
WriteLine();
MyClass b = new MyClass(1);
b.PirntFields();
WriteLine();
MyClass c = new MyClass(10, 20);
c.PirntFields();
}
}
}
<μΆλ ₯ κ²°κ³Ό>
MyClass()
a:5425, b:0, c:0
MyClass()
MyClass(1)
a:5425, b:1, c:0
MyClass()
MyClass(10)
MyClass(10, 20)
a:5425, b:10, c:20
this()λ₯Ό μ΄μ©νμ¬ μ½λλ₯Ό κ°μ ν μ (μ -> ν)
-μ½λ κ°μ μ -
class MyClass
{
int a, b, c;
public MyClass()
{
this.a = 5425;
}
public MyClass(int b)
{
this.a = 5425;
this.b = b;
}
public MyClass(int b, int c)
{
this.a = 5425;
this.b = b;
this.c = c;
}
public void PirntFields()
{
WriteLine($"a:{a}, b:{b}, c:{c}");
}
}
-μ½λ κ°μ ν-
class MyClass
{
int a, b, c;
public MyClass()
{
this.a = 5425;
}
public MyClass(int b) : this() //this()λ MyClass()λ₯Ό νΈμΆνλ€.
{
this.b = b;
}
public MyClass(int b, int c) : this(b) //this(int)λ MyClass(int)λ₯Ό νΈμΆνλ€.
{
this.c = c;
}
}
<μ€ν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 UsingOut
{
class MyClass
{
int a, b, c;
public MyClass()
{
this.a = 5425;
}
public MyClass(int b) : this() //this()λ MyClass()λ₯Ό νΈμΆνλ€.
{
this.b = b;
}
public MyClass(int b, int c) : this(b) //this(int)λ MyClass(int)λ₯Ό νΈμΆνλ€.
{
this.c = c;
}
public void PirntFields()
{
WriteLine($"a:{a}, b:{b}, c:{c}");
}
}
class MainApp
{
static void Main(string[] args)
{
MyClass a = new MyClass();
a.PirntFields(); //a:5425, b:0, c:0
WriteLine();
MyClass b = new MyClass(1);
b.PirntFields(); //a:5425, b:1, c:0
WriteLine();
MyClass c = new MyClass(10, 20);
c.PirntFields(); //a:5425, b:10, c:20
}
}
}
<μ€ν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 MyClass
{
int a, b, c;
public MyClass()
{
this.a = 5425;
}
public MyClass(int b)
{
this.b = b;
}
public MyClass(int b, int c) : this(b)
{
this.c = c;
}
public void PirntFields()
{
WriteLine($"a:{a}, b:{b}, c:{c}");
}
}
class MainApp
{
static void Main(string[] args)
{
MyClass a = new MyClass();
a.PirntFields(); //a:5425, b:0, c:0
WriteLine();
MyClass b = new MyClass(1);
b.PirntFields(); //a:0, b:1, c:0
WriteLine();
MyClass c = new MyClass(10, 20);
c.PirntFields(); //a:0, b:10, c:20
}
}
}
<μ€ν3>
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 MyClass
{
int a, b, c;
public MyClass()
{
this.a = 5425;
}
public MyClass(int b)
{
this.b = b;
}
public MyClass(int b, int c) : this()
{
this.c = c;
}
public void PirntFields()
{
WriteLine($"a:{a}, b:{b}, c:{c}");
}
}
class MainApp
{
static void Main(string[] args)
{
MyClass a = new MyClass();
a.PirntFields(); //a: 5425, b: 0, c: 0
WriteLine();
MyClass b = new MyClass(1);
b.PirntFields(); //a: 0, b: 1, c: 0
WriteLine();
MyClass c = new MyClass(10, 20);
c.PirntFields(); //a: 5425, b: 0, c: 20
}
}
}
<μ°μ΅>
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 MyClass
{
private int a, b, c;
public MyClass()
{
this.a = 9876;
}
public MyClass(int b) : this()
{
this.b = b;
}
public MyClass(int b, int c) : this(b)
{
this.c = c;
}
public void PrintStatus()
{
WriteLine($"a: {a}, b : {b}, c : {c}");
}
}
class MainApp
{
static void Main(string[] args)
{
MyClass myClass1 = new MyClass();
myClass1.PrintStatus(); //a: 9876, b : 0, c : 0
MyClass myClass2 = new MyClass(10,99);
myClass2.PrintStatus(); //a: 9876, b : 10, c : 99
MyClass myClass3 = new MyClass(101, 9999);
myClass3.PrintStatus(); //a: 9876, b : 101, c : 9999
}
}
}