본문 바로가기

C# 문법

(26)
[C#] Class에서 인덱서[T] 사용하기 인덱서[T] 인덱서는 클래스나 구조체의 인스턴스를 배열처럼 인덱싱할 수 있습니다. 인덱싱 값은 형식이나 인스턴스 멤버를 명시적으로 지정하지 않고도 설정하거나 검색할 수 있습니다. 인덱서는 해당 접근자가 매개 변수를 사용한다는 점을 제외하면 속성과 유사합니다. 인덱서는 내부 컬렉션 또는 배열을 캡슐화 하는데 주로 사용되는 형식 Public int this[int index] 간단한 예제 public void Run() { StringArray strArr = new StringArray(); strArr[4] = "Yangbeng! Good Boy"; Console.WriteLine(strArr[4]); } public class StringArray { private T[] _arr = new T[10]..
[C#] 널 조건부 연산자 / 널 연산자 널 조건부 연산자(Null-donditional Operator) null 조건부 연산자는 피연산자가 null이 아닌 것으로 평가되었을 때만 맴버액세스 ?. 연산을 피연산자에 적용하며, 그렇지 않으면 null을 반환합니다. a가 null로 평가되면 a?.x의 결과는 null 입니다 a가 null이 아닌 것으로 평가되면 a?.x의 결과는 a.x와 같습니다. ?. 사용 방법 public void Run() { //입력된 str값이 널이 아닐경우, str.string()값을 리턴 null일경우 null을 리턴 Func checkNullString = delegate (string str) { return str?.ToString(); }; Console.WriteLine(checkNullString(null)..
[C#] C# 5.0 await / async - 비동기 FileRead => ReadAsync await / async C# 5.0에서는 await / async 예약어가 추가되었습니다. 이 예약어를 이용하면 비동기 호출을 사용할 수 있습니다. 만약 동기 FileRead 상태라면 public void Run() { //데이터 Read를 동기로 호출! SyncRead(); //호출이 완료되고 Main에서는 1ms로 숫자를 표시 for(int i=0; i< 30; i++) { Console.WriteLine(i); Thread.Sleep(1); } } private async void SyncRead() { using (FileStream fs = new FileStream(@"./YangbengHis.xml", FileMode.Open, FileAccess.Read)) { byte[] buffer ..
[C#] Enum에 Name List / Value List 가져오기 Enum.GetValues(Type) / Enum.GetNames(Type) 지정된 열거형에서 상숫값(문자열)의 배열을 검색합니다. Enum 정보 가져오기 public enum Colors { red = 0, green = 1, blue = 2, yellow = 3 } public void Run() { Console.WriteLine("Enum에 저장된 Name 가져오기"); //Enum에 저장된 Name List로 가져오기 var nameList = Enum.GetNames(typeof(Colors)); foreach (var name in nameList) Console.WriteLine($"{name}"); Console.WriteLine("Enum에 저장된 Value값 가져오기"); var va..
[C#] BackgroundWorker BackgroundWorker 특징 BackgroundWorker클래스는 별도의 스레드에게 어떤 일을 시키기 위해 사용하는 클래스이다. Thread이지만, 별도의 작업없이도 UI를 제어할 수 있다.이벤트 DoWork이벤트 핸들러를 통해 실제 작업할 내용을 지정 ProgressChanged이벤트를 통해 진척 사항을 전달 RunWorkerCompleted 이벤트를 통해 완료 후 실행될 작업을 지정Program 참고 버튼을 클릭하면 BackgroundWoker에서 1~100까지 값이 증가 값의 증가에 따라 ProgressBar의 상태 변화! 버튼과, Progressbar만 놓고 바로 Test 가능 합니다. BackgroundWorker private BackgroundWorker _woker; public F..
[C#] Delegate Delegate란? 델리게이트는 대리자 혹은 c언어에서 쓰이는 포인터와 같은 개념입니다. 즉 대신 일해주는 녀석인데 주로 메소드를 참조(진짜 포인터랑 비슷)하고 있는 영역이라고 말 할 수 있습니다. 주의할 점은 전달할 매소드의 매개변수와 반환 값이 델리게이트와 같아야 합니다. 사용 방법 delegate 반환형 델리게이트명(매개변수..); Delegate 사용 방법 private delegate int SummaryDelegate(int a, int b); private int Sum(int a, int b) => a + b; public void Run() { //Sum이라는 메서드를 sd1이 참조하여 사용 할 수 있습니다. SummaryDelegate sd1 = Sum; //간단한 메서드 같은경우 아래..
[C#] EventHandler - 이벤트에 특정값(Class)전달 EvenHandler 일반적인 EventHander는 이벤트 발생시 전달할 값이 없는 이벤트를 나타냅니다. public delegate void EventHandler(object? sender, EventArgs arg); 매개 변수 Sender => Object 이벤트 호출자, 이벤트 소스라 불립니다. arg => EventArgs 이벤트 데이터가 포함되지 않은 개체입니다. 그냥 이벤트 호출자의 정보(sender)를 전달하거나, 혹은 이벤트를 통해 해당시 점의 특정 메서드를 실행시킬 때 사용> EvntHander 사용 방법 //이벤트를 선언 private event EventHandler ShowMessage; public void Run() { //단지 Event를 통해 ShowMessage를 보여..
[C#] Linq에서 특정 Type만 가져오기 Linq를 이용해서 특정타입만 필터링해서 가지고 오고 싶을경우가 있습니다. 이때 Where조건을 쓰는 방법도 있지만, 저는 주로 ofType을 사용합니다. Cast를 이용해 강제 형변환시키면 되지 않나? 이 경우는 내가 타입을 알고 있어서, 그 타입을 사용하겠다 사용할때만 사용이 가능합니다. Cast 에서 이 특정타입에 맞지 않은 값이 오게되면, Error가 발생 합니다. Cast public void Run() { object[] obj = new object[] { (string)"양뱅", (int)33, (string)"동목", (string)"다방" }; //object Array를 string 타입으로 Casting 을 obj.Cast() .Select(f => f) .To..
[C#] Enumerable.Zip, Linq에서 Zip을 이용하여 결합하기 Enumberable.Zip에 관한 MSDN의 설명을 보겠습니다. Zip(IEnumerable, IEnumerable, Func) TFirst (첫 번째 결합 대상), TSecond(두 번째 결하 대상) Func (결합된 결과를 특정 형식으로 저장한다.) Zip의 경우 두 결합대상의 시퀀스 요소만큼 결합을 합니다. Enumerable.Zip 활용법 public void Run() { //numRange의 10개의 값을 가지고 있고 var numRange = Enumerable.Range(1, 10); //strArray는 4개의 값을 가지고 있습니다. var strArray = new string[] { "그 남자 그 여자", "오르막길", "엄마의 꿈"..
[C#] Linq에서 Join을 이용하여 데이터 결합하기(질의 문) Inner Join 내부 조인(Inner Join)은 교집합과 비슷합니다. 두 데이터의 특정 필드를 비교해서 일치하는 데이터만 모아서 반환합니다. Inner Join 질의 문 형식 (비교 조건이 1개일 경우) public void Run() { var peopleList = new People[] { new People() {Name = "양뱅", Age = 33, City = "수원"}, new People() {Name = "추남", Age = 33, City = "군포"}, new People() {Name = "쏭", Age = 33, City = "서울"}, new People() {Name = "쩌주", Age = 33, City = "서울"}, new People() {Name = "털", ..