我知道接口不能被实例化,但是可以创建实现接口的对象的实例。
但是在此示例中,我正在使用接口变量,并且从未将其实例化为类的对象。
public static IEnumerable<Person> GetPeople()
{
IEnumerable<Person> people = AMethod<IEnumerable<Person>>();
return people;
}
var people = MyClass.GetPeople();
// ... operations on the people variable
因此,我绝对不会引用实现IEnumerable的数组或列表或其他类型。当我调试此代码时,调试器显示people变量的类型为IEnumerable <Person>。但是,如果接口不是“真实的东西”而只是合同,那会怎样呢?就像在内存中是数组,列表还是其他东西一样?我正在学习有关接口的课程,但是我对此一无所知。
AMethod<IEnumerable<Person>>()
这正在调用看起来像这样的方法:
public T AMethod <T> {
// Do something to create an instance of T
}
IEnumerable<Person>
是你传递什么样的<T>
的的AMethod
签名。这是一种通用方法。
结果是创建了一些具体的东西(例如Person[]
,List<Person>
等等)来适合接口IEnumerable<Person>
。但这是由创建的AMethod
,而不是您发布的任何代码。
如果您对人们实际上是什么类型感到好奇,而不能只是看一下AMethod
,致电Type concreteType = people.GetType();
会告诉您。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句