Microsoft Windows Mobile Dae-Ki Kang
차례 소개 (Introduction) 설치 (Installation) 헬로 (Hello, Smartphone! etc. in MFC of C++) 배포 (Deployment (upload a program to a smart device)) GUI (GUI Programming in C#) C# 의개요 C# 프로그래밍실습 (More Serious Issues in C#)
소개 [1/2] C# 프로그래밍언어 MS 사의앤더스헬스버그 (Anders Hejlsberg) 가고안.NET 에최적화된언어 컴포넌트지향프로그래밍언어자바의단점을보완 실행방법 : 자바 : 인터프리테이션, C#: 컴파일방법자바언어를대체할수있는언어 C# 의특징객체지향언어 : 자료추상화델리게이트와이벤트멀티스레드, 예외처리연산자중복, 제네릭
소개 [2/2] 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 프로퍼티 타이틀바에출력
C# 프로그램실행과정 컴파일과정 csc : C# compiler 실행시스템 CLR Common Language Runtime 실행과정
기본특징 [1/4] 자료형 변수나상수가가질수있는값과연산의종류를결정 C# 의자료형 값형 (value type) 참조형 (reference type) 숫자형 정수형 signed sbyte, short, int, long unsigned byte, ushort, uint, ulong 실수형 float, double, decimal 연산자 표준 C 언어와유사 형검사연산자 (type testing operator) is 호환가능한지를검사 as 지정한형으로변환
기본특징 [2/4] 배열형같은형을갖는여러개의값을저장할수있는자료구조. 배열변수선언배열을가리키는참조변수 int[] vector; short[,] matrix; long[][] arrayofarray; object[] myarray1, myarray2;
기본특징 [3/4] 배열객체생성 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;
기본특징 [4/4] 스트링 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
주요특징 클래스프로퍼티연산자중복델리게이트이벤트스레드제네릭
클래스 클래스와객체프로그래밍언어적인측면에서객체자료형또는객체클래스클래스의구성 클래스멤버필드계통 상수정의, 필드, 이벤트메소드계통 메소드, 생성자, 소멸자, 프로퍼티, 인덱서, 연산자중복 자동차출발!!!
클래스의설계 객체의속성과행위를결정 속성 필드계통 행위 메소드계통 class CoffeeMaker { public bool onstate; } public void StartCoffeeMaker() { if (onstate == true) Console.WriteLine("The CoffeMaker is already on"); else onstate = true; Console.WriteLine("The CoffeMaker is now on"); } CoffeeMaker 클래스를이용하여 StartCoffeeMaker() 메소드를호출하여보시오.
프로퍼티 [1/2] 프로퍼티의개념클래스의 private 필드를형식적으로다루는일종의메소드. 값을지정하는셋 - 접근자와값을참조하는겟 - 접근자로구성. 프로퍼티의정의형태 [property-modifiers] returntype PropertyName { get { // get-accessor body } set { // set-accessor body } }
프로퍼티 [2/2] 프로퍼티의동작필드처럼사용되지만, 메소드처럼동작. 배정문의왼쪽에서사용되면셋 - 접근자호출. 배정문의오른쪽에서사용되면겟 - 접근자호출. 예제 1.5 Text p. 28 Value 지정어의의미?
연산자중복 연산자중복의의미시스템에서제공한연산자를재정의하는것. 클래스만을위한연산자로써자료추상화가가능. 시스템에서제공한연산자처럼사용가능문법적인규칙은변경불가 ( 연산순위나결합법칙등 ). 연산자중복정의형태 public static [extern] returntype operator op (parameter1 [, parameter2]) { } //... operator overloading body... 예제 1.6 교과서 29 쪽
델리게이트 델리게이트 (delegate) 는메소드참조기법 객체지향적특징이반영된메소드포인터 이벤트와스레드를처리하기위한방법론 선언형태 : [modifiers] delegate returntype DelegateName(parameterList); 델리게이트프로그래밍순서 1 메소드정의 2 델리게이트정의 델리게이트형태와연결될메소드의형태가일치 반환형, 매개변수의개수와형 3 델리게이트객체생성 4 델리게이트객체에메소드연결 5 델리게이트를통해메소드호출
이벤트 [1/2] 이벤트 (event) 사용자행동에의해발생하는사건. 어떤사건이발생한것을알리기위해보내는메시지로간주. C# 에서는델리게이트를이용하여이벤트를처리. 이벤트정의형태 [event-modifier] event DelegateType EventName; 이벤트 - 주도프로그래밍 (event-driven programming) 이벤트와이벤트처리기를통하여객체에발생한사건을다른객체에통지하고그에대한행위를처리하도록시키는구조를가짐각이벤트에따른작업을독립적으로기술프로그램의구조가체계적 / 구조적이며복잡도를줄일수있음
이벤트 [2/2] 이벤트프로그래밍순서 1 이벤트처리기를작성 2 이벤트처리기의형태와일치하는델리게이트를정의 ( 또는 System.EventHandler 델리게이트를사용 ) 3 델리게이트를이용하여이벤트를선언 ( 미리정의된이벤트인경우에는생략 ) 4 이벤트에이벤트처리기를등록 5 이벤트를발생 ( 미리정의된이벤트는사용자행동에의해이벤트가발생 ) 이벤트가발생되면등록된메소드가호출되어이벤트를처리미리정의된이벤트발생은사용자의행동에의해서발생사용자정의이벤트인경우에는명시적으로델리게이트객체를호출함으로써이벤트처리기를작동
[ 예제 1.8] EventApp.cs [ 예제 1.8 - EventApp.cs] using System; using System.Windows.Forms; class EventApp : Form { public EventApp() { } } this.click += new EventHandler(ClickEvent); // 4 이벤트처리기등록 } void ClickEvent(object, sender, Event args) { // 1 이벤트처리기작성 MessageBox.Show("Hello world"); } public static void Main() { Application.Run(new EventAPP()); 미리정의된이벤트를위한델리게이트 실행결과 :
스레드 스레드의기본개념 순차프로그램과유사하게시작, 실행, 종료의순서를가짐 실행되는동안에한시점에서단일실행점을가짐 프로그램내에서만실행가능 스레드는프로그램내부에있는제어의단일순차흐름 (single sequential flow of control) 단일스레드개념은순차프로그램과유사 멀티스레드시스템 스레드가하나의프로그램내에여러개존재 스레드프로그래밍의순서 1 스레드몸체에해당하는메소드를작성 2 작성된메소드를 ThreadStart 델리게이트에연결 3 생성된델리게이트를이용하여스레드객체를생성 4 스레드의실행을시작 (Start() 메소드를호출 )
[ 예제 1.9] ThreadApp.cs [ 예제 1.9 ThreadApp.cs] using System; using System.Threading; // 반드시포함!!! class ThreadApp { static void ThreadBody() { // --- 1 Console.WriteLine("In the thread body "); } } public static void Main() { } ThreadStart ts = new ThreadStart(ThreadBody); // --- 2 Thread t = new Thread(ts); // --- 3 Console.WriteLine("*** Start of Main"); t.start(); // --- 4 Console.WriteLine("*** End of Main"); 실행결과 : *** Start of Main *** End of Main In the thread body
제네릭 제네릭의의미 자료형을매개변수로가질수있는개념 C++ 의템플릿과유사한개념 제네릭단위 클래스, 구조체, 인터페이스, 메소드 제네릭클래스 범용클래스또는포괄클래스 형매개변수 (type parameter) - <> 안에기술 예 : class Stack<StackType> { private StackType[] stack = new StackType[100]; //... public void Push(StackType element) { /*... */ } public StackType Pop() { /*... */ } } Stack<int> stk1 = new Stack<int>(); // 정수형스택 Stack<double> stk2 = new Stack<double>(); // 실수형스택
.NET 프레임워크소개 공통언어스펙 CLS: Common Language Specification 공통자료형시스템 CTS: Common Type System 실행모델 공통언어런타임 CLR: Common Language Runtime
.NET 프레임워크.NET 프레임워크 (Framework) 마이크로소프트사가개발한프로그램개발환경..NET 프레임워크의구조도 현재지원언어 C#, Visual Basic.NET, Managed C++, J# CLS 만족하는언어
공통언어스펙 언어의상호운용성을지원하기위한스펙 CLS Common Language Specification CLS 를만족하는언어를 공통언어 라부름 C#, Visual Basic.NET, J#, Managed C++ CLS 를만족하면서로다른언어에서만들어진라이브러리를공유할수있다. 기본클래스라이브러리.NET 프레임워크에서제공 BCL : Base Class Library CLS 를만족하면 BCL 을사용할수있다.
공통자료형시스템 다른언어와상호운용성에필요한공통의자료형 CTS 형과 C# 자료형관계 CTS 자료형 의미 C# 자료형 System.Object 객체형 object System.String 스트링형 string System.Sbyte 부호있는바이트형 (-128~127) sbyte System.Byte 바이트형 (0~255) ~ byte System.Int16 16 비트정수형 short System.Uint16 16 비트부호없는정수형 ushort System.Int32 32 비트정수형 int System.Uint32 32 비트부호없는정수형 uint System.Int64 64 비트정수형 long System.Uint64 64 비트부호없는정수형 ulong System.Char 문자형 char System.Single 단일정밀도실수형 float System.Double 이중정밀도실수형 double System.Boolean 부울형 bool System.Decimal 10 진수형 decimal
실행모델 컴파일단계 C# Compiler 실행단계 Common Language Runtime JIT 방법에의해실행
어셈블리와역어셈블리과정 어셈블리과정 *.il = *.exe or *.dll 역어셈블리과정 *.exe or *.dll = *.il IL 파일 텍스트형태로된중간언어파일 컴파일된코드를확인할수있음 더나아가디버깅하는데사용할수있음.
공통언어런타임.NET 프레임워크의실행시스템 자바의 JVM 과동일한기능을담당 실행환경을포함 필수적인실행환경 3 가지컴포넌트 메모리관리기 예외처리기 스레드지원 공통언어런타임컴포넌트
외부링크들.NET Framework http://en.wikipedia.org/wiki/.net_framework List of CLI languages http://en.wikipedia.org/wiki/list_of_.net_lang uages
차례 소개 (Introduction) 설치 (Installation) 헬로 (Hello, Smartphone! etc. in MFC of C++) 배포 (Deployment (upload a program to a smart device)) GUI (GUI Programming in C#) C# 의개요 C# 프로그래밍실습 (More Serious Issues in C#)
파일읽기 (Files) 파일을읽어서첫번째라인을레이블로보인다 1. public Form1() 2. { 3. InitializeComponent(); 4. ReadFileToLabel(); 5. } 6. private void ReadFileToLabel() 7. { 8. StreamReader sr = File.OpenText(@"\windows\pocketmsn.htm"); 9. string s = ""; 10. s = sr.readline(); 11. this.label1.text = s; 12. }
데이터베이스 (Databases) 응용프로그램의데이터와세팅을.NET 컴팩트프레임워크를이용하여윈도우모바일기반의스마트폰응용프로그램에저장 http://msdn.microsoft.com/enus/library/ms839432.aspx XML 포맷의데이터 XML Schema XML files DataSet SqlCommand 근미래 LINQ 기술
프로세스 (Processes) Visual Studio.NET 2008 and.net Compact Framework 2.0 or higher 1. private void menuitem1_click(object sender, EventArgs e) 2. { 3. Process.Start(@"IExplore.exe", @"\windows\pocketmsn.htm"); 4. }
통지 (Notifications (in a managed system)).net 컴팩트프레임워크에서고급 P/Invoke (Platform Invoke) http://msdn.microsoft.com/en- us/library/aa446529.aspx CeSetUserNotificationEx API 에대한 Wrapper 를만듦 P/Invoke 를이용하여그 wrapper (DLL 형태 ) 와통신함
요약및심화이슈들 Reference: C#.NET MOBILE PROGRAMMING 안원국 Programming Windows CE.NET- Douglas Boling Windows CE 네트워킹 디바이스간통신 데스크탑과연결 게임 API