이쪽 카테고리는 학습하면서 삽질 + 복습용으로 사용해야겠다.
문법중에 제네릭인데 구조적으로 자주 사용하는게 좋은데 안쓰다보니 계속 안쓰게된다.... 다시 복습겸 기본 예제 코드를 만들어서 복습했다.
public class Test<T>
{
public T field;
public Test(T t)
{
field = t;
}
}
제네릭 Test.class를 만들고 클래스 인스턴스를 생성할때 생성자를 통해 변수 field에 할당 하도록 했다.
public class m_test : MonoBehaviour
{
public Test<int> m_int;
public GameObject obj_test;
public Test<GameObject> m_gobj;
void Start()
{
m_int = new Test<int>(10);
Debug.Log(m_int.field);
m_gobj = new Test<GameObject>(obj_test);
Debug.Log(m_gobj.field.gameObject.name);
}
}
예로 <int>, <GameObject>두 가지로 클래스를 생성했다. Test<int>는 10을 넣고 Test<GameObject>는 TestObj라는 이름 인 GameObject를 인스펙터창에서 넣고 Test<GameObject> 클래스 생성할 때 생성자에 넣었다.
where T : 제약조건 (인터페이스
where T : <인터페이스 이름> | 형식 인수가 지정된 인터페이스이거나 지정된 인터페이스를 구현해야 합니다. 여러 인터페이스 제약 조건을 지정할 수 있습니다. 제한하는 인터페이스는 제네릭이 될 수도 있습니다. |
public interface IMonster
{
void print();
}
public class MessagePrinter : IMonster
{
string Message;
public MessagePrinter(string message)
{
this.Message = message;
}
public void print()
{
Debug.Log(this.Message);
}
}
public class Test<T> where T : IMonster
{
public T[] Array { get; set; }
public Test(int size)
{
Array = new T[3];
}
}
public class m_test : MonoBehaviour
{
Test<IMonster> test = new Test<IMonster>(3);
void Start()
{
test.Array[0] = new MessagePrinter("하나");
test.Array[1] = new MessagePrinter("둘");
test.Array[2] = new MessagePrinter("셋");
for (int i = 0; i < 3; i++)
test.Array[i].print();
}
}
'삽질&복습(연습장)' 카테고리의 다른 글
유니티) 백그라운드 시간 흐름 테스트 (Unscaled Time, FixedDeltaTime, RealTime) (0) | 2020.07.30 |
---|---|
ExtensionMethod 활용하기_테이블 데이터 (0) | 2019.05.30 |
유니티_복습) 오브젝트 풀링하기 (1) | 2019.05.08 |
삽질) 물리연산의 체크사항, 레이캐스트 (0) | 2019.05.02 |
복습) C# 델리게이트 (0) | 2019.01.29 |