PowerPoint Presentation

Similar documents
선형대수학 Linear Algebra

C# Programming Guide - Types

LINQ의 개요

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - CSharp-2-기초문법

Deok9_Exploit Technique

초보자를 위한 C# 21일 완성

JAVA PROGRAMMING 실습 08.다형성

hlogin2

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint 프레젠테이션

02 C h a p t e r Java

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Presentation

Design Issues

Microsoft PowerPoint - hci2-lecture12 [호환 모드]

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Presentation

강의10

JVM 메모리구조

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

gnu-lee-oop-kor-lec06-3-chap7

비긴쿡-자바 00앞부속

JAVA PROGRAMMING 실습 02. 표준 입출력

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

Microsoft PowerPoint - 04-UDP Programming.ppt

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

자바 프로그래밍

chap10.PDF

Modern Javascript

07 자바의 다양한 클래스.key

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

PowerPoint 프레젠테이션

슬라이드 1

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

(Microsoft PowerPoint - hci2-lecture12 [\310\243\310\257 \270\360\265\345])

슬라이드 1

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

PowerPoint Presentation

Microsoft PowerPoint - additional01.ppt [호환 모드]

3ÆÄÆ®-14

No Slide Title


제11장 프로세스와 쓰레드

12 C# 7.0 C# 6.0의경우컴파일러를완전히새롭게만드는작업으로인해이전버전대비중대한문법향상이없었던반면 C# 7.0부터는다시주요한변화를이끌어내기시작했는데바로함수형언어에서나제공하던패턴매칭구문을가능하게했다는점이다. 물론 C# 7.0에서는그밖의소소한간편표기구문도제공한다.

01-OOPConcepts(2).PDF

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

OCaml

PowerPoint Presentation

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Tcl의 문법

어댑터뷰

쉽게 풀어쓴 C 프로그래밍

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas


PowerPoint Presentation

5장.key

Microsoft PowerPoint - a10.ppt [호환 모드]

ThisJava ..

쉽게 풀어쓴 C 프로그래밍

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

PowerPoint 프레젠테이션

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

쉽게 풀어쓴 C 프로그래밍

<4D F736F F D20BEBEBCA520C4DAB5F920BFACBDC0202D20B8D6C6BC20BEB2B7B9B5E5BFCD20C0CCBAA5C6AE2E646F6378>

유니티 변수-함수.key

untitled

chap 5: Trees

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - 07-C#-2-기초문법.ppt [호환 모드]

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

DocsPin_Korean.pages

rmi_박준용_final.PDF

hlogin7

Microsoft PowerPoint - 2강

PowerPoint Presentation

PowerPoint 프레젠테이션

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

금오공대 컴퓨터공학전공 강의자료

1

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

K&R2 Reference Manual 번역본

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

컴파일러

PowerPoint Presentation

쉽게

C++ Programming

05-class.key

chap x: G입력

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

PowerPoint 프레젠테이션

09-interface.key

Transcription:

C# 5.0 2013.12

C# 5.0 1/ C# 과닷넷프레임워크 2/ C# 2.0, 3.0, 4.0, 5.0 정리 3/ 정리및 Q&A

C# 과닷넷프레임워크 CIL (1) (Common) Intermediate Language Managed Native IL 기계어 C# C++

C# 과닷넷프레임워크 CIL (2) HelloWorld 의 C# / IL 언어 using System; namespace ConsoleApplication1 class Program static void Main(string[] args) Console.WriteLine("Hello World");.assembly extern mscorlib.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ).ver 4:0:0:0.assembly helloworld.custom instance void [mscorlib]system.runtime.compilerservices.compilationrelaxationsattribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ).custom instance void [mscorlib]system.runtime.compilerservices.runtimecompatibilityattribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ).hash algorithm 0x00008004.ver 0:0:0:0.module helloworld.exe.imagebase 0x00400000.file alignment 0x00000200.stackreserve 0x00100000.subsystem 0x0003.corflags 0x00000001.class private auto ansi beforefieldinit ConsoleApplication1.Program extends [mscorlib]system.object.method private hidebysig static void Main(string[] args) cil managed.entrypoint.maxstack 8 IL_0000: nop IL_0001: ldstr "Hello World" IL_0006: call void [mscorlib]system.console::writeline(string) IL_000b: nop IL_000c: ret.method public hidebysig specialname rtspecialname instance void.ctor() cil managed.maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]system.object::.ctor() IL_0006: ret

