2012-11-20 2 views
0

특정 기본 유형으로 시행되는 유형을 전달할 방법이 있는지 궁금해하고있었습니다. 예를 들어, 내 게임 엔진의 경우, 나는 속성 목록 (controllable, rigidBody 등)을 가지고 있습니다. 새로운 객체를 취하는 addAttribute 매개 변수가 있습니다. 그러나, 나는 또한 자신의 새 개체를 만들 수있는 대신 형식을 사용하는 오버로드를하고 싶습니다. 그래서 예를특정 추상을 상속 한 매개 변수

public void addAttribut(Type attribute) 

을 위해 내가 LINQ를 구현 어쩌면 뭔가 생각하고? 나는 시도했지만 "where"는 제네릭에서만 사용할 수있는 것처럼 보입니다.

public void addAttribute(Type attribute) where attribute : Attribute 

은 함수의 서명입니다. 나는 Unity가 이것을한다고 믿습니다. 그러나 Mono를 통해이 작업을 수행 할 수 있습니다.

올바른 기본 유형이 아닌 경우 항상 예외를 throw 할 수 있습니다. 그러나 프로그래머가 잘못된 시간을 함께 지키지 못하게하는 방법이 있는지 궁금합니다.

아이디어가 있으십니까? 어떤 도움이라도 대단히 감사합니다!

답변

0

당신이 컴파일 시간의 유형을 알아야하는 코드를 호출하는 행복 경우, 당신은 유형 매개 변수를 사용하여 일반적인 방법을 만들 수 :

public void AddAttribute<T>() where T : Attribute 
{ 
    // Use typeof(T) 
} 

또는 매개 변수없는 생성자를 시행 할 그런 다음 호출 할 수있는 :

public void AddAttribute<T>() where T : Attribute, new() 
{ 
    T t = new T(); 
    ... 
} 

을하지만, 그렇지 않으면 그것을하는 방법이 없습니다, 아니 - 당신은 다른처럼 실행시 인수를 확인해야 할 것이다.

+0

하아! 이제 완벽하게 유니티가 어떻게 동작 하는지를 기억합니다 (꽤 오래 사용하지 않았습니다!) –

+0

이 답변을 찾고있는 분들께서는 함수를 함께 사용하실 수 있습니다 public void addAttribute () T : Attribute, new (), 이제 addAttribute (new T())를 호출 할 수 있습니다. –

+0

@SergueiFedorov : 매개 변수없는 생성자를 사용하여 인스턴스를 만들고 싶지는 않다. 예를 들어 다른 생성자를 원할 수 있습니다. 내가 명확하게 대답을 수정합니다. –