"콘솔 응용 프로그램"으로 프로젝트 하나 만듦.



==> Program.cs




// 프로세스(Process) : 하나의 프로그램 단위(프로젝트)
// 스레드(Thread) : 프로세스안에서 실행하는 단위 프로그램(메서드)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace 스레드
{
    class Program
    {
        static void Main(string[] args)
        {
            //Win();
            //Sql();
            //Ide();
            ThreadStart ts1 = new ThreadStart(Win);
            ThreadStart ts2 = new ThreadStart(Sql);
           

            Thread t1 = new Thread(ts1);
            Thread t2 = new Thread(ts2);
            Thread t3 = new Thread(new ThreadStart(Ide));

            t3.Priority = ThreadPriority.Highest; // 우선순위 높게

            t1.Start();
            t2.Start();
            t3.Start();

            // 프로세스
            Process.Start("IExplore.exe"); // 익스플로어 실행
            Process.Start("Notepad.exe"); // 메모장 실행

        }

        private static void Ide()
        {
            DelayTime();
            Console.WriteLine("[3] IDE : Visual Studio");
        }

        private static void Sql()
        {
            Thread.Sleep(3000); // 3초 딜레이
            Console.WriteLine("[2] DBMS : SQL Server");
        }

        private static void Win()
        {
            DelayTime();
            Console.WriteLine("[1] OS : Windows Server");
        }

        private static void DelayTime()
        {
            for (int i = 0; i < 1000000000; i++) { } // 시간지연 메서드           
        }
    }
}



/*
스레드 영역에 메서드 올려놓고 운영체제에서 실행함
- 프로세스는 코드에서 작성(호출)한대로 절차지향식으로 실행됨.
*/




< 실행결과 >

--> 콘솔창에서는 스레드를 실행한 결과가 나왔으며("Program.cs"의 분홍색 형광펜 부분), "프로세스"를 실행한 결과 "웹브라우저 창"과 "메모장"이 순서대로 실행되고 열렸다("Program.cs"의 하늘색 형광펜 부분).




Posted by holland14
:


Visual Studio 2008에서 파일 --> 새로만들기 --> 새 프로젝트 --> "새 프로젝트 추가"창에서 "Visual C# --> Windows"로 선택한 후 --> "Visual Studio에 설치되어 있는 템플릿"에서 "클래스 라이브러리"선택 후 이름(여기서는 "psh.Library"로 클래스 라이브러리의 이름 지정)과 저장위치 정한 후 프로젝트 만들기
--> '솔루션 탐색기'의 "psh.Labrary"에서 Class1.cs파일 삭제 후 다시 "psh.Labrary" 우클릭 --> 추가
--> 새항목 --> '새 항목 추가'창에서 "클래스"로 선택하고 파일명은 "Board.cs"(게시판)로 지정하여 클래스파일 생성함. --> "Board.cs"에 아래의 코드 입력하여 "나만의 라이브러리(Labrary)" 만들기(만들어 둔 나만의 라이브러리를 다른 클래스에 삽입하여 기능을 구현할 수 있다. 하지만 여기서 작성한 코드는 작성한 클래스인 "Board.cs"에서는 실행될 수는 없다. 왜냐면 이 코드들은 "클래스 라이브러리" 이므로... 나중에 다른 예제에서 여기서 만들어 둔 나만의 라이브러리를 활용할 수 있는 부분이 있으면 다른 클래스에서 적절히 활용하여 구현하면 된다.)



