S_pot

210524 C#_인스턴스변수, 지역변수, 생성자, 소멸자, stack형 소멸순서 본문

C#

210524 C#_인스턴스변수, 지역변수, 생성자, 소멸자, stack형 소멸순서

S_pot 2021. 5. 24. 09:55

 

using System;


namespace _210524_001
{
    class Program
    {
        static void Main1(string[] args)
        {
            Cat Test1 = new Cat("1");       // 생성은 1234순이지만 소멸은 4321이다.
            Cat Test2 = new Cat("2");       // 이와같은 이유는 stack형이기 때문에 위쪽에 쌓여있는 것 먼저 소멸된다.
            Cat Test3 = new Cat("3");
            Cat Test4 = new Cat("4");
        }
        static void Main(string[] args)
        {
            Cat aCat;       // 객체참조 변수생성: 참조대상은 Cat Type
              // 객체생성방법: new 사용 + 생성자호출
            aCat = new Cat(); // Cat의 기본 생성자를 이용하여 객체생성

            aCat.Name = "네로";
            Console.WriteLine(aCat.Name);      // 생성자와 소멸자 사이에 출력이 된다.

            Cat bCat = new Cat("기티");
        }
    }
}

 

using System;

// 클래스
// 변수: 상태
// 메소드: 행위

namespace _210524_001
{
    class Cat
    {
        public string Name; // 인스턴스 변수

        public Cat() // 생성자: 기본(디폴트)생성자 = 인자없음
        {
            Console.WriteLine("냥이 객체생성");
            return;  // 생략가능
        }
            public Cat(string Name) // 생성자: 일반생성자 = 인자가 있다.(string Name)
            // Name = 지역변수
            // 메서드 오버로딩: 메서드의 이름이 동일, 매개변수가 다름
            {
            this.Name = Name; // this는 실행중인 객체를 뜻함. 인스턴스 변수와 지역변수를 구별해준다.
            // 왼쪽이 인스턴스 변수, 오른쪽이 지역변수이다.
                Console.WriteLine("냥이 객체생성");
                return;  // 생략가능
            }
        ~Cat()       // 소멸자
        {
            Console.WriteLine(Name + " 객체소멸");
            return;  //생략가능
        }
    }
}

 

Main1 출력값

 

Main 출력값