2011-08-23 11 views
1

현재 클래스의 필드를 가져 오려고합니다. 나는 클래스가 ICloneable 인터페이스를 구현하도록 만든다.현재 클래스의 필드를 가져 오는 방법은 무엇입니까?

clone() 안에는 다음 줄이 필드를 찾지 못하는 것 같습니다. 왜 그래?

foreach (FieldInfo fi in this.GetType().GetFields()) 
{ 
} 

많은 감사, 공공의 필드를 찾을 수

답변

0

사용 BindingFlags로 : 음

var flags = BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Public; 
foreach (FieldInfo fi in this.GetType().GetFields(flags)) 
{ 
    //... 
} 
2

. BindingFlags을보십시오.

더 좋은 방법을 제안하려면 MemberwiseClone을 호출하면 현재 클래스/인스턴스의 모든 필드 값이 복사됩니다.

1

기본적으로 공개 필드 만 반환되기 때문에. BindingFlags.NonPublic과 함께 다른 과부하를 사용하십시오.

0

GetFields이 (MSDN에서) "공용 필드는 현재 유형에 대해 정의되지 않은"경우 비어 것이 유일한 이유.

더 일반적으로, 당신이하려고하는 것을 이미 수행하고있는 Object 클래스의 protected 메소드가 있음을 알고 있습니까 (얕은 복사)?

public object Clone() 
{ 
    return MemberWiseClone(); 
} 
: 당신이처럼 사용할 수

MemberwiseClone를 불렀다

관련 문제