Я застрял с книгой Адама Фримена "Asp net", я много читал об IEnumerable и интерфейсе IEnumerator, но некоторые результаты все еще трудно понять. У меня есть эти два класса.
public class ShoppingCart : IEnumerable<Product>
{
public IEnumerable<Product> Products { get; set; }
public IEnumerator<Product> GetEnumerator()
{
return Products.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
и расширение первого,
public static class MyExtensionMethods
{
public static decimal TotalPrices (this IEnumerable<Product> products)
{
decimal total = 0;
foreach (Product prod in products)
{
total += prod?.Price ?? 0;
}
return total;
}
}
Product - это простой класс с некоторыми полями, такими как Name, Price et c. У меня много сомнений. Прежде всего, я не понимаю, как c# знает, что MyExtensionMethods является расширением ShoppingCart, затем я не понимаю, как TotalPrices может узнать, что продукт происходит из продуктов в классе ShoppingCart. Может ли кто-нибудь кратко объяснить мне логику c за этими несколькими строчками?
Спасибо всем, извините за тупой вопрос.