C# 과닷넷프레임워크 CIL (3) 닷넷언어를만드는 2 가지방법 1. 소스코드 CLI 표준에정의된바이너리를직접생성 2. 소스코드 IL 언어 ilasm.exe를이용해서 CLI 표준에정의된바이너리를생성

C# 과닷넷프레임워크 CIL (4) IL 에서만가능한표현 표현 IL C# VB.NET 리턴값에따른메서드오버로드 O X X [protected and internal] 접근자 O X X struct에서인자없는생성자정의 O X X

C# 과닷넷프레임워크 컴파일 (1) 두번의컴파일 C# 소스코드 중간언어 (Intermediate Language) 기계어 C# 컴파일러 JIT 컴파일러 디버그 릴리즈 디버그 릴리즈

C# 과닷넷프레임워크 컴파일 (2) 언어컴파일러 생산된 IL만올바르다면언어의문법은자유롭게확장가능 ex) VB.NET 의 Module에정의되는전역변수 JIT 컴파일러 실행시 IL 코드를 Debug / Release 모드에따라기계어로변환 ex) Field 로정의하면 Property get/set 으로정의하는것보다빠른가? ex) 무한재귀호출이항상 StackOverflowException 을발생할까?

C# 과닷넷프레임워크 버전 C# 과닷넷프레임워크버전관계 닷넷버전 C# 버전주요특징 1.0 ~ 1.1 1.0 C# 1.0 2.0 2.0 Generics 3.0 ~ 3.5 3.0 LINQ 4.0 4.0 dynamic 예약어 4.5 5.0 async/await 예약어

C# 언어의발전요소 CLR 2.0(4.0) 신규 IL BCL (Base Class Library) 언어표현 - Syntactic Sugar ( 단축표기 ) - 기존의 IL 표현력추가 IL BCL 언어표현 - - -

C# 5.0 1/ C# 과닷넷프레임워크 2/ C# 2.0, 3.0, 4.0, 5.0 정리 3/ 정리및 Q&A

C# 1.0 VM 언어지만 Interop 을고려 PInvoke, unsafe(pointer), delegate ex) CPU 기계어코드를호출할수있을까? #include "stdafx.h" void getcpuid(int bits[]) _asm xor ebx, ebx; xor ecx, ecx; xor edx, edx; mov eax, 0; cpuid; mov edi, bits; mov dword ptr [edi + 0], eax; mov dword ptr [edi + 4], ebx; mov dword ptr [edi + 8], ecx; mov dword ptr [edi + 12], edx; int _tmain(int argc, _TCHAR* argv[]) int bits[4]; getcpuid(bits); printf("%x, %x, %x, %x\n", bits[0], bits[1], bits[2], bits[3]); return 0;

C# 2.0?? 연산자 yield return/break partial class anonymous method static class 제네릭 (Generics) Nullable

C# 2.0 -?? 연산자 string txt = null; if (txt == null) Console.WriteLine("(null)"); else Console.WriteLine(txt); string txt = null; Console.WriteLine(txt?? "(null)"); IL BCL 언어표현 - - O

C# 2.0 yield return/break (1) IEnumerable 의단축표기 F# C# 주요특징 list IList, ICollection 요소의전체목록을보유 sequence IEnumerable 필요한순간에요소의값을계산 IL BCL 언어표현 - - O

C# 2.0 yield return/break (2) IList / ICollection public class ListNatural ArrayList GetNumbers(int max) ArrayList list = new ArrayList(); for (int i = 1; i <= max; i++) list.add(i); return list;

C# 2.0 yield return/break (3) IEnumerable public class SequenceNatural : IEnumerable, IEnumerator int _current; public IEnumerator GetEnumerator() _current = 0; return this; public object Current get return _current; public bool MoveNext() _current++; return true; public void Reset() _current = 0;

C# 2.0 yield return/break (3) yield return/break public class YieldNatural public IEnumerable GetNumbers() int n = 1; while (true) yield return n; // if (n == 100) yield break; n++;

C# 2.0 partial type (1) 클래스의구현을 2 개이상으로분리 partial class MyClass public void Do() Console.Write(_number); partial class MyClass public void Do() Console.Write(_number); partial class MyClass private int _number = 1; private int _number = 1; IL BCL 언어표현 - - O

