初始化泛型抽象类并将其作用域化
本文关键字:作用域 泛型 抽象类 初始化 | 更新日期: 2023-09-27 18:06:02
我有以下代码
var dataCollection;
if (ViewBag.WageType.ToLower() == "perm")
{
dataCollection = ViewBag.PermWageIndex;
}
else if(ViewBag.WageType.ToLower() == "trial")
{
dataCollection = ViewBag.TrialWageIndex;
}
返回类型为AbstractClass<Concrete1>
或AbstractClass<Concrete2>
。我必须初始化var at声明。但是,这意味着我失去了我想要的范围。我如何修改这段代码,以允许动态dataCollections不依赖于ViewBag?
您可以让AbstractClass<>
实现IAbstractClass
接口,然后使其成为通用类型。
这是否有效取决于返回类型需要访问哪些成员。显然,它不能引用任何泛型类型的成员,但这也没有多大意义,因为我假设消费者不应该知道泛型形参是什么。
解决这个问题的唯一方法是提供一个由Concrete1
和Concrete2
继承/实现的基类或接口,这样你就可以将dataCollection
声明为AbstractClass<ISomething>
。
Var不是动态类型,它在编译时解析。因此,您不能声明没有赋值的变量(var x;
),因为编译器无法推断类型。
你可以回到object
或dynamic
,但如果你这样做,你会失去任何类型安全