我有以下情况:
public interface IParam
{
Object Value {get;set;}
}
public abstract class BaseClass: IParam
{
public virtual object Value {get;set;}
}
public class IntSubClass:BaseClass
{
public override object Value {get;set;}
}
对外界来说,这个界面是暴露的。所有属性都可以通过IParam访问。这种方法的缺点是很多铸造问题。
IParam dummy = ParameterList[abc];
int index = (int)dummy.Value;
请求请告知如何使用泛型来解决此问题。在外面,我只能暴露通用接口。
答案 0 :(得分:1)
如果我们假设参数可以是不同类型,那么简单地说:不。
哦,你可以介绍泛型......但这只是改变了
的东西int val = (int)(paramList["abc"].Value);
为:
int val = ((IParam<int>)paramList["abc"]).Value;
并没有多大帮助。唯一的另一个选择是隐式转换运算符,其中a:不适用于interface
s,而b:不是非常清晰/明显。
答案 1 :(得分:0)
您可以创建具有IParam<T>
方法的T Value {get; set;}
界面。这会解决你的问题吗?你将无法转换为IParam,而是在/
答案 2 :(得分:0)
如果在内部你必须在一个列表中保存所有类型的参数,那么,你只能通过它们的公共基本类型访问它们。
你可以在内部将参数保存在单独的列表中,每个列表都属于某种类型,但在你的场景中这可能是一种过度杀伤。