struct
: https://msdn.microsoft.com/ko-kr/library/0taef578.aspx- argument가 없는 default constructor, destructor 생성 불가
: argument가 있는 constructor는 생성 가능
- struct는 value type이므로 복사 시 동일한 데이터의 별도 복사본시 생성됨.
: new 연산자를 사용하지 않고 인스턴스화 할 수 있음.
- 상속 지원하지 않으나 인터페이스를 구현할 수 있음.
public struct CoOrds { public int x, y; public CoOrds(int p1, int p2) { x = p1; y = p2; } }
// Declare and initialize struct objects. class TestCoOrds { static void Main() { // Initialize: CoOrds coords1 = new CoOrds(); CoOrds coords2 = new CoOrds(10, 10); // Display results: Console.Write("CoOrds 1: "); Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y); Console.Write("CoOrds 2: "); Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } /* Output: CoOrds 1: x = 0, y = 0 CoOrds 2: x = 10, y = 10 */
// Declare a struct object without "new." class TestCoOrdsNoNew { static void Main() { // Declare an object: CoOrds coords1; // Initialize: coords1.x = 10; coords1.y = 20; // Display results: Console.Write("CoOrds 1: "); Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } // Output: CoOrds 1: x = 10, y = 20
class
: https://msdn.microsoft.com/ko-kr/library/x9afc042.aspx- 클래스는 reference type, 복사본은 원 변수의 개체를 참조함.
- 상속 제한을 위해서는 sealed 사용.
- 파생 클래스는 기본 클래스의 virtual, abstract 선언 멤버함수를 재정의 가능
- 파생 멤버는 override를 명시적으로 사용
- 같은 이름이지만 상속 관계가 아닐 경우 new 사용
public class Person { // Field public string name; // Constructor that takes no arguments. public Person() { name = "unknown"; } // Constructor that takes one argument. public Person(string nm) { name = nm; } // Method public void SetName(string newName) { name = newName; } } class TestPerson { static void Main() { // Call the constructor that has no parameters. Person person1 = new Person(); Console.WriteLine(person1.name); person1.SetName("John Smith"); Console.WriteLine(person1.name); // Call the constructor that has one parameter. Person person2 = new Person("Sarah Jones"); Console.WriteLine(person2.name); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } // Output: // unknown // John Smith // Sarah Jones