C# 2.0 partial type (2) 자동코드생성의문제점해결! - Visual Studio 2002/2003 2005 F# 은 WPF 를왜지원하지않는가?

C# 2.0 익명메서드 (1) 이름없는메서드정의가능 static void Main(string[] args) Thread t = new Thread(func); t.start(); private static void func(object obj) Console.Write("..."); static void Main(string[] args) Thread t = new Thread( delegate (object obj) Console.Write("..."); ); t.start(); IL BCL 언어표현 - - O

C# 2.0 익명메서드 (2) delegate 타입의인자로인라인메서드정의 using System; namespace ConsoleApplication1 class Program delegate void Functor(object obj); static void Main(string[] args) Functor logoutput = delegate(object obj) Console.Write(obj); ; logoutput("test");

이벤트처리기 C# 2.0 익명메서드 (3) this.textbox1.textchanged += delegate (object sender, EventArgs e) Console.WriteLine( Do! ); ; // 또는 delegate 의인자를사용하지않는다면생략가능 this.textbox1.textchanged += delegate Console.WriteLine( Do! ); ;

C# 2.0 static class IL 코드표현 : 상속불가능한추상클래스 C# 컴파일러 : 인스턴스멤버정의불가능 abstract class AbstractClass.class private abstract auto ansi beforefieldinit AbstractClass extends [mscorlib]system.object.method family hidebysig specialname rtspecialname instance void.ctor() cil managed static class StaticClass.class private abstract auto ansi sealed beforefieldinit StaticClass extends [mscorlib]system.object IL BCL 언어표현 - - O

C# 2.0 제네릭 (1) C++ 의 template 과유사 public class NewStack<T> T [] _objlist; int _pos; public NewStack(int size) _objlist = new T[size]; public void Push(T newvalue) _objlist[_pos] = newvalue; _pos++; public T Pop() _pos--; return _objlist[_pos]; IL BCL 언어표현 O - -

C# 2.0 제네릭 (2) 메서드수준의제네릭도지원 public class LogOutput public void Output<T,V>(T value1, V value2) Console.WriteLine(value1 + : + value2);

C# 2.0 제네릭 (3) 박싱 / 언박싱문제를해결 ArrayList list = new ArrayList(); list.add(5); // void Add(object value) list.add(6); List<int> list = new List<int>(); list.add(5); // void Add(T item) list.add(6); // void Add(int item);

제약 1 상속타입 C# 2.0 제네릭 (4) public static T Max<T>(T item1, T item2) where T : IComparable if (item1.compareto(item2) >= 0) return item1; return item2;

제약 2 값 / 참조타입 C# 2.0 제네릭 (5) public static void Print<T,V>(T item1, V item2) where T : struct where V : class Console.WriteLine(item1); if (item2!= null) // 값형식인 item1 과비교한다면컴파일에러 Console.WriteLine(item2);

C# 2.0 제네릭 (6) 제약 3 인자없는생성자필수 public static T AllocateIfNull<T>(T item) where T : class, new() if (item == null) item = new T(); return item;

C# 2.0 제네릭 (7) 기존컬렉션의제네릭버전제공.NET 1.x 컬렉션 ArrayList List<T> 대응되는제네릭버전의컬렉션 Hashtable Dictionary<TKey, TValue> SortedList SortedDictionary<TKey, TValue> Stack Stack<T> Queue Queue<T>

C# 2.0 Nullable 타입.NET 2.0 BCL: Nullable<T> 구조체추가 C# 의경우 T? 형태로단축표기 int? value1 = null; short? value2 = 5; // Nullable<int> value1; // Nullable<short> value2; if (value1.hasvalue) Console.WriteLine(value1); Console.WriteLine(value2); // Console.WriteLine(value2.Value); IL BCL 언어표현 - O O

C# 5.0 1/ C# 과닷넷프레임워크 2/ C# 2.0, 3.0, 4.0, 5.0 정리 3/ 정리및 Q&A

자동구현속성 컬렉션초기화 LINQ var 객체초기화 익명타입 확장메서드 람다식 C# 3.0

C# 3.0 자동구현속성 (1) Field + Property 구현을단순화 class Person string _name; public string Name get return _name; set _name = value; int _age; public int Age get return _age; set _age = value; public string Name get; set; public int Age get; set; IL BCL 언어표현 - - O

C# 3.0 자동구현속성 (2) get/set 의접근제한자 class Person public string Name get; protected set; public int Age get; private set;

