C#/이것이 C#이닀

21. this, this() μƒμ„±μž

Rainbow🌈Coder 2022. 2. 10. 16:02
728x90

"λ‚˜", "μ €λŠ”" ...

 

자기 μžμ‹ μ„ μ§€μΉ­ν•  λ•Œ "λ‚˜"라고 ν•œλ‹€.

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

        }
    }
}
728x90