본문 바로가기
c#

Generic, where, using static

by kcj3054 2022. 12. 6.

Generic... where..

  • c#의 generic을 사용할 때 제약없이 받아보는 경우를 먼저보자
T AllocateIfNull<T>(T item)
{
    if (item == null)
    {
        item = new();
    }
    return item;
}
  • 이렇게 된 경우에는 T에 무조건 기본생성자가 있을거라는 확신이 차있는 경우다 그렇지만 기본생성자가 없는 경우라면 에러가 발생할 수 있다 항샹을 시킨다면 ..
T AllocateIfNull<T>(T item) where T : class, new()
{
    if (item == null)
    {
        item = new();
    }
    return item;
}
  • where을 이용해서 T조건을 걸어준다, class이면서 new() 기본생성자를 가지고있는 것이다.
  • cf: Nullable는 -> ?로 축약형으로 가능하다

Generic 타입 사용시 호출쪽에서 ...

  //T생략가능..
Utility.WriteLog<bool>(true);
Utility.WriteLog(0x05); 
Utility.WriteLog(3.14159f);

public static class Utility
{
    public static void WriteLog<T>(T item)
    {
        string output = string.Format("{0}: {1}", DateTime.Now, item);
        Console.WriteLine(output);
    }
}
  • c# 컴파일러가 writeLog 메서드의 인자로 T타입이 전달된다는 사실을 알리고 자동으로 유츄해서 처리해서 생략가능.

using static

  • using static을 하면 편리하다..
  StaticOnly.WriteNameAsync();
WriteNameAsync();

public static class StaticOnly
{
    public static string _name;

    public static void WriteNameAsync()
    {
        ThreadPool.QueueUserWorkItem(
            delegate(object objState)
            {
                Console.WriteLine(_name);
            }
        );
    }
}
  • 원래의 예로면 StaticOnly.WriteNameAsync()을 해야한다 하지만 using static StaticOnly를 한다면.. 바로 WriteNameAsync()을 사용할 수 있다

cf...

  delegate int? MyDivide(int a, int b);

 MyDivide myFunc = delegate(int a, int b)
 {
     if (b == 0)
         return null;

     return a / b;
 };
  • 익명 타입의 메서드를 델리게이트변수에 담앙서 사용할 수 있다

'c#' 카테고리의 다른 글

c# 7.0...8.0  (0) 2022.12.06
c# 패턴매칭... switch case에 활용..  (0) 2022.12.06
Task vs TaskValue  (0) 2022.12.06
c# (시작하세요 c# 프로그래밍 도서 )  (0) 2022.12.05
추상 vs 인터페이스  (0) 2022.12.05