C# 泛型打开和关闭构造类型
最近我注意到泛型构造类型可以是打开的和关闭的。但我不明白他们到底是什么意思。你能举个简单的例子吗?来自: 如果泛型类型或方法的所有类型参数(包括所有封闭类型的所有类型参数)都已替换为可实例化类型,则泛型类型或方法将关闭。只有关闭泛型类型的实例时,才能创建该实例 因此,这就像C# 泛型打开和关闭构造类型,c#,generics,C#,Generics,最近我注意到泛型构造类型可以是打开的和关闭的。但我不明白他们到底是什么意思。你能举个简单的例子吗?来自: 如果泛型类型或方法的所有类型参数(包括所有封闭类型的所有类型参数)都已替换为可实例化类型,则泛型类型或方法将关闭。只有关闭泛型类型的实例时,才能创建该实例 因此,这就像列表已关闭一样: var list = Activator.CreateInstance(typeof(List<int>)); var list = Activator.CreateInstance(typeo
列表
已关闭一样:
var list = Activator.CreateInstance(typeof(List<int>));
var list = Activator.CreateInstance(typeof(List<>));
↑
var list=Activator.CreateInstance(typeof(list));
但这会在运行时引发异常,因为列表
是打开的:
var list = Activator.CreateInstance(typeof(List<int>));
var list = Activator.CreateInstance(typeof(List<>));
↑
var list=Activator.CreateInstance(typeof(list));
↑
实际上,术语并不重要——我记不起上一次担心它是什么时候了,除非是在试图写它的时候
- 未绑定类型没有指定类型参数
- 构造的类型至少指定了一个类型参数
- 类型参数是开放类型
- 元素类型为打开的数组类型是打开类型
- 开放构造的类型至少有一个类型参数是开放类型
- 闭合类型是指任何未打开的类型
public class NameDictionary<T> : Dictionary<string, T>
公共类名称字典:字典
typeof(NameDictionary)
的基类是:
- 构造,因为它指定类型参数
- 打开,因为第二个类型参数(
)是打开类型T
我通常赞成知道正确的术语——特别是对于“通过引用传递”之类的术语——但在这种情况下,它真的,真的不经常出现。我想极力劝阻您不要担心它:)我在依赖项注入映射中主要使用了开放泛型(基本上是非实例化泛型)。比如说
Bind<IRepository<>>()
.To<BasicRepository<>>()
Bind()
.至()
然后,当我的对象构造函数包含:
public SomethingController(IRepository<Something>) { ... }
publicsomethingcontroller(IRepository){…}
我的依赖注入机制将自动实例化一个基本假设
Autofac
也支持开放泛型类型:就像它一样