using System;
using System.Collections.Generic;
class Test
{
public static void Main()
{
foreach (string s in GetItems())
Console.WriteLine(s);
}
private static IEnumerable GetItems()
{
yield return "Hello yield 1";
yield return "Hello yield 2";
yield return "Hello yield 3";
yield return "Hello yield 4";
yield return "Hello yield 5";
}
}
"yield return" 문이 있는데, iteration의 다음 값을 반환한다고 한다.
"yield break" 문도 있단다.
『The yield return statement produces the next value of the iteration.
The yield break statement indicates that the iteration is complete.』
GetItems() 메소드의 리턴 타입이 IEnumerable 이라는 것도 주목할 부분이다.
참조 문서
c# 2.0 iterators -
http://community.bartdesmet.net/blogs/bart/archive/2006/07/06/4121.aspx
Partial 클래스는 기존의 클래스 앞에 partial 키워드를 추가하여 작성할 수 있다. 물론, partial 키워드를 사용한 클래스는 여러 파일에 나뉘어 존재할 수 있다.
Partial 클래스를 작성할 때 다음과 같은 사항을 유의해야 한다.
1. Partial 클래스는 동일한 어셈블리/모듈(dll 또는 exe)에 존재해야 한다.
2. 한번이라도 partial로 선언된 클래스는 모두 동일하게 partial로 선언되어야 한다.
partial public class MyForms {}
public class MyForms {} // 컴파일 오류
3. Generic으로 사용될 매개 변수들이 일치해야 한다.
4. public/private/protected/internal 등을 사용할 수 있다.
5. 중첩된 클래스에 대해서도 Partial 클래스를 작성할 수 있다.
6. Partial 클래스에 적용된 특성(Attribute)들은 컴파일 시에 모두 병합된다.
Nullable 타입은 기본 타입에 물음표(?)를 추가하여 선언한다. 예를 들어, int?와 같이 선언하면 기본 타입인 int의 Nullable 타입이 선언된다. 이 때 선언된 타입은 널인지에 대한 여부를 확인할 수 있는 기능을 지원한다는 점을 제외하면 내부적으로 기본 타입(int 형)과 동일하다. 이와 같은 기능이 가능한 이유는 바로 Generic 덕분이다.
| ||||
| ||||
C# 언어 스펙을 보면 Nullable 타입은 다음 <리스트 4>와 같이 HasValue와 Value 속성을 노출하는 Generic 구조체이다. 이때 HasValue가 false이면 널인 경우이고 HasValue가 false일 때, Value 속성 값을 설정하면 System.InvalidOperationException 예외가 발생하도록 구현되어 있다.
| ||||
| ||||
따라서 int? x = 123; 과 같은 코드를 작성하면 컴파일러는 Nullable
지금까지 Nullable 타입에 대해서 간단하게 살펴보았는데, Nullable 타입은 탄생 배경부터 여러 가지 이슈들을 동반하고 있다(예를 들면, int?와 int??의 사용). 따라서 Nullable 타입에 관한 보다 자세한 정보는 MSDN의 블로그를 통해서 확인하도록 한다.@
'IT > C#' 카테고리의 다른 글
닷넷 트랜잭션 정리 (0) | 2009.09.30 |
---|---|
C#2.0 , C# 3.0 New Features (0) | 2009.09.15 |
C# 3.0 개요 (0) | 2009.09.11 |
[C# 2.0] Generics, Iterator, Anonymous, Partial (0) | 2009.08.24 |
[.net Framework] System.Activator 객체 (0) | 2009.08.24 |