通过函数参数访问 child 中 parent 的变量

Access child's variable in parent passed through function parameter

我正在尝试访问某些仅在 child class 中可用的特定变量。但问题是我通过参数收到了这个class的parent。即使有演员表,我似乎也无法访问成员。 能做到吗?

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

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

问题在于数据不在消息本身中,而是在 AssociatedParam 中,也就是 EnumParams 的 parent class。

EnumDictionary 是我要访问的内容,它应该在 EnumParams 中,但我无法访问它。

编辑:这是 EnumParam class。

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
}

我无法通过智能感知看到它,它也无法编译。

那么你 可以message.AssociatedParam 转换为 EnumParams:

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

但如果 message.AssociatedParam 不可转换为 EnumParams 那么它将在运行时失败。一些降低风险的方法:

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