<클래스>
public class Person { public string Name { get; set; } public int Age { get; set; } public Person(string name, int age) { Name = name; Age = age; } //Other properties, methods, events... } class Program { static void Main() { Person person1 = new Person("Leopold", 6); Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age); // Declare new person, assign person1 to it. Person person2 = person1; //Change the name of person2, and person1 also changes. person2.Name = "Molly"; person2.Age = 16; Console.WriteLine("person2 Name = {0} Age = {1}", person2.Name, person2.Age); Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age); // Keep the console open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } Output: person1 Name = Leopold Age = 6 person2 Name = Molly Age = 16 person1 Name = Molly Age = 16
클래스의 경우, 모든 오브젝트가 동일한 메모리를 가리키고 있으므로 P2가 바뀌면 P1도 바뀐다
<구조체>
public struct Person { public string Name; public int Age; public Person(string name, int age) { Name = name; Age = age; } } public class Application { static void Main() { // Create struct instance and initialize by using "new". // Memory is allocated on thread stack. Person p1 = new Person("Alex", 9); Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age); // Create new struct object. Note that struct can be initialized // without using "new". Person p2 = p1; // Assign values to p2 members. p2.Name = "Spencer"; p2.Age = 7; Console.WriteLine("p2 Name = {0} Age = {1}", p2.Name, p2.Age); // p1 values remain unchanged because p2 is copy. Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age); // Keep the console open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } Output: p1 Name = Alex Age = 9 p2 Name = Spencer Age = 7 p1 Name = Alex Age = 9
구조체의 경우, 스택메모리에 할당이 되므로 서로 다른 밸류를 가진다.
반면에 클래스는 가비지컬렉터에 의해 메모리가 다시 회수된다.
C++처럼 파괴할 수는 없다.
'프로그래밍 > C# 프로그래밍' 카테고리의 다른 글
Int32.Parse(), Convert.ToInt32(), Int32.TryParse() 차이 (0) | 2015.10.05 |
---|---|
제너릭 클래스의 조건지정 - Where (1) | 2015.10.02 |
C# 튜토리얼 사이트 (1) | 2015.10.02 |
파일 읽기 예제 (0) | 2015.09.30 |
클래스와 구조체의 차이 - c# (0) | 2015.09.30 |