23.04.11 Day51

오윤범·2023년 4월 11일
0

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 의 내용 출력

0개의 댓글