Без доступа к типу (без «InternalsVisibleTo» и т. Д.) Вам пришлось бы использовать отражение. Но лучше задать вопрос: должен ли обращаться к этим данным? Он не является частью публичного типа контракта ... для меня это звучит так, как будто он предназначен для обработки как непрозрачный объект (для их целей, а не для ваших).
Вы описали его как публичное поле экземпляра; чтобы получить это через отражение:
object obj = ...
string value = (string)obj.GetType().GetField("test").GetValue(obj);
Если это действительно свойство (а не поле):
string value = (string)obj.GetType().GetProperty("test").GetValue(obj,null);
Если это не публично, вам нужно использовать перегрузку BindingFlags
GetField
/ GetProperty
.
Важное замечание : будьте осторожны с таким отражением; реализация может измениться в следующей версии (нарушить ваш код), или она может быть запутана (нарушить ваш код), или вам может не хватить «доверия» (нарушить ваш код). Вы видите образец?