C# 3.0 컬렉션초기화 ICollection 인터페이스를구현한타입 컬렉션의요소를 new 구문에서추가 List<int> numbers = new List<int>(); numbers.add(0); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); List<int> numbers = new List<int> 0, 1, 2, 3, 4 ; IL BCL 언어표현 - - O

발음 : LINK? LIN-Q? 둘다옳다. C# 3.0 LINQ Moq 도 mock 으로발음하기도하지만 mock u 로발음하는것처럼, 일반적으로 link 라고발음하지만 link u 로발음하기도함. 주의사항 : FAQ 에대해서까지이규칙을적용해서는안됨 ( 출처 : http://stackoverflow.com/questions/2659330/how-to-pronounce-linq)

C# 3.0 LINQ (1) LINQ: Language-INtegrated Query 언어에통합된쿼리표현식 (Query Expressions) List<Person> people = new List<Person> new Person Name = "Anders", Age = 47, Married = true, new Person Name = "Hans", Age = 25, Married = false, ; IEnumerable<Person> all = from person in people select person; foreach (Person item in all) Console.WriteLine(item); IL BCL 언어표현 - O O

C# 3.0 LINQ (2) SQL 쿼리의 SELECT 와유사 방식 코드 SQL LINQ 메서드 SELECT * FROM people IEnumerable<Person> all = from person in people select person; IEnumerable<Person> SelectFunc(List<Person> people) foreach (Person item in people) yield return item;

C# 3.0 var 예약어 컴파일러가로컬변수의형식을추론 C++ 11 의 auto 예약어와동격 IEnumerable<Person> all = from person in people select person; var all = from person in people select person; foreach (var item in all) Console.WriteLine(item); IL BCL 언어표현 - - O

C# 3.0 객체초기화 (1) 공용속성을통해객체생성시에초기화 class Person public string Name get; set; public int Age get; set; Person p1 = new Person(); p1.name = Hans ; p1.age = 30; Person p2 = new Person Name = "Tom", Age = 29 ; IL BCL 언어표현 - - O

C# 3.0 객체초기화 (2) SELECT * FROM people SELECT Name, Age FROM people SELECT Name, Married FROM people var all = from person in people select person; var all = from person in people select new Person Name = person.name, Age = person.age ; var all = from person in people select new Person Name = person.name, Married = person.married ;

C# 3.0 객체초기화 (4) 컬렉션초기화 + 객체초기화 List<Person> list = new List<Person> new Person Name = "Ally", Age = 35, new Person Name = "Luis", Age = 40, ;

이름없는타입 C# 3.0 익명타입 (1) 내부적인처리는익명메서드와유사 var 사용은필수 var p = new Count = 10, Title = "Anders" ; Console.WriteLine(p.Title + ": " + p.count); IL BCL 언어표현 - - O

LINQ - SELECT C# 3.0 익명타입 (2) var all = from person in people select new Name = person.name, Age = person.age ; var all = from person in people select new Name = person.name, Married = person.married ; foreach (var item in all) Console.WriteLine(item);

C# 3.0 익명타입 (3) SELECT p.name, p.age, lang.language FROM people as p INNER JOIN Language as lang ON p.name = lang.name var all = from p in people join lang in languages on p.name equals lang.name select new Name = p.name, Age = p.age, Language = lang.language ; foreach (var item in all) Console.WriteLine(item);

C# 3.0 확장메서드 (1) 정적메서드를마치인스턴스메서드처럼사용 class Program static void Main(string[] args) string txt = "http://www.naver.com"; string contents = txt.textfromurl(); Console.WriteLine(contents); static class StringExtension public static string TextFromUrl(this string txt) WebClient wc = new WebClient(); return wc.downloadstring(txt); IL BCL 언어표현 - - O

C# 3.0 확장메서드 (2) 결국정적메서드호출 class Program static void Main(string[] args) string txt = "http://www.naver.com"; string contents = StringExtension.TextFromUrl(txt); Console.WriteLine(contents); static class StringExtension public static string TextFromUrl(string txt) WebClient wc = new WebClient(); return wc.downloadstring(txt);

C# 3.0 확장메서드 (3) 쿼리구문과메서드기반구문 var all = from p in people select p; var all = people.select(delegate(person p) return p; ); var all = from p in people select new Name = p.name, Age = p.age ; var all = people.select(delegate(person p) return new Name = p.name, Age = p.age ; );

