2015-01-27 1 views
0

Я пытаюсь получить доступ к определенной переменной, доступной только в дочернем классе. Но проблема в том, что я получаю родительский элемент этого класса по параметру. Даже при кастинге я не могу получить доступ к членам. Можно ли это сделать?Доступ к переменной дочернего элемента в родительском объекте передан через параметр функции

public class ENUMTranslator : ITranslate<RedisData> 
{ 
    public string Translate(RedisData message) 
    { 
     string bitMask = message.AssociatedParam.ParamDictionary["Bitmask"]; 

     var enumerations = (EnumParams)message.AssociatedParam.EnumDictionary 
    } 
} 

Дело в том, что данные не в самом сообщении, но внутри AssociatedParam Какой родительский класс EnumParams.

EnumDictionary - это то, что я пытаюсь получить, должно быть в EnumParams, но я просто не могу получить к нему доступ.

EDIT: Это класс EnumParam.

message.AssociatedParams 

является GAPParam

public class EnumParams : GAPParam 
{ 
    #region Class Members 

    /// <summary> 
    /// Dictionary for the enums linking name with hex value 
    /// </summary> 
    private Dictionary<string, string> _enumDictionary; 

    #endregion // Class Members 

    #region Properties 

    /// <summary> 
    /// Dictionary for the enums linking name with hex value 
    /// </summary> 
    public Dictionary<string, string> EnumDictionary 
    { 
     get { return _enumDictionary; } 
     set { _enumDictionary = value; } 
    } 

    #endregion // Properties 

    #region Constructor 

    /// <summary> 
    /// Initialise the dictionaries 
    /// </summary> 
    public EnumParams() 
    { 
     _enumDictionary = new Dictionary<string, string>(); 
    } 

    #endregion // Constructor 
} 

Я не могу видеть его с IntelliSense и он не будет компилировать либо.

+3

Какие из них недоступны? Это не понятно из вашего вопроса. –

+1

Что вы, к сожалению, не можете получить к нему доступ? Вызывается ли ошибка компиляции? Не признает ли Intellisense это? Кроме того, какова связь между RedisData и EnumParams? –

+0

сообщение.AssociatedParam.Что-то не компилируется ..? или не может наложить на EnumParams? –

ответ

0

Ну вы могли литая message.AssociatedParam Ань EnumParams:

var enumerations = ((EnumParams)message.AssociatedParam).EnumDictionary 

но если message.AssociatedParam не литьевой к EnumParams тогда она не будет выполнена во время выполнения. Как можно уменьшить риск:

  • должно быть EnumDictionary вместо этого на GAPParam? Даже если это виртуальный или абстрактный?
  • должен message.AssociatedParam быть EnumDictionary вместо GAPParam?
  • сделать проверку перед отливкой, чтобы убедиться, что message.AssociatedParam - это EnumParams - но тогда что вы будете делать, если это не так?
Смежные вопросы