通过函数参数访问 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.AssociatedParam
是 EnumParams
- 但如果不是,你会怎么做?
我正在尝试访问某些仅在 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.AssociatedParam
是EnumParams
- 但如果不是,你会怎么做?