C# 프로그래밍언어 MS사의앤더스헬스버그 (Anders Hejlsberg) 가고안.NET에최적화된언어컴포넌트지향프로그래밍언어자바의단점을보완 실행방법 : 자바 : 인터프리테이션, C#: 컴파일방법자바언어를대체할수있는언어 C# 의특징 객체지향언어 : 자료추상화델리게이트와이벤트멀티스레드, 예외처리연산자중복, 제네릭
C 계열의언어 C++ 와자바로부터영향을받았음. C: 연산자와문장등기본적인언어의기능 C++: 객체지향속성, 연산자중복, 제네릭 (Generic) 자바 : 예외처리와스레드 C# 언어의계통도
콘솔애플리케이션 문자기반명령어프롬프트환경에서실행 키보드를통해입력, 화면에문자로출력 윈폼애플리케이션 윈도우폼애플리케이션 (Windows forms Application) 의약어 GUI를통해서입출력을수행이벤트처리방식을통해실행 C# 개발환경 SDK를이용 편집기, 컴파일러, 실행엔진, 클래스라이브러리통합개발환경 (IDE) Visual Studio.NET
일반적인응용프로그램 예제프로그램 : [ 예제 1.1 HelloWorld.cs] 네임스페이스 실행과정 using System; class HelloWorld { public static void Main() { Console.WriteLine("Hello World!"); } } 실행결과 : Hello World! C:\temp>csc HelloWorld.cs C:\temp>HelloWorld Hello World! 출력메소드
윈도우응용프로그램 예제프로그램 : [ 예제 1.2 WinFormApp.cs] using System; using System.Windows.Forms; class WinFormApp : Form { WinFormApp() { Text = "Hello World!"; } public static void Main() { Application.Run(new WinFormApp()); } } 실행결과 : Text 프로퍼티 타이틀바에출력
컴파일과정 csc : C# compiler 실행시스템 CLR Common Language Runtime 실행과정
자료형변수나상수가가질수있는값과연산의종류를결정 C# 의자료형값형 (value type) 참조형 (reference type) 숫자형정수형 signed sbyte, short, int, long unsigned byte, ushort, uint, ulong 실수형 float, double, decimal 연산자표준 C 언어와유사형검사연산자 (type testing operator) is 호환가능한지를검사 as 지정한형으로변환
배열형 같은형을갖는여러개의값을저장할수있는자료구조. 배열변수선언 배열을가리키는참조변수 int[] vector; short[,] matrix; long[][] arrayofarray; object[] myarray1, myarray2;
배열객체생성 new 연산자 vector = new int[100]; matrix = new short[10,100]; myarray1 = new Point[3]; 배열사용 for (int i=0; i<vector.length; i++) vector[i] = i;
스트링 C# 에서스트링은객체 System.String 클래스의객체 C# 의 string 형은 String 클래스의 alias 스트링상수 이중인용부호 ( ) 로묶인문자들의나열 ( 예 : I am a string. ) 스트링초기화 string s = Hello ; string s = new string( Hello ); 스트링연결 + 연산자 : concatenation operator string s = Hello ; s += World ; => s: Hello World
통합개발환경시작하기 소스코드보기 윈폼애플리케이션작성하기
윈폼애플리케이션 컨트롤을사용하여프로그래머가원하는화면을구성하고이벤트가발생했을때처리하고자하는작업을이벤트처리기에기술하는방식으로프로그래밍된프로그램. 윈도우폼에컨트롤또는컴포넌트를배치하고이벤트처리기를등록하여사용자의다양한요구를입력으로받아처리한후실행결과를응답해주는방식으로작동.
윈도우폼 단순히폼이라고부름. 운영체제에서제공하는기본적인화면단위인창을말하는개념. 사각형모양의작은화면영역을의미사용자에게정보를제공하고사용자가입력하는자료를받음.
폼클래스 윈도우폼을나타내는클래스. System.Windows.Forms 네임스페이스속함. 컴포넌트클래스 컨트롤클래스의베이스클래스이며화면에직접적으로나타나지않으나개념적인부분을나타내는클래스. 컨트롤클래스 폼에직접표시되는컨트롤을위한클래스.
1. 새프로젝트시작 파일 (F) 새로만들기 (N) 프로젝트 (P) 를선택. 프로젝트형식 (P) Visual C# 프로젝트 그리고 템플릿 (T) Windows 응용프로그램 을선택.
윈도우폼디자이너 솔루션탐색기 도구상자 속성브라우저
윈도우폼디자이너폼의크기를조정하고폼에컨트롤을배치하고배치된컨트롤의위치와크기를수정할수있는영역. 도구상자폼에배치할수있는컨트롤과컴포넌트의목록을보여주는곳 속성브라우저폼디자이너에서선택한폼이나컴포넌트의프로퍼티와이벤트목록을보여주는곳 솔루션탐색기응용프로그램을구성하고있는파일과관련항목을보여주는곳현재응용프로그램에새폼이나파일을추가하거나또는존재하는파일이나항목을삭제할때사용
속성브라우저
생성된프로젝트의파일 App.ico : 응용프로그램에서사용되는기본아이콘에대한파일 AssemblyInfo.cs : 프로젝트가생성하는어셈블리를설명하고버전관리정보를지정하는데사용하며, 애트리뷰트정의를포함하는 C# 소스파일 Form1.cs : 응용프로그램의 C# 소스파일 Form1.resx : Form1.cs 파일과관련된리소스정보를저장하는 XML 파일 WindowsApplication1.csproj : Visual C# 프로젝트파일 WindowsApplication1.csproj.user : 사용자정의설정을포함하는 Visual C# 프로젝트파일 WindowsApplication1.suo : 사용자정의정보를포함하는 Visual C# 솔루션파일
public class Form1 : System.Windows.Forms.Form { // 필드항목선언 public Form1() { InitializeComponent(); // 컴포넌트초기화 // 기타멤버초기화 } protected override void Dispose(bool disposing) { // 사용중인리소스를정리 } private void InitializeComponent() { // 클래스에서사용하는컴포넌트초기화 } static void Main() { Application.Run(new Form1()); } } // --- 2 // --- 4 // --- 3 // --- 1
1 Main() 메소드 응용프로그램의시작점 Application 클래스의 Run() 메소드를호출하여응용프로그램을실행. 2 생성자 폼에서사용하는각종컴포넌트와클래스의멤버초기화 3 InitializeComponent() 메소드 폼에있는각종컴포넌트들초기화 4 Dispose() 메소드 응용프로그램이종료될때실행 응용프로그램이사용한모든리소스를해제.
폼설계컴포넌트프로퍼티멤버이벤트처리기애플리케이션실행
[ 예제 7.1 DisplayStartDateApp.cs] 1) 폼설계 2) 프로퍼티 컨트롤 : (Name) 프로퍼티값 Form : Form1 Text DisplayStartDateApp Button : button1 Text Display 3) 멤버 public Form1() { //... startdatetime = DateTime.Now; } DateTime startdatetime; public DateTime GetStartDateTime() { return startdatetime; }
4) 이벤트처리기 컨트롤 : (Name) 이벤트메소드명 Button : button1 Click button1_ Click() private void button1_click(object sender, EventArgs e) { MessageBox.Show(GetStartDateTime().ToString()); } 실행방법 : 애플리케이션을실행한후, 폼에있는 "Display" 버튼을클릭한다. 실행결과 :
폼설계 폼에컨트롤을배치한모습표시. 폼에배치되는컨트롤의종류와배치된컨트롤의이름과위치를그림형태로표시. 노란색텍스트상자는 "ClassType : Name" 형식으로표시 컨트롤의종류 ( 클래스이름 ) 와이름 ( 객체이름 ) 을나타냄. 컨트롤의추가
컴포넌트목록 컨트롤 : (Name) 프로퍼티값 Timer : timer1 Images FLGSKOR.ICO 컴포넌트추가 컨트롤추가와유사
프로퍼티목록 컨트롤 : (Name) 프로퍼티 값 Form : Form1 Text DisplayStartDateApp Button : button1 Text Display 프로퍼티값변경 속성브라우저를이용.
멤버 컴포넌트와컨트롤을제외한클래스멤버에대한선언과초기화등을소스코드로작성하는곳. 멤버코드추가 생성자에초기화부분추가 public Form1(){ // Windows Form 디자이너지원에필요합니다. // InitializeComponent(); // TODO: InitializeComponent를호출한다음생성자코드를추가합니다. // startdatetime = DateTime.Now; } 멤버선언이나메소드등의소스코드추가 폼클래스내의적당한곳에추가.
이벤트처리기 통합환경에서생성하는처리기의이름 < 이벤트처리기를등록하려는객체의이름 >_< 이벤트이름 > 컨트롤 : (Name) 이벤트 메소드명 Button : button1 Click button1_ Click() private void button1_click(object sender, EventArgs e) { MessageBox.Show(GetStartDateTime().ToString()); } 매개변수 이벤트를발생시킨객체이벤트에관련된정보를가진객체 EventArgs 클래스형이나이의파생클래스형
이벤트처리기등록방법 1 이벤트처리기를등록하고자하는폼이나컨트롤을선택. 2 속성브라우저에서 " 이벤트 " 버튼을클릭. 3 목록에서처리기를등록하고자하는이벤트를더블클릭 4 소스코드편집창에서이벤트처리기의내용을입력
컴파일과실행 컴파일하는방법 메인메뉴를통하여 빌드 (B) 솔루션빌드 (B) 를선택 컴파일한후바로실행하는방법 디버그 (D) 시작 (S) 이나 디버그 (D) 디버깅하지않고시작 (G) 을선택 실행방법 : 애플리케이션을실행한후, 폼에있는 "Display" 버튼을클릭한다. 실행결과 :