2011-06-15 2 views
1

개체 유형 및 기타 식별 매개 변수를 지정하는 곳으로 일반 조회 방법을 만들고 싶습니다.이 메서드는 해당 유형의 개체를 반환합니다. 이것이 가능한가?일반 조회 방법

나는 이런 생각을하고 있습니다. 당신이 원하는 모든 인스턴스를 만들 경우

public T GetObjectOfType<T>(Guid id) where T: class, new() 
{ 
    if (id == FooGuid) //some known identifier 
    { 
     T t= new T(); //create new or look up existing object here 
     //set some other properties based on id? 
     return t; 
    } 
    return null; 
} 

:

public T GetObjectOfType(Guid ID, typeof(T Class)) 
{ 
    //lookup this object and return it as type safe 
} 

난 그냥 작동하지만 난 당신이에 대한 일반적인 방법을 사용할 수는 개념

+0

GUID 란 무엇입니까? – asawyer

답변

2

을 설명 희망하지 않습니다이 알고 특정 유형의 추가 id 매개 변수가 필요하지 않은 경우 id를 기반으로 일부 속성 등을 설정한다고 가정합니다. 또한 클래스는 기본 생성자를 제공해야하므로 new() 제약 조건을 제공해야합니다.

+0

이것이 어떻게 사용될 것인지 잘 모르겠습니다. 컴파일 타임에 타입을 전달해야하므로, 왜이 메소드에 위임하는 대신 새로운 자신을 호출하지 않을까요? 매개 변수를 기반으로 인터페이스를 구현하는 유형을 반환하는 팩토리 메소드를 이해할 수 있지만 T는 기본 생성자가있는 참조 유형 일 수 있습니다. 무엇이 요점입니까? –

+0

@Ed S .: 설명이 없으면 자신이 (내가 제시 한 것처럼) 쓸모가 없다는 것을 인정한다 - 캐싱 계층이 될 수있다. 즉, 새로운 것을 만드는 대신 캐쉬 된 객체를 찾는다. 물론 이것은 단지 짐작. – BrokenGlass

+0

이것은 Dependency Injection/Inversion of Control 프레임 워크의 기초입니다. 당신은 인터페이스의 인스턴스를 요청하고 리턴 된 구체는 어셈블리 스캐닝이나 일종의 타입 레지스트리를 사용하는 기본 규칙에 의해 정의됩니다. http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx 참조 – gazarsgo

2

일반적으로 팩토리 메소드는 생성 할 객체의 유형을 사용하지 않습니다. 그들은 공통적 인 인터페이스를 구현하는 유형을 반환하며 구체적인 기본 유형은 일반적으로 열거 형 값과 같은 일부 인수에 의존합니다. 간단한 예 :

interface Whatever 
{ 
    void SomeMethod(); 
} 

class A : Whatever { public void Whatever() { } } 

class B : Whatever { public void Whatever() { } } 

enum WhateverType { TypeA, TypeB } 

public void GetWhatever(WhateverType type) 
{ 
    switch(type) 
    { 
     case WhateverType.TypeA: 
      return new A(); 
      break; 
     case WhateverType.TypeB: 
      return new B(); 
      break; 
     default: 
      Debug.Assert(false); 
    } 
} 

여기에 유형 안전성이 있습니다. 나는 컴파일 타임에 generic 인자를 제공해야 할 필요가 있기 때문에 제네릭을 어떻게 구현할 지 확신하지 못한다.