2014-10-14 2 views
0

일반 클래스를 사용하여 일반적인 "변경 가능한"메서드를 달성하기 위해 노력하고있어, C#이 얻을 수 있는지 모르겠다. 상황을 설명하겠습니다. 속성이 [PrimaryKey] 및 [Field]로 표시된 데이터베이스의 엔티티를 나타내는 클래스가 있습니다. 예 :일반 클래스 내에서 C# - 특정 형식 메서드 선언

public class Car :TableEntity 
    { 
     [Field] 
     [PrimaryKey] 
     public string RegNumber{get;set;} 
     [Field] 
     public string Color{get;set;} 
    } 

무엇을 달성하려고하는 것은 TableEntity 클래스를 사용하여 제네릭 클래스의 인스턴스는 .GetOne() 메소드가 자동으로 기본 키의 사람들로 매개 변수를 변경하는 것이,하지만 난 할 수 없었다 그것을 할 우아한 방법을 찾으십시오.

public class BusinessObject<T> where T:TableEntity 
{ 
public T GetOne(); //this is the method to modify depending on which type is T 
} 

을하고 난

BusinessObject<Car> BO = new BusinessObject<Car>(); 

을 할 경우 내가있는 Intellisense에 표시되어야합니다 : 예를 들어

, 나는이

BO.GetOne(string RegNumber); 

는 방법이나 해결 방법에 있습니까 이걸 달성 할까? 나는 System.Reflection을 사용하여 [PrimaryKey]로 표시된 매개 변수 이름과 유형을 추출 할 수 있지만 "공중에서"메소드 선언을 수정할 수 있는지 여부는 알지 못합니다.

대단히 감사합니다!

답변

1

당신은 일반적인 매개 변수를 추가하고 전파해야 할 것 : 그것은 변화를가 온 - 더 - 플라이를 허용하지 않는다 확실히 따라서,

public abstract class TableEntity<TKey> 
{ 
} 

public class BusinessObject<TEntity, TKey> 
    where T : TableEntity<TKey> 
{ 
    public TEntity GetOne(TKey key) 
    { 
     // ... 
    } 
} 
0

C#을 정적으로 입력 된 뷰의 CLR 지점에서 언어를하지만, .Net4.0부터 DLR을 사용할 수 있다면 인텔리 센스 럭셔리를 희생해야합니다.

다른 매개 변수와 함께 일반 매개 변수를 허용하도록 코어 클래스/인터페이스를 수정할 수도 있습니다.

관련 문제