본문 바로가기

IT Study/C#12

[C#] 리플렉션(Reflection), 애트리뷰트(Attribute) 리플렉션 (Reflection) : 런타임에 클래스나 객체의 타입 정보를 조사하는 기능 - 보통 컴파일러에 의해 기계어로 바뀌고 나면 사라지지만, C#은 컴파일된 결과 코드뿐만 아니라 타입에 대한 메타 데이터를 실행 파일에 같이 기록해놓기 때문에 실행 중에도 정보를 조사할 수 있다. - 루트 클래스인 Object에 있는 GetType() 메서드를 통해 얻은 Type 객체를 통해 수행이 가능하다. Type 객체를 얻는 방법 1. 루트 클래스인 Object의 GetType 메서드를 호출한다. - 정적 메서드가 아니므로 객체가 있어야 호출 가능하다. 객체.GetType() 2. Type의 정적 메서드인 GetType 메서드를 호출한다. - 클래스 이름(문자열)으로 정보를 조사하므로 객체가 없어도 호출이 가능하.. 2021. 3. 4.
[C#] 확장 메서드, 람다 확장 메서드 : 기존의 클래스를 그대로 유지한 채로 메서드를 추가할 수 있는 방법을 제공한다. - 여기서 this는 호출 객체를 의미하는 참조자가 아니라, 뒤의 클래스에 대한 확장 메서드임을 의미하는 지정자 이다. using System; public class Test { public int num = 0; public Test(int num) { this.num = num; } public int Plus(int a) { return a + num; } } public static class TT { public static int Minus(this Test t, int a) { return t.num - a; } } class CExample { static void Main() { Test te.. 2021. 1. 25.
[C#] 프로퍼티(Property), 익명 타입 1. 프로퍼티(Property) 자바에서 Getter Setter 를 사용할 때 클래스의 멤버 변수가 많아질 때마다 코드가 길어지는 불편함이 있었다. C#에서의 프로퍼티라는 메서드(?)도 필드(?)도 아닌 이 기능으로 정리하자면 이렇다. class Human { private string name; private int age; public string Name { get { return name; } set { name = value; } } public int Age { get { return age; } set { age = value; } } } 이를 조금 더 단순화 시켜서 이런 식으로 정의할 수 있다. 자동구현 프로퍼티 라고 한다. using System; namespace ConsoleAppl.. 2021. 1. 25.
[C#] 암묵적 타입 암묵적 타입 : 변수를 선언할 때 타입을 명시적으로 밝히지 않고 대신 var 키워드로 선언하는 방식이다. (JavaScript와 유사한 듯?) - 변수를 선언할 때 암묵적 타입을 쓸 것인가 아닌가는 선택 사항이다. 하지만, 익명 타입에 대해서는 반드시 var를 사용해야 한다. (익명 타입은 그 자체로 암시적이기 때문에 명시적으로 타입을 밝힐 방법이 없기 때문) using System; namespace ConsoleApplication1 { class ExClass { static void Main(string[] args) { var x = 10; var y = 20; var str = "문자열"; Console.SetCursorPosition(x,y); Console.WriteLine(str); } .. 2021. 1. 25.
[C#] 스레딩(Threading) * volatile : 여러 필드에 의해 값이 수정될 수 있음을 나타낸다. (최적화 하지 않고 반드시 메모리에서 읽어올 것) Thread.Join() : 개체가 가리키는 스레드가 종료될 때까지 현재 스레드를 차단하거나 대기 상태로 만든다. - 작업자 스레드가 반환되고 자체 종료될 때까지 반환되지 않는다. * Abort를 호출하면 작업이 완료되었는지 여부와 관계없이 스레드가 종료되어 리소스를 정리할 수 없다. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 { class ExClass { private vo.. 2021. 1. 25.
[C#] 델리게이트(Delegate) 1. 델리게이트 (대리자) : 메서드를 참조하는 형식으로 대리자에 메서드가 할당되면 대리자는 이 메서드와 똑같은 방식으로 동작한다. 대리자를 통해 메서드를 매개 변수로 전달할 수 있다. 대리자를 사용하여 콜백 메서드를 정의할 수 있다. 여러 대리자를 연결할 수 있다. (델리게이트 체인) 2. 콜백 메서드 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { // 델리게이트 선언 public delegate void del(string s); public static void dele.. 2021. 1. 24.