c#

    [C#] 7.0 튜플 (Tuple)

    개념C# 7 이전 버전에서는 메서드에서 하나의 값만을 리턴할 수 있었지만, C# 7부터는 튜플(Tuple)을 사용하여 메서드로부터 복수 개의 값들을 리턴할 수 있게 되었다. 메서드 원형을 정의할 때 리턴타입이 복수 개이므로 튜플 리턴 타입(tuple return type) 표현식을 사용하게 되는데, 이는 괄호 ( ) 안에 여러 리턴타입을 순서대로 나열하면 된다. 예를 들어, int 2개와 double 하나를 리턴할 경우 (int, int, double)과 같이 표현할 수 있으며, 더 나아가 편의를 위해 각 리턴타입마다 이름을 지정할 수도 있다. 예를 들어 (int count, int sum, double average)와 같이 작성이 가능하다.(double, int) t1 = (4.5, 3);Consol..

    [C#] switch문에 추가된 기능 (버전 7~9)

    기본형)int flag = 3; switch (flag) {case 1: DoFunc1(); break;case 2: DoFunc2(); break;default: DoFunc3(); break; }C# 7.0, switch문의 패턴 매칭switch case 문이 패턴 매칭 식을 흡수한다, 원래 switch 문의 조건식에는 값 형식의 식들만 들어갈 수 있었지만 클래스 인스턴스도 들어갈 수 있고 case 문에는 패턴 매칭식을 넣을 수가 있다.using System; public class Program { public static void Main() { object data = 5; // object data = "STRING"; // object..

    [C#] 포인터 관련 unsafe fixed 키워드

    포인터를 사용하면 CLR에서 안전성을 책임지지 못하고, 불완전한 코드가 된다고 하며 에러를 발생하는데, 이렇게 예전 코드를 사용해야 할 경우, 빌드 속성을 변경해줌으로써 unsafe 코드를 사용 할 수 있다.사용 방법형식 또는 멤버 선언에서 unsafe 한정자를 사용할 수 있으며, 이렇게 선언해줄 경우 안전하지 않은 컨텍스트로 간주된다.  fixed 지시어는 unsafe 컨텍스트에서만 허용된다.  클래스가 인스턴스화 되면  CLR에 의해 언제든지 메모리가 이동 될 수 있는데, fixed 지시어를 이용하면 해당 코드에 들어간 변수 및 객체는 가비지 콜렉팅이 발생할 때 주소 재배치 대상이 아니게 된다.unsafe private uint reload(){ uint s0 = 0, s1 = 0; int..

    [C#] Marshal

    1. 데이터 타입IntPtr IntPtr 형식은 그 크기가 플랫폼마다 고유한 정수로 디자인 되었다. 즉, 이 형식의 인스턴스는 32비트 하드웨어 및 운영 체제에서는 32비트로, 64비트 하드웨어 및 운영 체제에서는 64비트여야 한다.  IntPtr 형식은 포인터를 지원하는 언어에서 사용할 수 있으며, 포인터를 지원하는 언어와 포인터를 지원하지 않는 언어 사이에서 데이터를 참조하는 일반적인 방법이 된다.  핸들을 보관하는 데도 IntPtr 개체를 사용할 수 있다. 예를 들어, IntPtr의 인스턴스는 파일 핸들을 보관하기 위해 System.IO..::.FileStream 클래스에서 광범위하게 사용된다.  IntPtr 형식은 CLS 규격이지만, UIntPtr 형식은 그렇지 않다. 공용 언어 런타임에서는 In..

    [C#] 관리되는, 관리되지 않는 코드

    관리되는 코드.NET CIL로 작성하고 컴파일 하는 .NET상의 코드 -GC 메모리 관리가 된다 관리되지 않는 코드기계 코드를 직접 컴파일 하도록 컴파일되는 .NET에 없는 코드 -GC 메모리 관리가 안된다.ex) 윈도우 시스템 자원IntPtr - 인터포인터관리되지 않는 메모리 블록에 대한 포인터 정수형 포인터를 의미하는 값 형식의 타입포인터는 메모리 주소값을 보관하는 곳IntPtr 타입은 메모리 주소를 가리키는 것 외에 윈도우 OS의 핸들값을 보관하는 용도로 쓰인다. 핸들은 윈도우 OS가 특정 자원에 대한 식별자로서 보관하는 값인데 일례로 파일이 좋은 예다.파일처리, OS에서 제공되는것 처리를 할 때 사용된다.ex) 이미지 처리에서도 쓰인다.Marshal Class - 마샬관리되지 않는 메모리 블록 ..

    [C#] DLL 파일 생성, 참조하는 법

    DLL이란?DLL (Dynamic Link Library)은 동적 링크 라이브러리의 약자로 표준화된 함수나 데이터를 모아놓은 것을 의미한다. 장점) - 한 코드를 여러 프로그램이 동시에 사용하기 때문에 메모리가 절약된다.- 리소스의 교체가 가능하다.- 재사용성이 뛰어나다.- 정적 링크를 사용하는 경우 실행 파일에 라이브러리의 함수가 모두 포함되어 실행파일이 커지지만 DLL을 사용하는 프로그램은 크기가 작다. C#을 이용해 DLL 파일을 생성 및 참조하는 방법은 다음과 같다 1. Visual Studio 실행 후 새 프로젝트를 만든다. 2. 이때 프로젝트 템플릿은 클래스 라이브러리로 생성해줘야 한다. 3. 프로젝트 명은 Calculator로 이름 짓고 다음을 클릭한다. 4. 클래스 명을 'Cal'으로 변경..

    [C#] Newtonsoft.Json 사용방법

    먼저 Nuget으로 Newtonsoft.JSON을 다운, 참조한다. 샘플 코드 아래 data1와 data2를 참조하려면 JsonExample 클래스로 받아와야 하는데 이때 제너릭 함수를 활용한다. using System; using Newtonsoft.Json; namespace NewtonsoftExample { class JsonExample { public int data1 { get; set; } public string data2 { get; set; } } class Program { static void Main(string[] args) { // Json 형식의 데이터 var json = "{'Data1' : 1, 'Data2' : 'Test'}"; // Json 형식의 string 값을 ..

    [C#] Nuget이란?

    NuPack 기반의 NuGet은 free and open-source package manager desigend for the MS developer platform 이다. .Net 프레임워크를 위한 소스코드 관리자이다. C# 기반으로 시작되어, 2013년 부터 native c++ 프로젝트를 지원하면서 visual studio에서 가장 대표적인 오픈소스 지원 프로젝트 2010부터 시작되어, 2012 vs 버전 부터는 기본설치로 제공 되었음. NuGet은 visual studio add-in 으로서, .net을 기본으로 하여, c++, cross-platform 지원 등을 통해, 그 범위를 넓혀 다양한 오픈소스 프로젝트들을 지원함으로서, NuGet Eco-System을 구축해 나아가고 있다. 환경 NuG..

    [C#] 람다식 (Lambda Expression)

    람다식(Lambda)식은 접근자, 함수 이름, return문이 없는 익명 함수(anonymous function)다. 람다식을 사용하면 더 짧은 코드를 작성할 수 있으며 => 연산자를 사용한다. class Program { static int DoubleFunc(int num) { return num * 2; } static void Main(string[] args) { Console.WriteLine(DoubleFunc(10)); } } // 람다식 사용 class Program { static void Main(string[] args) { Func DoubleFunc = (num) => num * 2; int num = 10; Console.WriteLine(DoubleFunc(num)); } }..

    [C#] 배열의 타입을 변경하는 방법 (제네릭 가능)

    1. Array 클래스의 ConvertAll 메서드 public static TOutput[] ConvertAll ( TInput[] array, Converter converter); TInput[] array - 특정 타입으로 변환하고 싶은 배열을 전달한다. Convert converter - 배열의 요소를 특정 타입으로 변환하는 변환기를 전달한다. - TInput: 기존 배열의 타입을 설정한다. - TOutput: 변환하고 싶은 타입을 설정한다. ConvertAll() 메서드는 특정 타입으로 변환된 새로운 배열을 반환한다. 다음 예제는 string 타입의 배열을 int 타입의 배열로 변환된 새로운 배열을 반환한다 class Program { public static int stringToInt(st..