==> Board.cs



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace psh.Library
{
    public class Board
    {
        /// <summary>
        ///  파일명(test.gif)을 넘겨주면 이미지 파일인지 아닌지를 결정
        /// </summary>
        /// <param name="fileName">.jpeg, .jpg, .png, .gif</param>
        /// <returns></returns>
        public static bool IsPhoto(string fileName)
        {
            // 완성해보세요~
            string temp = "";
            temp = fileName.Substring(fileName.LastIndexOf(".") + 1);
            if (temp == "jpeg" || temp == "jpg" || temp == "png" || temp == "gif")
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        /// <summary>
        ///  1048576 이 넘겨오면, 1MB 반환 : 즉, Byte, KB, MB, GB단위로...
        /// </summary>
        /// <param name="fileSize"></param>
        /// <returns></returns>
        public static string GetFileSize(long fileSize)
        {
            long temp = 0;
            long Byte = 0;
            long KB = 0;
            long MB = 0;
            long GB = 0;
            string total = "";
            temp = fileSize;
           
            if (temp >= 1073741824)
            {
                GB = temp / 1073741824;     // GB 단위
                temp -= GB * 1073741824;
                total += Convert.ToString(GB) + "GB ";
            }
            if (temp >= 1048576)
            {
                MB = temp / 1048576;        // MB 단위
                temp -= MB * 1048576;
                total += Convert.ToString(MB) + "MB ";
            }
            if (temp >= 1024)
            {
                KB = temp / 1024;           // KB 단위
                temp -= KB * 1024;
                total += Convert.ToString(KB) + "KB ";
            }
            if (temp > 0)
            {
                Byte = temp;
                total += Convert.ToString(Byte) + "Byte";   // Byte 단위
            }
            return total;
        }
    }
}





Posted by holland14
:

교재 14장


1. Visual Studio 2008을 사용해서 DLL 파일 만들기(프로젝트 단위)
 각각의 웹폼/ 윈폼/ 콘솔에서 DLL파일 복사해서 사용
  

2. GAC에 DLL파일 올려놓고, DLL파일을 따로 복사하지 않고 사용하기(여러 대 서버에서 관리)
 해당 서버에 딱 하나만 GAC영역에 올려놓고 모두 사용


3. 웹 서비스 : 서버 한대 올려놓고, 수백/수천대에서 접속해서 사용(한 곳에서 관리)
 로직/기능이 한곳에 있고, 여러 컴퓨터에서 접속해서 공통 사용


4. WCF : MS관련해서는 위와 같은 기능들의 최종점...(한 곳에서 관리)



 

Posted by holland14
:


'솔루션 탐색기'에서 "GAC사용하기"프로젝트에 마우스 우클릭 --> 추가 --> '새 웹 사이트' 클릭 --> '새 웹사이트 추가'창에서 'Visual Studio에 설치되어 있는 템플릿'에서 "ASP.NET 웹 서비스"로 선택하고 '언어 -> Visual C#'으로 선택하고 저장할 위치 선택하여 '확인'버튼 클릭하면 "APP_Code/Service.cs" 코드창이 뜨는데(여기서는 "APP_Code/MyCalculator.cs") 이 코드에서 "[WebMethod]"로 쓰여있는 아래부분의 코드인 " public string HelloWorld() { return "Hello World"; } "를 지우고 다시 씀.(여기서는 아래의 "App_Code/MyCalculator.cs"의 코드와 같이 "[WebMethod]"아래에 " public int Minus(int a, int b) { return (a - b); } } "로 수정했음. 뺄셈연산을 하는 (웹)메서드 임.)


 

==> App_Code/MyCalculator.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

/// <summary>
/// MyCalculator의 요약 설명입니다.
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// ASP.NET AJAX를 사용하여 스크립트에서 이 웹 서비스를 호출하려면 다음 줄의 주석 처리를 제거합니다.
// [System.Web.Script.Services.ScriptService]
public class MyCalculator : System.Web.Services.WebService
{

    public MyCalculator()
    {

        //디자인된 구성 요소를 사용하는 경우 다음 줄의 주석 처리를 제거합니다.
        //InitializeComponent();
    }

    [WebMethod]
    public int Minus(int a, int b)
    {
        return (a - b);
    }

}

 

 

--> "[WebMethod]"아래에 코드 수정한 "APP_Code/MyCalculator.cs"를 웹에 띄워야 함 --> 솔루션 탐색기에서 "Service.asmx"(여기서는 'C:\...\WebCalculator'에 속해있는 "MyCalculator.asmx") 마우스 우클릭 --> '브라우저에서 보기' 클릭(-> 이 작업은 웹에 내가 작성한 '코드("APP_Code/MyCalculator.cs")'를 띄운 것인데, 여기서는 "내가 작성한 코드를 웹에 띄우는 자가테스트"를 해볼 수 있도록 "Visual Studio에서 지원하는 Tool"로 '브라우저에서 보기'를 실행함으로서 웹에 띄우는 효과를 구현한 것이다. 실제로 웹에 띄우는 방식은 이 방법과는 다름.(-> 돈을 내고 ip주소나 도메인을 할당받아서 웹에 띄우는 방식 등등으로 웹서비스를 함.))



/* "MyCalculator.asmx" 마우스 우클릭 --> '브라우저에서 보기' 클릭하여 실행한 화면.
 "APP_Code/MyCalculator.cs"에서 작성한 코드를 웹에 띄우는 동작이다. */
 





--> 여기서는 "GAC사용하기"프로젝트에 속해있는 "(콘솔 응용 프로그램으로 만든)ConGAC"에서 마우스 우클릭 --> "서비스 참조 추가"클릭 --> "서비스 참조 추가"창에서 '검색'버튼 클릭(여기서는 '검색버튼'을 클릭하여 '주소(경로)'를 간단히 검색하였는데 이런 방법외에 실제상이라면 ip주소를 입력해서 검색하는 방법도 쓰면 된다.) --> "서비스" 탭에서 하위로 계속 클릭하면 "WebCalculator/MyCalculator.asmx\MyCalculator\MyCalculatorSoap"이 나오는데 "MyCalculatorSoap"을 클릭하면 옆의 '작업'탭에서 "Minus"라는 메서드가 뜨는 것을 볼수 있다. --> 그 다음에 여기서는 "서비스 참조 추가"창의 '네임스페이스'에 "Calc"로 이름을 지정한 후 '확인'버튼 클릭(이 작업은 "웹에서 서비스 참조"를 할 수 있도록 해당 웹(서버)의 주소를 지정해 준 작업이라고 할 수 있다.) 여기서 실행한 화면은 아래와 같다.








--> "GAC사용하기"프로젝트\"ConGAC"\"Program.cs"에서 웹에 올려진 "APP_Code/MyCalculator.cs"의 코드(메서드)를 참조(사용)하기 위한 코드를 아래와 같이 작성한다.("Calc.MyCalculatorSoapClient mcsc = new ConGAC.Calc.MyCalculatorSoapClient(); "코드와 
           "int r = mcsc.Minus(a, b); // 뉴욕에 있는 서버에서 가져오기" 코드를 타이핑 할 때 인텔리센스 되는지 확인할 것! "서비스 참조 추가"창에서 주소지정 및 이름입력 후 확인버튼 클릭하여 "(웹)서비스 참조 추가"가 올바로 되었다면 이 코드들을 타이핑할 때 인텔리센스 지원이 되어야 함. 인텔리센스가 지원이 안되고 있다면 다시 검토할 것!)


 

==> Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConGAC
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = 5;

            Calc.MyCalculatorSoapClient mcsc = new ConGAC.Calc.MyCalculatorSoapClient();

            int r = mcsc.Minus(a, b); // 뉴욕에 있는 서버에서 가져오기

            Console.WriteLine(r);
        }
    }
}

 

