@ 16. 1 ~ 17. 1/C#
-
as 연산자 / yield@ 16. 1 ~ 17. 1/C# 2016. 12. 8. 17:35
as 연산자는 as 뒤에 나오는 타입이 아니면 null을 반환한다.typeof는 특정 데이터 형식을 나타낸다.?클래스 자체의 타입을 가져온다...systen,tyoe t1 - typeof(Employee) // Employee자체가 타입으로 리턴됨..t1은 employee클래스 자체가 되는것.. C#의 yield 키워드는 호출자 (Caller)에게 데이타를 하나씩 리턴할때 사용한다. 흔히 반복자 Iterrator 라고 불리우는 이러한 기능은 집합적인 데이타섹으로부터 하나씩 데이타를 호출자에게 보내주는 역할을 한다. yield는 yield return 또는 yield break의 2가지 방식으로 사용되는데, yield return은 데이터를 하나씩 리턴하는데 사용되고, yield break는 리턴을 중지하..
-
nullable@ 16. 1 ~ 17. 1/C# 2016. 11. 19. 14:42
Nullable 타입의 박싱/언박싱 박싱과 언박싱에 대한 이야기를 나누어 보기 전에 null 값의 비교에 대해서 살펴보도록 하겠다. Nullable 타입의 비교는 HasValue 속성을 직접 이용할 수도 있고 == 연산자를 이용할 수도 있다. DateTime? birthday; If(birthday==null) If(birthday.HasValue) 그리고 Nullable 타입은 다음과 같이 값뿐만 아니라 null을 대입할 수 있다는 것을 볼 수 있다. DateTime? birthday; birthday = null; birthday = new DateTime(1938,03,21); 하지만 이 코드를 개념상으로 접근한다면 상당히 혼란스러운 부분일 수 있다. 그래서 내부적인 동작을 IL로 확인해 본 결과 ..
-
가비지 컬렉터 가비지 컬렉션@ 16. 1 ~ 17. 1/C# 2016. 11. 19. 09:39
* 객체 생존 기간객체는 new 연산자에 의해 메모리를 할당 하고 생성자에 의해 메모리에 있는 객체가 초기화 된다.반대로 소멸되는 경우에는 먼저 Finalize 메소드를 이용하여 메모리를 초기화 되지 않은 상태로 돌린다. 다음으로 이메모리 공간을 Heap에 반환하는 것이다. 그러므로 객체의 존속기는 new를 이용하여 메모리를 할당받는 순간부터 메모리를 Heap에 반환 할 때 까지이다. * GC(Garbage Collector)C#의 경우 기존의 C/C++ 처럼(new, delete) 프로그래머가 메모리 관리를 하지 않아도 된다. CLR에서 자동으로 알아서 소멸 시켜 준다. 또한 C#의 경우 명시적으로 코드상에서 객체를 소멸 할 수 없는 대신 Garbage Collector라는 것을 지원 해 준다. Gar..
-
C#AVL 트리@ 16. 1 ~ 17. 1/C# 2016. 11. 18. 23:11
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Collections.Concurrent; namespace Console1{ public class AvlNode { public int m_iData; public AvlNode m_Left_Child; public AvlNode m_Right_Child; public AvlNode(int iData) { m_iData = iData; } } public class AvlTree { private ..
-
델리게이트, 이벤트 - 1@ 16. 1 ~ 17. 1/C# 2016. 11. 18. 05:05
델리게이트(Delegate)는 사전적 의미로 "대리자, 대표“ 등으로 해석되는데, C/C++에서의 함수 포인터와 비슷한 개념으로 생각하면된다.물론, 그 이상의 기능을 한다. 일반적으로 콜백(Call Back) 또는 발생된 이벤트에 대한 처리를 위한 이벤트 핸들러에 사용된다.콜백(Call Back)은 호출 될 함수를 알려주어서, 다른 프로그램 혹은 다른 모듈에서 함수를 호출하게 하는 방법이다. 일반적으로 운영체제가 호울할 애플리케이션의 메소드를 지정해서 특정 이벤트가 발생했을 때 호출되도록 지정할 수 있는데, 이런 메소드를 콜백 메소드라고 한다. 델리게이트의 선언이다. 이것은 함수의 선언과 비슷한 형식으로 되어있다.이것은 일종의 함수 타입의 선언이라고 보면 된다. 즉, public 권한을 갖으며, 리턴형은..
-
object 란? boxing unboxing!@ 16. 1 ~ 17. 1/C# 2016. 11. 18. 03:21
object는 System.Object의 별칭으로 C#의 모든 클래스의 최상위 부모 클래스입니다. (사실 C#의 5가지 형식(클래스, 구조체, 열거형, 델리게이트, 인터페이스 ) 중 인터페이스를 제외한 모든 형식은 System.Object를 최상위 공통 클래스로부터 파생됩니다.)모든 클래스는 System.Object 공통 클래스로부터 파생됩니다. 다음은 System.Object의 기본 메소드입니다. 4개의 가상 메소드와 2개의 일반 메소드, 2개의 정적 메소드 이렇게 총 8개의 메소드를 제공합니다.namespace System{public class Object{public virtual bool Equals(object obj);public virtual int GetHashCode();public v..
-
참조형식과 값형식 차이, 함수 매개변수(in, out, ref)@ 16. 1 ~ 17. 1/C# 2016. 11. 18. 03:05
첫째, 참조 기반의 형식(class, interface, delegate)둘째, 값 기반의 형식 (struct, enum) 클래스는 인자 없는 기본 생성자를 만들 수 있음. 구조체는 기본 생성자를 만들 수 없음.(예약됨) 둘다 생성시에CPoint cpt = new CPoint();cpt.Print(); SPoint spt = new SPoint();spt.Print(); 이렇게 가능그러나..이건 안됨.. CPoint cpt; // 객체가 없으므로 말도 않됨!cpt.x = 1; // 객체가 없는데 헐!cpt.y = 1; // 객체가 없는데 헐!cpt.Print();// 객체가 없는데 헐! SPoint spt; // 변수 선언이 곧 객체 생성이므로 당근 가능!!spt.x = 5; // 굿!spt.y = 5;..
-
getter setter@ 16. 1 ~ 17. 1/C# 2016. 11. 18. 02:49
위의 코드를 보시면, Field의 값을 얻어오거나 수정할때 GetField, SetField 메소드를 이용하죠? 그런데 C# 에서는 프로퍼티라는 기능을 제공하여 상당히 간단히 구현할 수 있습니다. 프로퍼티에는 get 속성 접근자와, set 접근자가 있습니다. 아래는 프로퍼티 기본 선언 형식입니다.12345678910111213141516 class 클래스명 { 데이터타입 필드명; 접근한정자 데이터타입 프로퍼티명 { get { return 필드명; } set { 필드명 = value; } } }... 여기서 보이는 get 속성 접근자는 위에서 구현한 GetField 메소드를 대체합니다. 즉, 속성 값을 반환하는데 사용되며, set 접근자는 SetField 메소드를 대체, 새 값을 할당하는데 사용합니다. 살..