본문 바로가기

c#

C# 파일 직렬화 - BinaryFormatter 귀찮아서 풀소스로 설명 using System;using System.IO;using System.Collections;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization; public class App{ [STAThread] static void Serialize() { // 사용할 데이터로는 해쉬테이블을 사용한다. 정적데이터를 사용할때에는 // 그냥 파일스트림에 집어넣어도 되지만, // 동적데이터나 컨테이너를 사용할 경우 직렬화를 반드시 해줘야하기 때문이다. Hashtable addresses = new Hashtable(); addresses.Add("Jeff", "123 Main Street,.. 더보기
C# 6.0 새로운 기능 몇가지만 정리하자면, 먼저 멤버변수 표현 방식 수정 public int Area{ get { return Height * Width; }} => public int Area => Height * Width; 람다식을 활용하여 아예 괄호까지 빼버렸는데, 처음 프로그래밍을 접하는 사람들에겐 정말 직관적일것 같다. 나중엔 아예 return 키워드가 없어질지도 모르겠다; 또한 빈번한 null 체크를 위해 ?. 연산자를 활용하여 코드를 간결화 하였다. 엘비스 연산자라고 한다 ㅋㅋ string s = GetA();int? i = (s == null) ? null : s.Length; =>string s = GetA();int? n = s?.Length; 프로그래밍의 발전은 정말 귀차니즘을 어디까지 해결해 줄까라는 .. 더보기
C# 의 define 처리 C++에서 편하게 사용하던 #define MAX_COUNT 100 같은 상수 정의는 C#에서 지원되지 않는다. 게다가 파일 최상단에 위치하지 않으면 에러를 뿜어낸다. static class Constants{ public const double Pi = 3.141592;}class Test{ static void Main() { double result = Constants.Pi * 3; }} 이와 같은 문제로 msdn에서 권장하는 방법은 클래스의 정적멤버로 선언하여 사용하라고 나와 있다. 참고#define 지시문은 C 및 C++에서 일반적으로 수행되는 것처럼 상수 값을 선언하는 데 사용할 수 없습니다. C#의 상수는 클래스 또는 구조체의 정적 멤버로 정의하는 것이 좋습니다. 이러한 상수가 여러 개 있는.. 더보기
C# Math 함수 모음집 이름설명Abs(Decimal)Decimal 숫자의 절대값을 반환합니다.Abs(Double)배정밀도 부동 소수점 수의 절대 값을 반환합니다.Abs(Int16)16비트 부호 있는 정수의 절대 값을 반환합니다.Abs(Int32)32비트 부호 있는 정수의 절대 값을 반환합니다.Abs(Int64)64비트 부호 있는 정수의 절대 값을 반환합니다.Abs(SByte)8비트 부호 있는 정수의 절대 값을 반환합니다.Abs(Single)단정밀도 부동 소수점 수의 절대 값을 반환합니다.Acos(Double)코사인을 적용했을 때 지정된 숫자가 나오는 각도를 반환합니다.Asin(Double)사인을 적용했을 때 지정된 숫자가 나오는 각도를 반환합니다.Atan(Double)탄젠트를 적용했을 때 지정된 숫자가 나오는 각도를 반환합니다.. 더보기
C# String Object 의 불변성 String Object는 한번 할당이 되면 변하지 않는다.(불변성 존재) 그렇다면 이렇게 하면 어떻게 되는 것일까? string s1 = "A string is more "; string s2 = "than the sum of its chars."; s1 += s2; System.Console.WriteLine(s1); // 출력: A string is more than the sum of its chars. 분명 출력은 s1이 s2와 합쳐진 형태이다.그렇다면, s1이 변한것이 아닌가? 라고 생각할 수도 있지만 그렇지 않다. 결과적으로 처음에 할당된 s1과 s2 개체는 변하지 않았다.+= 연산이 진행됐을때 새 개체(s1)가 생성이 된 것이다.s1과 s2의 합쳐진 형태의 새 string object가 생.. 더보기
C# String Null 문자열 string str = "hello"; string nullStr = null; string emptyStr = String.Empty; string tempStr = str + nullStr; Console.WriteLine(tempStr); // hello 가 출력된다. 그렇다면, 이건 어떨까? bool b = (emptyStr == nullStr); Console.WriteLine(b); // false 당연한거지만 false 이다. emptyStr 은 빈문자열을 가지고 있는 포인터이고, nullStr 은 포인터자체가 null이기 때문이다. string newStr = emptyStr + nullStr;이렇게 하면 새 빈 문자열이 생성된다. Console.WriteLine(emptyStr.Lengt.. 더보기