--> "ConGAC('콘솔 응용 프로그램'이다.)"의 "Program.cs"에서 위와 같이 코드 작성 후 실행해보면(Ctl + F5)("ConGAC.Program"를 '속성'에서 "시작 개체"로 설정하고 실행.), 웹에 올려진 "APP_Code/MyCalculator.cs"의 코드(메서드)를 참조하여 실행한 결과, 콘솔창에 실행 결과가 '5'로 나온다.


< 실행결과 >

"ConGAC"의 "Program.cs"를 "시작페이지로 설정"하고 실행하면 콘솔창에 다음과 같이 출력된다.







* 참고화면
위에서 "ConGAC"에서 "서비스 참조 추가"를 한 결과 아래 그림과 같이 "ConGAC\Service References"에 "Calc"라는 이름의 '웹참조주소(경로)'가 생성된 것을 볼 수 있다.





Posted by holland14
:


Visual Studio 2008에서 파일 --> 새로만들기 --> 새 프로젝트 --> 기타프로젝트 형식 --> Visual Studio 솔루션에서 "빈솔루션"에 이름과 저장위치 정하고 "프로젝트" 생성하기 --> 솔루션 탐색기의 프로젝트(여기서는 "전역어셈블리캐시"로 프로젝트 이름지정)에서 마우스 우클릭 --> 추가 --> 새 프로젝트 추가에서 "프로젝트 형식 --> C#" --> "Visual Studio에 설치되어 있는 템플릿"에서 "클래스 라이브러리"선택 후 이름(여기서는 "Watch"로 클래스 라이브러리의 이름 지정)과 저장위치 정한 후 프로젝트 만들기 --> "Watch"클래스 라이브러리의 Class1.cs 삭제 --> "Watch"클래스 라이브러리 우클릭 --> 추가 --> 새항목 --> "클래스"로 선택하여 이름 지정후(여기서는 "Clock.cs"로 이름지정) "확인"버튼 클릭 --> "Clock.cs"에 현재시간을 출력하는 코드 작성 --> "Watch"에 마우스 우클릭하여 "빌드"하여 "C:\...\Watch\bin\Debug폴더에 생성된 "Watch.dll"파일 생성하기



==> "Watch" (클래스 라이브러리형식) 프로젝트의 Clock.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Watch
{
    public class Clock
    {
        public static string NowTime()
        {
            return DateTime.Now.ToShortTimeString();
        }
    }
}


