Language/C#

[C#] struct, class의 참조 형식

마탁이 2020. 12. 23. 19:23

 - C# 4.0 Tutorial을 보던 중 재미있는 부분이 있어 업로드한다.

 

1. Struct를 사용한 참조

 - 아래 예제 코드에서 emp1의 값을 변경하여도 emp2의 값이 변경되지 않음.

using System;

namespace ConsoleApp
{
    class Program
    {
        public struct Employee
        {
            public int BirthYear;
            public string Name;
        }

        static void Main(string[] args)
        {
            Employee emp1 = new Employee();
            emp1.Name = "마타기";
            emp1.BirthYear = 1994;

            Employee emp2 = emp1;
            Console.WriteLine("emp1.BirthYear : {0}", emp1.BirthYear); // 1994
            Console.WriteLine("emp2.BirthYear : {0}", emp2.BirthYear); // 1994

            emp1.BirthYear = 2020; // emp1.BirthYear 값 변경
            Console.WriteLine("====emp1.BirthYear = 2020 값 변경====");
            Console.WriteLine("emp1.BirthYear : {0}", emp1.BirthYear); // 2020
            Console.WriteLine("emp2.BirthYear : {0}", emp2.BirthYear); // 1994
        }
    }
}

 

2. Class를 사용한 참조

- 위 Struct를 사용한 것과는 달리 emp1의 값을 변경하면 emp2의 값도 변경 됨.

using System;

namespace ConsoleApp
{
    class Program
    {
        public class Employee
        {
            public int BirthYear;
            public string Name;
        }

        static void Main(string[] args)
        {
            Employee emp1 = new Employee();
            emp1.Name = "마타기";
            emp1.BirthYear = 1994;

            Employee emp2 = emp1;
            Console.WriteLine("emp1.BirthYear : {0}", emp1.BirthYear); // 1994
            Console.WriteLine("emp2.BirthYear : {0}", emp2.BirthYear); // 1994

            emp1.BirthYear = 2020; // emp1.BirthYear 값 변경
            Console.WriteLine("====emp1.BirthYear = 2020 값 변경====");
            Console.WriteLine("emp1.BirthYear : {0}", emp1.BirthYear); // 2020
            Console.WriteLine("emp2.BirthYear : {0}", emp2.BirthYear); // 2020
        }
    }
}

'Language > C#' 카테고리의 다른 글

[C#] 박싱(Boxing)과 언박싱(Unboxing)  (0) 2020.12.23
[C#] const 와 readonly  (0) 2020.12.23
[C#, 공통] 변수 및 함수 표기 방식  (0) 2020.12.23
[C#] 튜플의 사용  (0) 2020.12.17
[C#] 기본 문법 및 C++과 비교시 차이  (0) 2020.12.17