Как получить поля текущего класса? - PullRequest
1 голос
/ 23 августа 2011

Я пытаюсь получить поля текущего класса. Я заставляю класс реализовать интерфейс ICloneable.

Внутри clone() следующая строка не находит никаких полей. Почему, хотя?

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

Большое спасибо,

Ответы [ 5 ]

2 голосов
/ 23 августа 2011

Это найдет только открытые поля. Посмотрите на BindingFlags.

Чтобы предложить лучший способ, просто позвоните MemberwiseClone, он скопирует все значения полей в текущем классе / экземпляре.

1 голос
/ 23 августа 2011

Поскольку по умолчанию возвращаются только открытые поля.Используйте другую перегрузку с BindingFlags.NonPublic.

0 голосов
/ 23 августа 2011

Что ж, единственная причина, по которой GetFields будет пустым, заключается в том, что «для текущего Типа не определены открытые поля» (из MSDN ).

В общем, знаете ли вы, чтоуже существует защищенный метод в классе Object, который уже делает то, что вы пытаетесь сделать (поверхностная копия)?Он называется MemberwiseClone

Вы можете использовать его следующим образом:

public object Clone()
{
    return MemberWiseClone();
}
0 голосов
/ 23 августа 2011

Используйте BindingFlags как:

var flags = BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Public;
foreach (FieldInfo fi in this.GetType().GetFields(flags))
{
   //...
}
0 голосов
/ 23 августа 2011

GetFields возвращает все открытые поля текущего Типа.http://msdn.microsoft.com/en-us/library/ch9714z3.aspx Вам может понадобиться http://msdn.microsoft.com/en-us/library/6ztex2dc.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...