"Watch.dll파일"(여기서는 "Watch"클래스 라이브러리의 Clock.cs에서 코드작성 후 빌드해서 생성한 "Watch.dll")을 "C:\Windows\assembly"폴더에 복사하려고 하면 'MessageBox'에서 "어셈블리 Watch.dll에 강력한 이름이 필요합니다"라고 경고가 나오며 복사가 거부된다. 이를 복사하기 위해서는 우선 콘솔창에서 다음과 같이 '스트롱네임키'파일을 생성한다.("시작 -> 모든프로그램 ->Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 명령 프롬프트 '클릭' --> "콘솔창에서 아래 화면과 같이 sn.exe -k WatchKey.snk를 입력하여 "WatchKey.snk"를 생성한다.) -->




--> C드라이브에 생성된 "WatchKey.snk"파일을 "복사"하여 C:\...\Watch 폴더 안에 "붙여넣기"한다.) --> "Watch"클래스 라이브러리 마우스 우클릭 --> 속성 --> "서명"탭 선택 --> "어셈블리 서명"체크박스 서명한 후 '찾아보기'에서 "WatchKey.snk"파일이 복사된 경로를 찾아서 "WatchKey.snk"파일 선택(=열기) 후 '속성'창 닫기--> "Watch"클래스 라이브러리 마우스 우클릭하여 "다시 빌드"하여 "WatchKey.snk"파일이 복사(추가)되어 다시 생성된 "Watch.dll"파일을 만든다. -->


/* C드라이브에 생성된 "WatchKey.snk"파일을 "복사"하여 C:\...\Watch 폴더 안에 "붙여넣기"하고 '속성'에서 "서명"에 '체크 및 경로 지정'후 "다시 빌드"하면 'Visual Studio'의 '솔루션 탐색기'에서도 "WatchKey.snk"파일이 "Watch"프로젝트에 복사(삽입)된 것을 볼 수 있다. */





--> "WatchKey.snk"파일을 복사하고 "다시 빌드"해서 재생성된 "C:\...\Watch\bin\Debug폴더의 "Watch.dll"파일을 "C:\Windows\assembly"폴더에 추가(=복사/드래그&드롭)하면 "assembly"폴더에 "Watch.dll파일"이 추가(복사)된다.(이는 재생성된 "Watch.dll"파일이 "공용(전역)어셈블리캐시(=GAC)"에 등록되어 다른 프로젝트들에서도 "Watch.dll"파일을 사용(참조) 할 수 있게 된 것이다.) -->


/* C드라이브에 생성된 "WatchKey.snk"파일을 '복사'하여 'C:\...\Watch' 폴더 안에 "붙여넣기"한 후 '서명'에서 "WatchKey.snk"의 경로를 찾아서 선택 후 '다시 빌드'하여 다시 만들어진 "Watch.dll"파일이 "C:\Windows\assembly"폴더에 '붙여넣기(드래그&드롭)'하여 추가 된 화면 */



--> 이제 "assembly"폴더에 추가된 "Watch.dll"파일을 사용하는 프로젝트를 새로 하나 만든다.('파일' -> '새로 만들기' -> '프로젝트'클릭 -> '새 프로젝트'창에서 '프로젝트 형식 : Visual C#\Windows'로 선택하고 'Visual Studio에 설치되어 있는 템플릿'에서 '콘솔 응용 프로그램'으로 선택 후 '이름'(여기서는 "UseWatch"로 이름 지정)과 위치 지정하고 '확인'버튼 클릭) --> 새로 만든 "UseWatch"프로젝트의 "Program.cs"에서 "Watch"클래스 라이브러리 형식 프로젝트의 "Clock.cs"를 사용(참조)할 코드를 아래와 같이 작성해.("Program.cs"를 '속성'에서 '시작페이지로 설정' 할 것!)


==> "UseWatch" (콘솔 응용 프로그램)프로젝트의 Program.cs

// 전용 어셈블리 : DLL 파일이 프로젝트에 복사됨.
// 공용 어셈블리: 참조만하고 복사되지 않음.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace UseWatch
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Watch.Clock.NowTime());
        }
    }
}


/* Program.cs를 실행해보면 콘솔창에 현재 시간이 출력된다. "C:\...\UseWatch\bin\Debug"폴더 안에는 아래 그림처럼 "Watch.dll"파일이 존재하지 않는다. 하지만 "C:\Windows\assembly"폴더에 "Watch.dll"파일이 공용(전역)어셈블리캐시(GAC)로 들어있어서 이 파일을 이용(참조)하여 "UseWatch" (콘솔 응용 프로그램)프로젝트의 Program.cs를 실행하였다. 실행결과 "Clock.cs"가 동작(반환)하는 내용인 현재시간이 콘솔에 출력된다. */









< 실행결과 >

--> "UseWatch.Program"을 속성에서 '시작페이지로 설정'한 후 "Program.cs"를 실행(Ctl + F5)한 결과, 콘솔창에 현재시간이 출력된다.




