■ 인터페이스를 이용해 타입 매개 변수를 제한하는 제네릭 클래스 작성하기

----------------------------------------------------------------------------------------------------

using System;

 

/// <summary>

/// 메시지 인터페이스

/// </summary>

public interface IMessage

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method

 

    #region 메시지 구하기 - GetMessage()

 

    /// <summary>

    /// 메시지 구하기

    /// </summary>

    /// <returns>메시지</returns>

    string GetMessage();

 

    #endregion

}

 

/// <summary>

/// 자동차 클래스

/// </summary>

public class CarClass : IMessage

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 메시지 구하기 - GetMessage()

 

    /// <summary>

    /// 메시지 구하기

    /// </summary>

    /// <returns>메시지</returns>

    public string GetMessage()

    {

        return "자동차";

    }

 

    #endregion

}

 

/// <summary>

/// 비행기 클래스

/// </summary>

public class AirplaneClass : IMessage

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 메시지 구하기 - GetMessage()

 

    /// <summary>

    /// 메시지 구하기

    /// </summary>

    /// <returns>메시지</returns>

    public string GetMessage()

    {

        return "비행기";

    }

 

    #endregion

}

 

/// <summary>

/// 제네릭 클래스

/// </summary>

/// <typeparam name="T">타입</typeparam>

public class GenericClass<T> where T : IMessage // IMessage 인터페이스로 타입 T를 제한한다.

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Field

    ////////////////////////////////////////////////////////////////////////////////////////// Private

 

    #region Field

 

    /// <summary>

    /// 객체

    /// </summary>

    private T instance;

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 생성자 - GenericClass(instance)

 

    /// <summary>

    /// 생성자

    /// </summary>

    /// <param name="instance">객체</param>

    public GenericClass(T instance)

    {

        this.instance = instance;

    }

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 메시지 쓰기 - WriteMessage()

 

    /// <summary>

    /// 메시지 쓰기

    /// </summary>

    public void WriteMessage()

    {

        string message = this.instance.GetMessage();

 

        Console.WriteLine(message);

    }

 

    #endregion

}

 

...

 

CarClass carClass = new CarClass();

 

GenericClass<CarClass> carGenericClass = new GenericClass<CarClass>(carClass);

 

carGenericClass.WriteMessage();

 

AirplaneClass airplaneClass = new AirplaneClass();

 

GenericClass<AirplaneClass> airplaneGenericClass = new GenericClass<AirplaneClass>(airplaneClass);

 

airplaneGenericClass.WriteMessage();

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요