2017년 12월 1일 금요일

Unity의 C# 6.0지원으로 가능해진 기능을 빠르게 살펴보기


// Unity의 C# 6.0지원으로 가능해진 기능을 빠르게 살펴보기 // Edit > Project Settings > Player > Scripting Runtime Version을 .Net 4.6으로 변경해야함 using System; using System.Threading; using System.Threading.Tasks; using System.Collections; using System.Collections.Generic; using UnityEngine; using static System.Math; //< using static 지지자로 특정 클래스의 정적 멤버를 접근자 없이 바로 사용 가능 public class Test : MonoBehaviour  {     // 자동 속성의 초기화 처리     public string Key { get; set; } = Guid.NewGuid().ToString("N");     // set을 지정하지 않으면, 생성자를 제외한 모든곳에서  수정이 불가능한 readonly속성을 가진다.     public string OnlyGetter { get; } = "Get";      void Start()     {         // 가독성 좋은 문자열 보간 기능 지원         var age = 10;         Debug.Log($"age is {age}, pi is {Math.PI}");         // 로그찍을떄 편리한 nameof 연산자 지원         Debug.Log($"var name : {nameof(age)}");         // 코드를 심플하고 안전하게, null 조건부 연산자 (Objective-C느낌)         string str1 = null;         string str2 = str1?.Trim()?.Substring(3);         Debug.Log("str2 : " + (null == str2 ? "null" : str2));         // System.Math클래스의 Pow Static함수를 바로 접근(using static 효과)         Debug.Log($"call pow : {Pow(10, 2)}");         // 예외 필터처리(when 지시자)         try         {             throw new ArgumentException("Invalid x argument");         }         catch (ArgumentException ex) when (ex.Message == "Invalid x argument")         {             Debug.Log("do filters exceptions!");         }         // 보기 좋은 새로운 방식의 컬렉션 객체 초기화 방법,          var dic = new Dictionary<string, string>          {             ["Name"] = "Noh Hwigyeom",              ["Country"] = "Republic of Korea",              ["City"] = "Seoul",              ["Gender"] = "Male"          };         // async와 awake의 사용         DoTask();     }     async Task DoTask()      {         Debug.Log($"start DoTask, main thread id : {Thread.CurrentThread.ManagedThreadId}");         await Task.Delay(1);         // 쓰레드에서 동작         var workTask = Task<int>.Run(() =>             {                 Debug.Log($"workTask thread id : {Thread.CurrentThread.ManagedThreadId}");                 Task.Delay(1);                 return 999;             });         Debug.Log("finish workTask, return value : " + await workTask);         // 순차적인 쓰레드 처리(string으로 리턴값 순차적으로 전달)         var workTask2 = Task<string>.Factory.StartNew(() =>             {                 Debug.Log($"StartNew thread id : {Thread.CurrentThread.ManagedThreadId}");                 return "red";             })             .ContinueWith(prevTask =>                 {                     Debug.Log($"ContinueWith, prevTask.Result : {prevTask.Result}");                     return "blue";                 })             .ContinueWith(prevTask =>                 {                     Debug.Log($"ContinueWith, prevTask.Result : {prevTask.Result}");                     return "white";                 });         workTask2.Wait();         Debug.Log("finish workTask, return value : " + workTask2.Result);     }     // 간단한 로직의 함수는 람다식을 이용해서 심플하게 구현     public void DLog(string str) => Debug.Log(str); }

댓글 없음:

댓글 쓰기