Posted by holland14
:


1. DLL파일 만들기(생성하기)


Visual Studio 2008에서 파일 --> 새로만들기 --> 새 프로젝트 --> 기타프로젝트 형식 --> Visual Studio 솔루션에서 "빈솔루션"에 이름과 저장위치 정하고 "프로젝트" 생성하기 --> 솔루션 탐색기의 프로젝트(여기서는 "DLL파일만들기"로 프로젝트 이름지정)에서 마우스 우클릭 --> 추가 --> 새 프로젝트 추가에서 "프로젝트 형식 --> C#" --> "Visual Studio에 설치되어 있는 템플릿"에서 "클래스 라이브러리"선택 후 이름(여기서는 "Calculator"로 클래스 라이브러리의 이름 지정)과 저장위치 정한 후 프로젝트 만들기 --> "Calculator"클래스 라이브러리의 Class1.cs 삭제 --> "Calculator"클래스 라이브러리 우클릭 --> 추가 --> 새항목 --> "클래스"로 선택하여 이름 지정후(여기서는 Plus.cs로 이름지정) 저장 --> 간단한 덧셈관련 코드 작성 --> Calculator에 마우스 우클릭하여 "빌드"하여 "Calculator.dll"이라는 DLL파일 만들기



==> Plus.cs



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Calculator
{
    public class Plus
    {
        public static int Execute(int a, int b)
        {
            return (a + b);
        }
    }
}





2. "같은 프로젝트" 또는 "다른 프로젝트"에 있는 클래스의 코드 참조

"DLL파일만들기" 프로젝트에서 마우스 우클릭 --> 추가 --> 새 프로젝트 추가에서 "프로젝트 형식 --> C#" --> "Visual Studio에 설치되어 있는 템플릿"에서 "콘솔 응용 프로그램"선택 후 이름(여기서는 "ConCalculator"로 프로젝트 이름 지정)과 저장위치 정한 후 프로젝트 만들기 --> "ConCalculator"에 속해있는 "참조"에서 마우스 우클릭 후 "참조 추가"클릭 --> "참조 추가"창에서 "프로젝트"메뉴 탭 클릭 --> '프로젝트 이름'이 "Calculator" 선택 후 '확인버튼 클릭'하면 "Calculator"가 "ConCalculator"의 "참조"목록에 추가된다. --> "ConCalculator"의 "Program.cs"에서 "Calculator"클래스 라이브러리의 "Plus.cs"클래스의 코드를 참조한다.(다른 클래스의 참조하여 연산 또는 동작을 할 수 있다.) 




==> Program.cs



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConCalculator
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = 5;

            Console.WriteLine("{0}", Calculator.Plus.Execute(a, b)); // 15
        }
    }
}



3. WinForm의 예제로 DLL파일 참조하기(위의 2번 예제와 실행방식이 비슷함.)

"DLL파일만들기" 프로젝트에서 마우스 우클릭 --> 추가 --> 새 프로젝트 추가에서 "프로젝트 형식 --> C#" --> "Visual Studio에 설치되어 있는 템플릿"에서 "Windows Forms 응용 프로그램"선택 후 이름(여기서는 "WinCalculator"로 프로젝트 이름 지정)과 저장위치 정한 후 프로젝트 만들기 --> "WinCalculator"에 속해있는 "참조"에서 마우스 우클릭 후 "참조 추가"클릭 --> "참조 추가"창에서 "찾아보기"메뉴 탭 클릭 --> '찾는위치'와 '파일이름'을 검색하여 위의 "1"에서 만든(생성한) "DLL파일"을 선택 후 확인 버튼을 눌러 참조시킨다.(여기서는 "1"에서 만든 "Calculator.dll"을 선택("Calculator\bin\Debug\Calculator.dll")하여 참조시킨다.) "Calculator.dll" 선택 후 '확인버튼 클릭'하면 "Calculator"가 "WinCalculator"의 "참조"목록에 추가된다. --> "Form1.cs [디자인]" 폼에 'TextBox' 2개 "Label" 1개 "Button" 1개(속성에서 "Text -> 더하기"로 변경) 추가 후 "Button" 더블클릭하여 이벤트핸들러 아래 형광펜으로 색칠된 부분으로 코드작성


==> Form1.cs [디자인]





==> Form1.cs

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinCalculator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int a = Convert.ToInt32(textBox1.Text);
            int b = Convert.ToInt32(textBox2.Text);

            label1.Text =
                Convert.ToString(Calculator.Plus.Execute(a, b));
        }
    }
}



< 실행결과 >

