通过函数参数访问父级中的子变量

时间:2015-01-27 13:26:35

标签: c# inheritance casting

我正在尝试访问一些仅在子类中可用的特定变量。但问题是我通过参数接收了这个类的父级。即使有铸造,我似乎也无法访问成员。 可以吗?

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,但我无法访问它。

编辑:这是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看不到它,也不会编译。

1 个答案:

答案 0 :(得分:0)

可以message.AssociatedParam投射到EnumParams

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

但如果message.AssociatedParam无法转换为EnumParams,那么它将在运行时失败。一些减轻风险的方法:

  • 应该EnumDictionary代替GAPParam吗?即使它是虚拟的还是抽象的?
  • message.AssociatedParam应该是EnumDictionary而不是GAPParam
  • 在投票前进行检查以确保message.AssociatedParamEnumParams - 但如果不是,你会怎么做?