본문 바로가기

분류 전체보기270

c# 패턴매칭... switch case에 활용.. 예1. List objList = new(); foreach (object item in objList) { switch (item) { case 100: break; case null: break; case DateTime dt: // 타입패턴, 필요없다면 dt 변수명을 _로 생략 가능d break; case ArrayList arr: break; case var elem: break; } } case쪽을 보면서.. var패턴, 타입패턴, 상수 패턴이 있다... switch case에 패턴들을 적용하면서 모든 if문은 switch case문으로 또한 그 반대도 가능하게되었다 예2. //변경 전... int j = GetIntegerResult(); if (j > 300) { } else { } //변경.. 2022. 12. 6.
Generic, where, using static Generic... where.. c#의 generic을 사용할 때 제약없이 받아보는 경우를 먼저보자 T AllocateIfNull(T item) { if (item == null) { item = new(); } return item; } 이렇게 된 경우에는 T에 무조건 기본생성자가 있을거라는 확신이 차있는 경우다 그렇지만 기본생성자가 없는 경우라면 에러가 발생할 수 있다 항샹을 시킨다면 .. T AllocateIfNull(T item) where T : class, new() { if (item == null) { item = new(); } return item; } where을 이용해서 T조건을 걸어준다, class이면서 new() 기본생성자를 가지고있는 것이다. cf: Nullable는 -> ?.. 2022. 12. 6.
Task vs TaskValue Task Vs TaskValue 빈 인스턴스를 반환할 때는 굳이 Task를 써야할까에 대한 것이다. Task는 참조형이지만, TaskValue는 value형태이다.. TaskValue가 필요한 경우 public class sum { private static Dictionary_cache = new(); public static Task CalcAsync(int n) { if (_cache.ContainsKey(n)) { return Task.FromResult(_cache[n]); } return Task.Factory.StartNew( () => { long sum = 0; for (int i = 1; i { long sum = 0; for (int i = 1; i 2022. 12. 6.
c# (시작하세요 c# 프로그래밍 도서 ) 추상, 인터페이스 추상 vs 인터페이스 c# 9.0 프로그래밍 책에는 c++에는 다중상속이있지만 c#은 단일 상속, 그렇지만 interface는 추가로 받아 구현할 수 있다고 적혀있지만 의미론적으로는 추상은 뼈대를 만들고 그에 해당하는 기능들은 인터페이스로 둘 수 있다고 다른? 곳에서 본 것같다 House class 집이라는 것을 추상클래스로 뼈대를 잡았다 그에 상응하는 door는 기능적으로 인터페이스로 조정할 수 있다. public abstract class House { private String roof = "House roof"; private String wall = "House wall"; private Door door; public void setDoor(Door door) { this.d.. 2022. 12. 5.