--> 'TextBox'에 값 2개 입력후 '더하기' 버튼 누르면 'Label1'에 결과값 출력 됨.("1"에서 만든(생성한) 'Calculator'프로젝트의 "Calculator.dll"이 "WinCalculator"프로젝트에 참조된 결과임.)






4. 웹 사이트의 예제로 DLL파일 참조하기("dll"파일을 복사해서 생성한 웹 사이트(여기서는 "WebCalculator")에 내가 만든 "Bin"폴더에 "dll"파일을 붙여넣은 후 참조하는 방법.)

"DLL파일만들기" 프로젝트에서 마우스 우클릭 --> 추가 --> "새 웹 사이트" 클릭 --> '새 웹 사이트 추가' 창에서 "Visual Studio에 설치되어 있는 템플릿"에서 "ASP.NET 웹 사이트"선택 / '언어' -> 'Visual C#'으로 선택 / 저장위치 정한 후 프로젝트 만들기('= 새 웹사이트 추가', 여기서는 "WebCalculator"로 프로젝트 이름 지정) --> '솔루션 탐색기'의 "WebCalculator" 마우스 우클릭 --> "ASP.NET 폴더 추가" --> "Bin"클릭하여 "Bin"이름의 폴더 만들기 --> "Calculator\bin\Debug\Calculator.dll" 경로로 들어가서 "1"번째에서 만든 "Calculator.dll"파일을 복사 --> "WebCalculator\Bin(여기서의 Bin폴더는 "ASP.NET 폴더 추가" --> "Bin"클릭하여 내가 생성한 폴더임.)"의 경로로 들어가서 복사했던 "Calculator.dll"파일을 붙여넣기 --> "WebCalculator"아래 있는 "Default.aspx" 더블클릭 -->"Default.aspx"페이지의 왼쪽 아래쪽에 "디자인"버튼 클릭 --> 도구상자에서 'TextBox' 2개 "Label" 1개 "Button" 1개(속성에서 "Text -> 더하기"로 변경) 추가("Default.aspx"의 '디자인'에서 만든 폼형식은 아래와 같다.) -->


 


--> "Button" 더블클릭하여 "Default.aspx.cs"(Default.aspx에 속해있음.)에 생성되는 이벤트핸들러코드에 아래 형광펜으로 색칠된 부분으로 코드작성 --> "Default.aspx"에서 마우스 우클릭 --> "브라우저에서 보기"클릭





==> Default.aspx.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        int a = Convert.ToInt32(TextBox1.Text);
        int b = Convert.ToInt32(TextBox2.Text);

        Label1.Text = Convert.ToString(Calculator.Plus.Execute(a, b));
    }

}




< 실행결과 >

--> "1"에서 생성한 "Calculator.dll"파일을 "Calculator\bin\Debug"의 경로로 들어가서 복사 후 "WebCalculator\Bin"의 경로로 가서(여기 "Bin"폴더는 내가 생성한 폴더임.) 붙여넣기 하여 "Calculator.dll"파일을 "Bin"폴더에 추가하였다. 그 결과 "브라우저에서 보기"를 실행하면 '웹 사이트'에서 "Calculator.dll"파일을 이용하여 실행되는 것을 볼 수 있다. 








Posted by holland14
:


==> 증감연산자


using System;

public class 증감연산자
{
    public static void Main()
    {
        int a = 3;
        int b = 5;
        int c = 7;

        int d = ++a - --b * c--;

        Console.WriteLine("{0}", d);
    }
}


==============================================================================================


==> 시프트연산자


using System;

public class 시프트연산자
{
    public static void Main()
    {
        int a = 40;
        int r = 0;

        r = a >> 3; // 40 * 1/8(1/2의 3승)
        Console.WriteLine(r); //?

        r = a << 1; // 40 * 2(2의 1승)
        Console.WriteLine(r); //?
    }
}

/*
어떤 수를 2배 하는 코드가 필요하다?
a = a * 2;
a *= 2;
a <<= 1 ; 속도 가장빠르다.
*/


==============================================================================================


==> 비트연산자


using System;

public class 비트연산자
{
    public static void Main()
    {
        int a = 3;
        int b = 2;

        Console.WriteLine(a & b); // 비트 AND (논리곱) ==> 둘 다 참일 때만 참, 곱하기
        Console.WriteLine(a | b); // 비트 OR (논리합) ==> 하나라도 참이면 참, 더하기
        Console.WriteLine(a ^ b); // 비트 XOR (배타적논리합) ==> 서로 다를 때(배타적)만 참
        Console.WriteLine(~a); // 비트 NOT (부정) ==> 참이면 거짓, 거짓이면 참
    }
}

