C#
Collection
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace cs23_collection { class CustomEnumerator { int[] list = { 1, 3, 5, 7, 9 }; public IEnumerator GetEnumerator() { yield return list[0];//메서드를 빠져나가지 않고 값만 돌려줌 yield return list[1]; yield return list[2]; yield return list[3]; yield break; } } class MyArrayList : IEnumerator,IEnumerable { int[] array; int position = -1; public MyArrayList() { array = new int[3]; //기본크기 3 } public int this[int index] { get { return array[index]; } set { if(index>=array.Length) { Array.Resize<int>(ref array, index + 1); Console.WriteLine("MyArrayList Resize : {0}", array.Length); //개발 완료 후 주석처리 } array[index] = value; } } #region< IEnumerable 인터페이스 구현 > public IEnumerator GetEnumerator() { for(var i=0; i<array.Length; i++) { yield return array[i]; } } #endregion #region < IEnumerator 인터페이스 구현> public object Current { get { return array[position]; } } public bool MoveNext() { if (position == array.Length - 1) { Reset(); return false; } position++; return(position<array.Length); } public void Reset() { position = -1; } #endregion } internal class Program { static void Main(string[] args) { var obj = new CustomEnumerator(); foreach(var item in obj) { Console.WriteLine(item); } var myArrayList = new MyArrayList(); for(var i=0; i<=5; i++) { myArrayList[i] = i; } foreach(var item in myArrayList) { Console.WriteLine(item); } } } }
Generic(일반화)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace cs24_generic { #region< 일반화 클래스 > class MyArray<T> where T : class //where T : class 사용할 타입은 무조건 클래스 타입 { T[] array; } #endregion internal class Program { #region< 일반화 메서드 > // Generic , 일반화 static void CopyArray<T>(T[] source, T[] target) //T로 선언하면 모든 자료형 다 받을 수 있음 { for(var i=0; i<source.Length; i++) { target[i] = source[i]; } } #endregion static void Main(string[] args) { #region< 일반화 > int[] source = { 2, 4, 6, 8, 10 }; int[] target = new int[source.Length]; CopyArray(source, target);//복사 foreach(var item in target) { Console.WriteLine(item); } #endregion Console.WriteLine("일반화 컬렉션"); //일반화 컬렉션 List<int> list = new List<int>(); for(var i =10; i>0; i--) { list.Add(i); } foreach(var item in list) { Console.WriteLine(item); } list.RemoveAt(3);//7 삭제 Console.WriteLine("3번째 인덱스 값 삭제"); foreach(var item in list) { Console.WriteLine(item); } //일반화 Stack Stack<float> stFloats = new Stack<float>(); stFloats.Push(3.15f); stFloats.Push(9.99f); while(stFloats.Count > 0) { Console.WriteLine(stFloats.Pop());//스택 구조대로 Pop됨 } //일반화 Queue Queue<string> qStrings = new Queue<string>(); qStrings.Enqueue("Hello"); qStrings.Enqueue("World"); while(qStrings.Count > 0) { Console.WriteLine(qStrings.Dequeue()); } //일반화 Dictionary Dictionary<string,int>dicNumbers = new Dictionary<string,int>(); dicNumbers["일"] = 1; dicNumbers["이"] = 2; dicNumbers["삼"] = 3; dicNumbers["사"] = 4; Console.WriteLine(dicNumbers["삼"]); } } }
Exception(예외 처리)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace cs25_exception { internal class Program { static void Main(string[] args) { int[] array = { 1, 2, 3 }; try { for (var i = 0; i < 5; i++) { Console.WriteLine(array[i]); } } catch(Exception ex) { Console.WriteLine(ex.ToString()); } finally// 보통 file 객체 close , DB 연결 종료 , 네트워크 소켓 닫을 떄 주로 사용 { //예외가 발생하더라도 무조건 처리해야하는 로직 Console.WriteLine("계속 진행"); } #region<예외 던지기> try { DivideTest(array[2], 0); } catch(Exception e)//메서드를 호출 했는데 0으로 나누는 예외가 발생하여 { //49행의 throw를 통해 던진 오류문을 받아오고 Console.WriteLine(e.Message);//출력함 } #endregion } private static void DivideTest(int v1, int v2) { try { Console.WriteLine(v1 / v2); } catch(Exception)//DivideTest 메서드 수행 시 오류발생하면 오류를 던짐 { throw new Exception("DivideTest 메서드에서 예외 발생"); } } } }
1) DivideTest 메서드를 try catch로 구현 후 나눌 때 오류 발생하면 throw로 오류 메시지를 던져주고
2) DevideTest 호출 시 try,catch로 구분하여 예외 발생하면 DivideTest 메서드 내부에서 던진 오류문을 받아와서 이를 호출하면서 출력함
C# WPF
파일탐색기 마무리
코드 받아쓰기 정도밖에 안되기 때문에 깃헙 링크만 첨부
C#과 MySQL DB 연동
microsoft/sql-server-samples 예제로 실습
https://github.com/microsoft/sql-server-samples
--> 전체 파일 코드 DownloadZip , 압축 풀고 samples - databases - northwind-pubs - instnwnd.sql / instpubs.sql 파일 MicroSoft SQL Server Management Studio로 드래그 해서 긁어 온 후 실행 / DB 새로고침후 DB 생성되는지 확인--> Microsoft SQL Server Management Studio - 도구 - 환경 - 글꼴 및 색 D2Coding으로 변경 - 일반 텍스트 줄 번호 선택 - SQL Server 개체탐색기 , 테이블 및 뷰 옵션의 명령 값 둘다 0으로 변경
1) WinForm(.NET) 만들고 보기 - 서버탐색기 - 데이터 연결(우클릭) - 연결추가 - MySQL SQL Server
2) 서버이름:localhost / 인증:Sql Server 인증 / 사용자 이름:sa , 암호 설정
3) 데이터베이스에 연결 - Northwind
4) 고급 - 최하단 경로 Ctrl+c(복사) - 확인
DataGridView 삽입 후 재생버튼 - 데이터 소스선택 - 프로젝트 데이터 소스 추가 - 데이터베이스 - 데이터 세트 - NowrthwindConnectionString - 예,중요한 데이터를 연결 문자열에 포함합니다 선택
정상적으로 선택된다면 다음과 같은 DB 의 내용 출력