【发布时间】:2014-06-23 11:23:43
【问题描述】:
仔细检查我对引用/值语义的理解:
假设我做了一个List<T> values = new List<T>();
如果 T 是 reference 类型,则
values包含对 T 集合的引用。但是,此集合的每个元素都是对数据的引用。如果 T 是 value 类型,则
values包含对 T 集合的引用。但是,此集合的每个元素都包含实际数据。
我的好奇心产生是因为我试图设计一种需要IEnumerable<T> 的方法。因此,如果我给它一个List<int> 或List<SomeObject>,它的工作方式完全相同,T 的类型无关紧要,每个人都很高兴,因为它是对集合的 引用 正在提供,是吗?
public sealed class Effect<T>
{
public void Apply(GameTime time, IEnumerable<T> values)
{
...
}
}
还有!这和拳击无关吧?由于List<T> 具有引用语义,因此只有IEnumerable<T> 的结构实现会涉及装箱(但这似乎是一场等待发生的灾难)
【问题讨论】:
-
在
Effect类中,方法或类必须是通用的,即class Effect<T>或void Apply<T>(...)。 -
只要不将
ints 加到List<object>中,就应该没有装箱。
标签: c# .net generics collections parameter-passing