2010-01-19 4 views
2

일반 파일에서 개체를 저장하고 쿼리하는 제네릭 클래스를 만들었습니다. 항상 'FlatFileRecord'일반 클래스의 캐스팅 메서드 인수

상속 ...

'T'를 나는 내가 그들을 캐스트 할 수 있도록 객체에 메소드 인수를 변경하는 것을 계속하고 나는이 올바른 방법에 대해거야 궁금 해요

이 컴파일되지 않습니다 :

public class FlatFile<T> 
{ 
    public void Save(T record) 
    { 
     FlatFileRecord castedRecord = (FlatFileRecord)record; 
     castedRecord.RecordNumber... 
    } 
} 

이 컴파일하지만 강력한 형식의 제네릭 클래스의 전체 지점 이길 것 같다

public class FlatFile<T> 
{ 
    public void Save(object record) 
    { 
     FlatFileRecord castedRecord = (FlatFileRecord)record; 
     castedRecord.RecordNumber... 
    } 
} 

답변

3
을 당신이 어떤 이유로 제약없이 할 수 있도록해야하는 경우

public class FlatFile<T> where T : FlatFileRecord 
{ 
    public void Save(T record) 
    { 
     FlatFileRecord flatRecord = record; 
     flatRecord.RecordNumber... 
    } 
} 

, 당신은 다시 아래로 다시 반대하고 캐스트 할 수 있습니다 : T는 항상 FlatFileRecord에서 파생 될 것입니다

경우, 그런 식으로 제한

public class FlatFile<T> 
{ 
    public void Save(T record) 
    { 
     FlatFileRecord flatRecord = (FlatFileRecord)(object)record; 
     flatRecord.RecordNumber... 
    } 
} 
+0

나는 간단한 방법이있을 것이라고 알고있었습니다. 아마도 'T : FlatFileRecord'를 사용하여이를 시행해야합니다. 제네릭에 대해 좀 더 읽어야 할 것 같아요. – Tim