프로그래밍/C#
[C#] casting
1. casting using System; class Program { static void Main() { int n = 3; double d = 3.4; d = n; // int => double - 데이터 손실 없음 n = d; // double => int - 데이터 손실 방생 error n = (int)d; } } ① 캐스팅 규칙 => 데이터 손실이 발생하지 않은 경우 암시적 형 변환 될 수 있다. => 데이터 손실이 발생하는 경우 명시적 캐스팅을 해야 한다. 2. is, as using System; class Animal { } class Dog : Animal { public void Cry() { Console.WriteLine("Dog Cry"); } } class Program { ..
[C#] Elvis Operator (?, ??) 연산자
1. 널 조건부 연산자 (null conditional operator) using System; class Car { public int color = 10; public void Go() { Console.WriteLine("Go"); } } class Program { public static Car CreateCar(int speed) { if(speed > 200) return null; return new Car(); } public static void Main() { Car c = CreateCar(100); c.Go(); } } Car라는 클래스를 만들고 테스트를 위해 color와 Go라는 메소드를 만들었다. 그리고 밑에 CreateCar라는 메소드를 만들었다. 여기선 Car라는 객체를 ..
[C#] Nullable<T>
1. 핵심 정리 using System; class Program { public static void Main() { // string : reference type string s1 = "Hello"; // 객체 생성 string s2 = null; // 객체 없음. // int : value type int n1 = 10; // 객체 생성 int n2 = ?; // 값이 없음을 표현하고 싶을 땐? } } ① Reference Type => null을 사용하면 객체 없음 상태를 표현할 수 있다. ② Value Type => 값 없음을 표현할 수 없다. ③ Nullable => Value Type에 값 없음을 추가한 것 => Nullable = int + bool => null을 사용할 수 있다. us..
[C#] 동등성 (Equality)
1. 참조 타입(reference type)의 동등성(Equality) using System; class Point { private int x = 0; private int y = 0; public Point(int xPos, int yPos) { x = xPos; y = yPos; } } class Program { static void Main() { Point p1 = new Point(1, 1); Point p2 = p1; Point p3 = new Point(1, 1); // 방법1. == 연산자 사용 // 기본 동작 : 참조(주소)가 동일한가 ? Console.WirteLine(p1 == p2); // true Console.WriteLine(p1 == p3); // false // 방법2..
[C#] 값 타입 vs 참조 타입(2)
1. int (System.Int32) using System; class Program { public static void Main() { // int n = new int(); int n1 = 1; int n2 = n1; n2 = 10; Console.WriteLine(n1); } } int는 값 타입일까? 참조 타입일까? 값 타입이라면 n2는 10이 될 것이고, 참조 타입이라면 n2는 1이 될 것이다. int의 정의를 따라가면 int는 struct로 만들어 진것을 볼 수 있다. 따라서 값 타입으로 n2는 10이 된다. 2. array (System.Array) using System; class Program { public static void Main() { int[] arr1 = {1, 2,..
[C#] 값 타입과 참조 타입(1)
1. C/C++에서의 객체의 메모리 위치 struct Point { int x = 1; int y = 1; }; int main() { Point pt1; Point pt2 = pt1; Point* p1 = new Point; Point* p2 = p1; delete p1; } - 위의 코드는 C#이 아닌 C++코드이다. 위의 코드에서 객체를 생성하면 메모리에 어떻게 되는지 보려한다. 우선 메모리에는 stack이라는 메모리와 heap이라는 메모리가 있다. pt1과 pt2는 객체를 만들면 stack 메모리에 추가된다. malloc이나 new키워드를 사용하면 heap에 추가해달라는 의미라 p1과 p2는 객체를 만들면 Heap에 추가되고 stack에는 그 주소정보를 갖게 된다. 그림으로 보면 아래와 같다. ①..