1

我有以下情况:

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;

请求请告知如何使用泛型解决此问题。对外,我只能暴露泛型接口。

4

3 回答 3

1

如果我们假设参数可以是不同的类型,那么简单地说:不。

哦,你可以引入泛型......但这只是改变了事情

int val = (int)(paramList["abc"].Value);

到:

int val = ((IParam<int>)paramList["abc"]).Value;

并没有太大帮助。唯一的其他选择是隐式转换运算符,其中 a: 不适用于interfaces 和 b: 不是很清楚/明显。

坦率地说,我只是使用演员表。这不是问题。一个盒子/拆箱并不是非常昂贵,而且代码的目的很明确。

于 2012-05-14T07:29:14.787 回答
0

您可以创建一个IParam<T>具有T Value {get; set;}方法的接口。这能解决你的问题吗?您将无法投射到 IParam,而是传递正确的 IParam/

于 2012-05-14T07:28:16.177 回答
0

如果在内部您必须将所有类型的参数放在一个列表中,那么,您只能通过它们的公共基类型来访问它们。

您可以在内部将参数保存在单独的列表中,每个列表都具有某种类型,但这在您的场景中可能是一种矫枉过正的做法。

于 2012-05-14T07:37:53.197 回答