본문 바로가기

프로그래밍/C# 프로그래밍

C# - Application.Exit() 먹히지 않는 이유 Informs all message pumps that they must terminate, and then closes all application windows after the messages have been processed. 메세지루프가 시작되기 전, 그러니까 Form 생성전 호출하면 효과가 없다. https://msdn.microsoft.com/ko-kr/library/ms157894(v=vs.110).aspx 더보기
C# FileStream MemoryStream 이번에도 예제로만 설명 FileStream fsWrite = new FileStream("TestStream.txt", FileMode.Append, FileAccess.Write); StreamWriter sw = new StreamWriter(fsWrite); sw.WriteLine("파일에 텍스트를 입력"); sw.Close(); fsWrite.Close(); FileStream fsRead = new FileStream("TestStream.txt", FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fsRead); String buf = sr.ReadLine(); sr.Close(); fsRead.Close(); Consol.. 더보기
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.. 더보기
C# nullable 형식 - 포인터화? C# 문법을 접하면서 놀라운것중 하나는 바로 nullable 형식이다. nullable 형식은 System.Nullable 구조체의 인스턴스이다. 바로 nullable 형식은 내부 값 형식의 올바른 값 범위뿐 아니라 null 값도 나타낼 수 있다 포인터는 아니지만 null 대입 허용을 하겠다는 것이다. Nullable nullInt = null; Nullable nullInt = 100; 이런식으로 기본형 데이터 말고 null값을 대입할 수 있게 해준다. 또한 귀차니즘을 위해 축약형도 제공을 하고 있는데 바로 '?' 라는 키워드이다. bool? nullBool = null; bool? nullBool = true; 바로 타입 바로뒤에 ? 를 붙여주면 null 대입이 허용된다. null허용이 된다면 해당데.. 더보기
스택과 힙 메모리 - 값으로 참조형식 참조로 참조형식 struct는 밸류타입 class는 참조타입이라고 이전에 설명을 하였다.http://honestgame.tistory.com/2 일반 변수의 경우, Call by value 이냐 Call by refrence 차이는 너무나도 많은 예제와 내용이 있다 뭐 Swap함수로 함수 파라미터를 value로 전달하면 바뀌지 않고 ref로 전달하면 잘 바뀐다는 그런 예제는 많으니 여기서는 생략. C#에서는 밸류타입이냐 참조타입이냐를 잘 구분해야는데 기본데이터타입, 열거형, 구조체를 제외한 클래스, 배열(제너릭포함), 델리게이트, 인터페이스는 참조타입이다. class PassingRefByVal { static void Change(int[] pArray) { pArray[0] = 888; // This change a.. 더보기