C# 3.0 확장메서드 (4) SELECT * FROM people WHERE Age >= 30 var all = from p in people where p.age >= 30 select p; var all = people.where (delegate(person p) return p.age >= 30; ).Select(delegate(Person p) return p; );

C# 3.0 확장메서드 (5) SELECT * FROM people ORDER BY Age var all = from p in people orderby p.age select p; var all = people.orderby(delegate(person p) return p.age; ).Select (delegate(person p) return p; );

C# 3.0 람다식 (1) 추론을통해 delegate 익명메서드를개선 delegate void Functor(object obj); Functor logoutput = delegate(object obj) Console.Write(obj); ; Functor loglambda = (obj) => Console.Write(obj); ; IL BCL 언어표현 - - O

C# 3.0 람다식 (2) 값반환 + 단문메서드 return+ 중괄호생략 delegate int Calc(int v1, int v2); Calc addfunc = (v1, v2) => return v1 + v2; ; Calc addlambda = (v1, v2) => v1 + v2;

C# 3.0 람다식 (3) 메서드기반쿼리를단순화 var all = people.select(delegate(person p) return p; ); var all = people.select(p => p); var all = people.select(delegate(person p) return new Name = p.name, Age = p.age ; ); var all = people.select(p => new Name = p.name, Age = p.age );

C# 3.0 람다식 (4) 데이터로써의람다 Expression Tree [ 코드 ] Func<int, int, int> exp = (a, b) => a + b; [ 데이터 ] Expression<Func<int, int, int>> exp = (a, b) => a + b; [mscorlib 어셈블리 ] public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2)

Expression Tree C# 3.0 람다식 (5) // 람다식본체의루트는 2 항연산자인 + 기호 BinaryExpression opplus = exp.body as BinaryExpression; Console.Write(opPlus.NodeType); // 출력 : Add // 2 항연산자의좌측연산자의표현식 ParameterExpression left = opplus.left as ParameterExpression; Console.Write(left.NodeType + ": " + left.name); // 출력 : Parameter: a // 2 항연산자의우측연산자의표현식 ParameterExpression right = opplus.right as ParameterExpression; Console.Write(right.NodeType + ": " + right.name); // 출력 : Parameter: b

C# 3.0 람다식 (6) Expression Tree 컴파일 Expression<Func<int, int, int>> exp = (a, b) => a + b; var addfunc = exp.compile(); Console.WriteLine(addFunc(5, 6));

C# 3.0 람다식 (7) 사례 1) SQL 쿼리를생성 Expression<Func<IOrderedEnumerable<Person>>> func = () => from p in people orderby p.age descending select p; SELECT * FROM people ORDER BY Age DESC

C# 3.0 람다식 (8) 사례 2) 공용속성이름 private int age = 0; public int Age get return age; set age = value; OnPropertyChanged(() => this.age); // OnPropertyChanged( Age ); public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged<TValue>(Expression<Func<TValue>> propertyselector) if (PropertyChanged!= null) var memberexpression = propertyselector.body as MemberExpression; if (memberexpression!= null) PropertyChanged(this, new PropertyChangedEventArgs(memberExpression.Member.Name));

LINQ to 표준쿼리연산자 C# 3.0 LINQ 정리

C# 5.0 1/ C# 과닷넷프레임워크 2/ C# 2.0, 3.0, 4.0, 5.0 정리 3/ 정리및 Q&A

C# 4.0 선택적매개변수 선택적매개변수 명명된인자 dynamic

C# 4.0 선택적매개변수 (1) C++ 의디폴트매개변수 class Person public void Output(string name, int age = 0, string address = "Korea") Console.Write(string.Format("0: 1 in 2", name, age, address)); class Program static void Main(string[] args) Person p = new Person(); p.output("anders"); p.output("winnie", 36); p.output("tom", 28, "Tibet"); IL BCL 언어표현 O - -

C# 4.0 선택적매개변수 (2) 확장된 IL 구문.method public hidebysig instance void Output(string name, [opt] int32 age, [opt] string address) cil managed.param [2] = int32(0x00000000).param [3] = "Korea".maxstack 8 IL_0000: nop...[ 생략 ] IL_0019: ret

C# 4.0 명명된인자 인자의이름으로호출측에서값전달 class Person public void Output(string name, int age = 0, string address = "Korea") Console.Write(string.Format("0: 1 in 2", name, age, address)); class Program static void Main(string[] args) Person p = new Person(); p.output(address: "Tibet", name: "Tom"); p.output(age: 5, name: "Tom", address: "Tibet"); p.output(name: "Tom"); IL BCL 언어표현 - - O