/*
음수 이진수 : 2의 보수법 : 부호를 붙이고 1을 더함
*/


==============================================================================================


==> 선택정렬


using System;

public class 선택정렬
{
    public static void Main()
    {
        int[] data = { 3, 5, 1, 2, 4 };

        // Process
        for (int i = 0; i < data.Length - 1; i++)
       {
                for (int j = i + 1; j < data.Length; j++)
               {
                    if (data[i] > data[j])
                   {
                        Swap(ref data[i], ref data[j]);
                   }
               }
       }
        for (int i = 0; i < data.Length; i++)
       {
            Console.WriteLine("{0}", data[i]);
       }
    }
    private static void Swap(ref int i, ref int j)
    {
        int temp = i; i = j; j = temp;
    }
}


==============================================================================================


==> 이진검색





==============================================================================================


/*

배수의 합
선택정렬 : 코드를 외워라~

이진검색 : 의미만~

*/

Posted by holland14
:

C# 콘솔 파트 관련 단어/카테고리 정리


C# 문법
절차지향 프로그래밍
1. 기본구조
2. 입출력문
3. DataType / Variable / Constant
4. Operators
5. Statements
6. Array
7. Function/Sub Procedure/Sub Routine(Method)
8. Struct / Enumeration
9. Class(BuiltIn)


개체지향 프로그래밍
1. Class : 자동차 설계도
     a. Main Method : Entry Point
     b. Field : 자동차 부품
     c. Method : 자동차 동작
     d. Constructor : 조립/시동걸기
     e. Destructor : 폐차/주차(요원)
     f. Property : 색상/크기/모양/...
     g. Indexer : 카탈로그
     h. Delegate : 대리운전(다중메서드호출)
     i. Event : 사고(메서드 수행결과)
     j. Attribute : 자동차 튜닝
2. Namespace : 자동차 브랜드
3. Interface : 자동차 설계 표준


객체지향 관련 용어
Inheritance : 상속
     super/base/parent클래스의 기능을 sub/derived/child 클래스에 상속
Encapsulation : 캡슐화
     필드를 꽁꽁 숨겨라… Field는 무조건 private
     외부에 공개시 public한 Property로 공개
Override : 오버라이드
     부모의 멤버를 자식에서 재 정의
Overload : 오버로드
     메서드 다중 정의, 동일한 이름의 메서드를 여러 개 선언
Abstraction : 추상화
     부모 클래스에는 멤버명만 정의하고 실제 구현은 자식에서
Instance : 인스턴스
     클래스로부터 개체를 생성해나가는 단계
Polymorphism : 다형성
     동일 개체를 호출하는 관점에 따라서 다른 일 수행
     부모 클래스의 인스턴스 호출시와 자식 클래스의 인스턴스 호출시 다름
     오버라이드 == 다형성
Sealed Class : 봉인 클래스
     더 이상 상속되지 않는 클래스, 최종 클래스
Object Class : 최상위 클래스
     C#에서의 최상위 클래스, 시조(?) 클래스
Access Modifiers : 접근 한정자
     private(전용) : this 내에서만 공개
     protected(제한적인 허용) : 자식에게만 공개
     public(공용) : 모두에게 멤버 공개
     internal(어셈블리) : DLL 파일내의 모든 멤버에게 공개
     protected internal(제한적인DLL) : DLL에서의 상속관계에서만…
Static과 Instance
     Static : 정적 접근, 클래스로부터 객체를 생성하지 않고, 바로 사용
     Instance : 메모리에 객체를 올린 후 사용, new 키워드 사용


알고리즘
1. SUM, COUNT, AVG
2. MAX, MIN
3. RANK
4. MODE
5. NEAR
6. SORT
     a. Selection Sort
          i. 작은것은 왼쪽
     b. Bubble Sort
          i. 인접한 데이터 비교
     c. Quick Sort
7. SEARCH / Binary Search
8. MERGE
9. GROUP


자료구조
1. STACK : LIFO
     a. 스택 Pointer(sp)
     b. Overflow : 스택이 꽉 찼을 때
     c. Underflow : 비어있을 때...
     d. 스택 Size : 스택의 크기
     e. 접시 쌓는 모양
2. QUEUE : FIFO
     a. 대기행렬, 인쇄대기, 은행 줄서기
3. LINKED LIST : LIFO+FIFO
     a. 배열보다 느리다.
     b. 삽입과 삭제가 용이하다. Add(), Remove()
4. TREE
     a. 이진 탐색 트리 : 작은게 왼쪽/아래
5. GRAPH
     a. 서울에서 부산까지 최적경로 따질 때
