현재 클래스의 필드를 가져 오려고합니다. 나는 클래스가 ICloneable
인터페이스를 구현하도록 만든다.현재 클래스의 필드를 가져 오는 방법은 무엇입니까?
clone()
안에는 다음 줄이 필드를 찾지 못하는 것 같습니다. 왜 그래?
foreach (FieldInfo fi in this.GetType().GetFields())
{
}
많은 감사, 공공의 필드를 찾을 수
현재 클래스의 필드를 가져 오려고합니다. 나는 클래스가 ICloneable
인터페이스를 구현하도록 만든다.현재 클래스의 필드를 가져 오는 방법은 무엇입니까?
clone()
안에는 다음 줄이 필드를 찾지 못하는 것 같습니다. 왜 그래?
foreach (FieldInfo fi in this.GetType().GetFields())
{
}
많은 감사, 공공의 필드를 찾을 수
사용 BindingFlags
로 : 음
var flags = BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Public;
foreach (FieldInfo fi in this.GetType().GetFields(flags))
{
//...
}
. BindingFlags
을보십시오.
더 좋은 방법을 제안하려면 MemberwiseClone
을 호출하면 현재 클래스/인스턴스의 모든 필드 값이 복사됩니다.
GetFields는 현재 Type의 모든 public 필드를 반환합니다. http://msdn.microsoft.com/en-us/library/ch9714z3.aspx 필요할 수 있습니다. http://msdn.microsoft.com/en-us/library/6ztex2dc.aspx
기본적으로 공개 필드 만 반환되기 때문에. BindingFlags.NonPublic
과 함께 다른 과부하를 사용하십시오.
GetFields이 (MSDN에서) "공용 필드는 현재 유형에 대해 정의되지 않은"경우 비어 것이 유일한 이유.
더 일반적으로, 당신이하려고하는 것을 이미 수행하고있는 Object 클래스의 protected 메소드가 있음을 알고 있습니까 (얕은 복사)?
public object Clone()
{
return MemberWiseClone();
}
: 당신이처럼 사용할 수
MemberwiseClone를 불렀다