C# 4.0 dynamic (1) 실행시에결정되는타입 using System; namespace ConsoleApplication1 class Program static void Main(string[] args) dynamic d = 5; int sum = d + 10; Console.WriteLine(sum); IL BCL 언어표현 - O O

C# 4.0 dynamic (2) 결국은 object 타입 using System; using System.Runtime.CompilerServices; using Microsoft.CSharp.RuntimeBinder; static void Main() dynamic d = 5; d.calltest(); class Program public static CallSite<Action<CallSite, object>> p Site1; static void Main() object d = 5; if (p Site1 == null) p Site1 = CallSite<Action<CallSite, object>>.create( Binder.InvokeMember(CSharpBinderFlags.ResultDiscarded, "CallTest", null, typeof(program), new CSharpArgumentInfo[] CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) )); p Site1.Target(p Site1, d);

C# 4.0 dynamic (3) IronPython 과 C# 1. NuGet 콘솔을열고, 2. Install-Package IronPython 명령어실행 using System; using IronPython.Hosting; class Program static void Main(string[] args) var scriptengine = Python.CreateEngine(); string code = @" print 'Hello Python' "; scriptengine.execute(code); // 'Hello Python' 문자열출력

C# 4.0 dynamic (4) C# 에서 IronPython 메서드연동 using System; using IronPython.Hosting; class Program static void Main(string[] args) var scriptengine = Python.CreateEngine(); var scriptscope = scriptengine.createscope(); string code = @" def AddFunc(a, b): print 'AddFunc called' return (a + b) "; scriptengine.execute(code, scriptscope); dynamic addfunc = scriptscope.getvariable("addfunc"); int nresult = addfunc(5, 10); Console.WriteLine(nResult);

C# 4.0 dynamic (5) IronPython 에서 C# 메서드연동 using System; using System.Collections.Generic; using IronPython.Hosting; class Program static void Main(string[] args) var scriptengine = Python.CreateEngine(); var scriptscope = scriptengine.createscope(); List<string> list = new List<string>(); scriptscope.setvariable("mylist", list); string code = @" mylist.add('my') mylist.add('python') "; scriptengine.execute(code, scriptscope); foreach (var item in list) Console.WriteLine(item);

C# 5.0 1/ C# 과닷넷프레임워크 2/ C# 2.0, 3.0, 4.0, 5.0 정리 3/ 정리및 Q&A

C# 5.0 호출자정보 C++ 의 3 가지매크로상수에대응 FUNCTION, FILE, LINE, using System; using System.Runtime.CompilerServices; class Program static void Main(string[] args) LogMessage(" 테스트로그 "); static void LogMessage(string text, [CallerMemberName] string member = "", [CallerFilePath] string file = "", [CallerLineNumber] int line = 0) Console.WriteLine(" 텍스트 : " + text); Console.WriteLine(" 호출한메서드이름 : " + member); Console.WriteLine(" 호출한소스코드의파일명 : " + file); Console.WriteLine(" 호출한소스코드의라인번호 : " + line); IL BCL 언어표현 - O O

C# 5.0 async/await (1) 마치동기방식처럼비동기호출 private static async void AwaitRead() using (FileStream fs = new FileStream(@" ", FileMode.Open)) byte[] buf = new byte[fs.length]; await fs.readasync(buf, 0, buf.length); string txt = Encoding.UTF8.GetString(buf); Console.WriteLine(txt); static void Main(string[] args) AwaitRead() Console.ReadLine(); IL BCL 언어표현 - O O

C# 5.0 async/await (2) 비동기호출시스레드상태

C# 5.0 async/await (3) 사용자정의 Async 메서드 private static async void FileReadAsync(string filepath) string filetext = await ReadAllTextAsync(filePath); Console.WriteLine(fileText); static Task<string> ReadAllTextAsync(string filepath) return Task.Factory.StartNew(() => return File.ReadAllText(filePath); );

C# 5.0 1/ C# 과닷넷프레임워크 2/ C# 2.0, 3.0, 4.0, 5.0 정리 3/ 정리및 Q&A

정리 단축표기법 방식 수 신규 IL 2 BCL 확장 5 언어확장 18 C# 6.0? Roslyn?