6. HASHTABLE
     a. 키(Key)와 값(Value)의 쌍으로 데이터 저장
     b. 충돌이 발생할 수 있다.
          i. Hash["a"] = 1234;
          ii. Hash["aa"] = 5678; // a 도 5678 덮어씀

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

120. DLL파일만들기  (0) 2009.09.01
수업 복습(코드 실습) ==> 테스트관련 예제  (0) 2009.08.26
105. 파일처리  (0) 2009.08.24
90. 프로젝션  (0) 2009.08.20
(테스트) 체중 관리 프로그램  (0) 2009.08.20
Posted by holland14
:


==> 텍스트파일저장.cs



using System;
using System.IO; // 파일처리

public class 텍스트파일저장
{
    public static void Main()
    {
        string data = "안녕하세요.\r\n반갑습니다.";

        // StreamWriter 클래스
        StreamWriter sw = new StreamWriter("C:\\Temp\\Test.txt");

        // Write() 메서드 : 저장
        sw.WriteLine(data);

        // StreamWrite 개체를 생성했으면 반드시 닫기
        sw.Close();

        // 메모리 해제
        sw.Dispose();
    }
}




==============================================================================================



==> 텍스트파일읽기.cs



using System;
using System.IO; // 파일처리

public class 텍스트파일읽기
{
    public static void Main()
    {
        StreamReader sr = new StreamReader(@"C:\Temp\Test.txt");
        Console.WriteLine("{0}", sr.ReadToEnd()); // 전체 읽어오기
        sr.Close();
        sr.Dispose();
    }
}



==============================================================================================



==> 파일정보얻기.cs



using System;
using System.IO; //

public class 파일정보얻기
{
    public static void Main()
    {
        string file = "C:\\Temp\\Test.txt";

        // File 클래스 : 정적
        if (File.Exists(file)) // 파일이 있다면
        {
            Console.WriteLine("{0}", File.GetCreationTime(file));
            File.Copy(file, "C:\\Temp\\Test2.txt", true);
        }

        // FileInfo 클래스 : 인스턴스
        FileInfo fi = new FileInfo(file);
        if (fi.Exists) // 파일이 존재한다면,
        {
            Console.WriteLine("{0}", fi.FullName); // 파일명 출력
            // ... ===파일 관련 모든 처리 가능===
        }

    }
}




==============================================================================================



==> 폴더정보얻기.cs



using System;
using System.IO;

public class 폴더정보얻기
{
    public static void Main()
    {
        string dir = "D:\\";

        // Directory 클래스
        if (Directory.Exists(dir))
        {
            // D드라이브의 모든 폴더 목록을 출력
            foreach (string folder in Directory.GetDirectories(dir))
            {
                Console.WriteLine("{0}", folder);
            }
        }

        // DirectoryInfo 클래스
        DirectoryInfo di = new DirectoryInfo(dir + "Temp\\");
        if (di.Exists)
        {
            // D드라이브의 Temp 폴더의 모든 파일 목록 출력
            foreach (var item in di.GetFiles())
            {
                Console.WriteLine("{0}", item);
            }
        }
    }
}

Posted by holland14
:

using System;
using System.Linq;
using System.Collections.Generic;

public class Product
{
    public string Name { get; set; }
    public int Quantity { get; set; }
}

public class ProName
{
    public string ModelName { get; set; }
}

public class 프로젝션
{
    public static void Main()
    {
        int[] data = {3, 4, 5, 2, 1};
        var query = from d in data where d % 2 == 0 select d; // 결과유추
        IEnumerable<int> q = from d in data where d % 2 == 0 select d; // 기본
        int[] even = (from d in data where d % 2 == 0 select d).ToArray(); // 배열형로 뽑아냄
        List<int> lst = (from d in data where d % 2 == 0 select d).ToList(); // 리스트로 뽑아냄

        Product[] products = {
                                 new Product{Name="닷넷", Quantity=1000},
                                 new Product{Name="자바", Quantity=10}
                             };
        //var pro = from p in products select p; //[1]
        IEnumerable<ProName> pro = from p in products
                                   select new ProName { ModelName = p.Name }; //[2] 다른 클래스의 프로퍼티로 변환시켜 출력
       
        foreach (var item in pro)
     {
      Console.WriteLine("{0}", item.ModelName); // 다른 개체형으로 변환
     }
    }
}


 

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

C# 단어 및 수업 내용 복습(정리) ==> 테스트 관련  (0) 2009.08.26
105. 파일처리  (0) 2009.08.24
(테스트) 체중 관리 프로그램  (0) 2009.08.20
89. LINQ - 그룹알고리즘  (0) 2009.08.19
88. LINQ - 병합  (0) 2009.08.19
Posted by holland14
: