제네릭 메서드에서 클래스 별 속성 처리

마이크 데브 니

나는 여전히 제네릭에 대해 머리를 감싸고 있으며 올바르게 작업하고 싶은 도전에 맞서고 있습니다. 이렇게 정의 된 몇 가지 클래스가있는 경우 :

public abstract class DocBase {
    public long ID { get; set; }                                    
    public string Description { get; set; }             
    public long DocumentID { get; set; }                
    public string DocumentDate { get; set; }            
    ...snipped...
}

public class AppDoc : DocBase {
    public string A { get; set; }                                    
    public string B { get; set; }             
    public string C { get; set; }                    
}

public class OtherDoc : DocBase {
    public string D { get; set; }                                    
    public string E { get; set; }             
    public string F { get; set; }                    
}

이 문서를 검색하는 데 사용할 수업이 있습니다.

public class Repo<T> where T : DocBase, new() 

이 클래스에는 메서드가 포함됩니다.

public List<T> GetDocs()

이 메서드에서 파생 클래스 (AppDoc : A, B, C 및 OtherDoc : D, E, F)에 정의 된 속성에 액세스 할 수 있기를 원합니다. 하지만 이렇게 새 객체를 선언하면 :

var doc = new T();

디자인 타임에는 파생 된 클래스 (AppDoc 및 OtherDoc)가 아닌 기본 클래스 (DocBase)에서만 사용할 수있는 속성이 있습니다. 속성 A, B, C, D, E 및 F에 어떻게 가나 요?

편집 : 내 "어떻게 ..."에 대해 조금 자세히 설명합니다. 데이터베이스에서 가져온 결과 목록의 GetDocs () 메서드 내에서 속성 A, B, C, D, E 및 F를 채워야합니다.

public List<T> GetDocs(){    

var results = someService.GetMyDocuments();
var documents = new List<T>();

    foreach(IRepositoryRow row in results) {
        var newDoc = new T();

        newDoc.A = row.GetProperty("AFromDatabase").ToString();
        newDoc.B = row.GetProperty("BFromDatabase").ToString();

        documents.Add(newDoc);    
    }

    return documents;
}
크리스

해당 속성으로 무엇을 하려는지에 따라 다릅니다.

그것들을 조작한다면 (예를 들어 그것들을 채우거나 그것들을 기반으로 thigns를 계산하는) DocBaselike 에 대한 추상 메소드 DoStuff는 당신의 T에서 안전하게 호출 될 수 있고 당신이 속성으로 원하는 것을 할 수 있습니다.

객체가 무엇인지에 따라 다른 일을하고 싶다면 그것은 실제로 매우 일반적이지 않으며 아마도 객체에 대해 호출 할 수있는 추상 또는 가상 메서드를 갖는 것에 대해 약간 재고하고 싶을 것입니다.

질문에 입력 한 내용을 기반으로 한 몇 가지 샘플 코드 :

public abstract class DocBase {
    ...
    public abstract void LoadProperties(IRepositoryRow row);
    ...
}

public List<T> GetDocs(){    

    var results = someService.GetMyDocuments();
    var documents = new List<T>();

    foreach(IRepositoryRow row in results) {
        var newDoc = new T();
        newDoc.LoadProperties(row);
        documents.Add(newDoc);    
    }
    return documents;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

클래스 제네릭 속성 메서드 반환 유형 추론

분류에서Dev

Django : 쿼리 셋 속성이 클래스 기반 제네릭 뷰에서 작동하는 방식 이해하기

분류에서Dev

제네릭 유형 인스턴스를 가져 오지 않는 제네릭 메서드 내에서 구체적인 클래스 속성 읽기

분류에서Dev

코 틀린와 제네릭 클래스에 게터 (또는 메서드 나 속성) 목록 얻기

분류에서Dev

C # 제네릭, 여기서 T 클래스 : (상속 클래스)

분류에서Dev

제네릭 메서드에서 형식 인수로 사용중인 클래스의 기본 클래스 속성에 액세스 할 수 없습니다.

분류에서Dev

제네릭 클래스에서 nullable 형식을 처리하는 방법

분류에서Dev

클래스 별 메서드 가시성

분류에서Dev

제네릭에서 필수 생성자를 사용하여 클래스 상속

분류에서Dev

AutoMoq에서 제네릭 클래스의 속성을 매개 변수로 전달

분류에서Dev

클래스 속성을 설정하는 제네릭 메서드로 재귀 방지 C #

분류에서Dev

별도의 클래스에서 메서드 생성

분류에서Dev

별도의 클래스 Python의 메서드에서 클래스의 속성을 조작하는 방법

분류에서Dev

제네릭 클래스 내부에 생성 된 사용자 지정 속성

분류에서Dev

클래스 생성자에서 제네릭 유형 사용

분류에서Dev

C ++ : 제네릭 클래스의 비 제네릭 메서드?

분류에서Dev

C ++ : 제네릭 클래스의 비 제네릭 메서드?

분류에서Dev

비 제네릭 클래스의 제네릭 메서드

분류에서Dev

Javascript에서 클래스 별 요소 검색 및 제목 속성 검색 (greasemonkey)

분류에서Dev

비 제네릭 클래스의 제네릭 클래스 메서드

분류에서Dev

별도의 네임 스페이스에서 중복 클래스를 처리하는 모범 사례

분류에서Dev

제네릭 메서드에 제네릭 클래스 객체 보내기 (Java)

분류에서Dev

클릭시 li에서 클래스 속성 제거

분류에서Dev

제네릭 유형에서 클래스 속성을 자동 생성 할 수 있습니까?

분류에서Dev

여러 클래스에 대한 Rails 제네릭 메서드

분류에서Dev

추상 클래스 C #에서 중첩 된 제네릭 / 중첩 된 제네릭의 상속

분류에서Dev

파이썬에서 클래스 메소드 속성의 딕셔너리 빌드

분류에서Dev

신속하게 제네릭에 클래스 메타 데이터 제공 (Codable)

분류에서Dev

Python : 클래스를 사용하여 클래스 속성이 메서드 인수 인 것처럼 메서드 호출 처리

Related 관련 기사

  1. 1

    클래스 제네릭 속성 메서드 반환 유형 추론

  2. 2

    Django : 쿼리 셋 속성이 클래스 기반 제네릭 뷰에서 작동하는 방식 이해하기

  3. 3

    제네릭 유형 인스턴스를 가져 오지 않는 제네릭 메서드 내에서 구체적인 클래스 속성 읽기

  4. 4

    코 틀린와 제네릭 클래스에 게터 (또는 메서드 나 속성) 목록 얻기

  5. 5

    C # 제네릭, 여기서 T 클래스 : (상속 클래스)

  6. 6

    제네릭 메서드에서 형식 인수로 사용중인 클래스의 기본 클래스 속성에 액세스 할 수 없습니다.

  7. 7

    제네릭 클래스에서 nullable 형식을 처리하는 방법

  8. 8

    클래스 별 메서드 가시성

  9. 9

    제네릭에서 필수 생성자를 사용하여 클래스 상속

  10. 10

    AutoMoq에서 제네릭 클래스의 속성을 매개 변수로 전달

  11. 11

    클래스 속성을 설정하는 제네릭 메서드로 재귀 방지 C #

  12. 12

    별도의 클래스에서 메서드 생성

  13. 13

    별도의 클래스 Python의 메서드에서 클래스의 속성을 조작하는 방법

  14. 14

    제네릭 클래스 내부에 생성 된 사용자 지정 속성

  15. 15

    클래스 생성자에서 제네릭 유형 사용

  16. 16

    C ++ : 제네릭 클래스의 비 제네릭 메서드?

  17. 17

    C ++ : 제네릭 클래스의 비 제네릭 메서드?

  18. 18

    비 제네릭 클래스의 제네릭 메서드

  19. 19

    Javascript에서 클래스 별 요소 검색 및 제목 속성 검색 (greasemonkey)

  20. 20

    비 제네릭 클래스의 제네릭 클래스 메서드

  21. 21

    별도의 네임 스페이스에서 중복 클래스를 처리하는 모범 사례

  22. 22

    제네릭 메서드에 제네릭 클래스 객체 보내기 (Java)

  23. 23

    클릭시 li에서 클래스 속성 제거

  24. 24

    제네릭 유형에서 클래스 속성을 자동 생성 할 수 있습니까?

  25. 25

    여러 클래스에 대한 Rails 제네릭 메서드

  26. 26

    추상 클래스 C #에서 중첩 된 제네릭 / 중첩 된 제네릭의 상속

  27. 27

    파이썬에서 클래스 메소드 속성의 딕셔너리 빌드

  28. 28

    신속하게 제네릭에 클래스 메타 데이터 제공 (Codable)

  29. 29

    Python : 클래스를 사용하여 클래스 속성이 메서드 인수 인 것처럼 메서드 호출 처리

뜨겁다태그

보관