Book(16)
-
c# 5.0 - 1
호출자 정보 c++에 있는 __LINE__, __FUNCTION__과 같은 매크로 상수가 없어서 아쉬울 때가 있는데이를 대체하는 호출자 정보가 추가되었다. 다만 C# 답게 매크로가 아닌 특성과 선택적 매개변수로 구현된다. static void Main(string[] args) { LogMessage("This is test"); } static void LogMessage(string text, [CallerMemberName] string memberName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0) { Console.WriteLine("text : " + text); Console.WriteL..
2015.01.23 -
9장 - C# 4.0
dynamic static void Main(string[] args) { string txt = "test function"; List l = new List { 1, 2, 3, 4, 5}; Console.WriteLine(DuckTypingCall(txt, "test")); Console.WriteLine(DuckTypingCall(l, 3)); } public static int DuckTypingCall(dynamic target, dynamic item) { return target.IndexOf(item); } 객체지향 언어에서는 대개 강력한 타입 체계가 구성되어 있다. 따라서 위 코드 처럼 서로 연관성이 없는 타입을 같은 함수에서 호출 할 수 없다.하지만 동적 언어처럼형식이 아닌 단지 같은 ..
2015.01.16 -
8장 - C# 3.0 - 3
LINQ(Language Integrated Query) 데이터 열거 작업은 프로그래밍 작업시 빈번히 발생.이 작업을 일관되게 표현하는 문법체계. 전형적으로 컬렉션을 대상으로 쿼리 수행. public class Person { public string Name { get; set; } public int Age { get; set; } public override string ToString () { return string.Format ("{0} : {1}", Name, Age); } } public class MainLanguage { public string Name { get; set; } public string Language { get; set; } } class MainClass { pub..
2015.01.12 -
8장 - c# 3.0 - 2
확장 메서드 기존 클래스를 확장하면 방법.상속이 많이 쓰이지만 sealed로 봉인된 클래스이거나클래스를 상속받아 확장하면 기존 소스를 상속받은 클래스는 새로운 이름으로 바뀌어야 한다. 이런 방식이 싫다면 확장 메서드를 쓰면 된다.기존 클래스의 내부 구조를 전혀 바꾸지 않고 새 인스턴스 메서드를 추가할 수 있다. static class ExtensionMethodSample { // 확장 메서드는 반드시 static이어야 하고 // 확장하려는 타입의 매개변수를 this 예약어와 함께 명시 public static int GetWordCount(this string txt) { return txt.Split(' ').Length; } } namespace Extension { class Program { s..
2015.01.10 -
7장 - c#2.0 - 그외
?? 연산자 string txt = null; Console.WriteLine(txt ?? "(null)"); if, else나 3항 연산자인 ? : 를 사용할 필요없이 모 아니면 도로 사용할 수 있게 해주는 default 예약어 C#에서 변수를 명시적으로 초기화 하지 않았을 때 값형식은 0 참조형식은 null로 초기화 된다. 이렇게 미리 형식을 알고 있다면 초기화가 가능하겠지만 제네릭을 쓸 때는 미리 타입을 알 수 없으므로 뭔가 대책이 필요하다. 이때 default예약어를 쓰는데 default(T) 형식으로 쓴다. int t = default(int); Console.WriteLine(t); yield return / break 배열과 List등에 담긴 요소를 foreach로 순회할 수 있는 이유는 이..
2014.12.28 -
7장 - c#2.0 - 제네릭
으로 명시하며지정한 타입은 JIT 컴파일 타임에 기계어 코드를 만들어준다. 제네릭 클래스는public class GenericClass와 같은 형식. 제네릭 메서드는public static void Method1 (T item){}처럼 지정하면 된다. 제네릭은 박싱/언박싱으로 발생하는 힙낭비를 막고 코드 중복도 해결해 준다. 제약 조건 public class Utility { public static int Max(int item1, int item2) { if (item1.CompareTo(item2) >= 0) { return item1; } return item2; } } int 타입만 사용하는 이 코드를 제네릭을 적용하여 컴파일하면 어떻게 될까? public class Utility { publi..
2014.12.25