Чем отличается (private vs public ) в этом коде (new lis<cartline> )
ПРИВЕТ
Я использую Asp.net сердечник в MVC 2 в формате PDF для изучения основных asp.net 2
в этой книге используется сессия для хранения списка товаров в карточке. Теперь у меня есть два кода со следующим :
первый код :
private List lineCollection = new List();
второй :
Public List lineCollection = new List();
когда я использовал Firs Code (private), все вещи работали правильно ... Но я не знаю, что произошло, когда я использую второй код (публичный) список, который не работает правильно .. когда я нажимаю кнопку "добавить товар в корзину", то один товар добавляется в список правильных . но когда я хочу увидеть список Картлайн в индексе CartController, я вижу два продукта в списке, но я добавляю только один продукт, а не два продукта, или когда я хочу удалить этот продукт из списка, он не удаляется из списка ...
полная тележка класса :
public class Cart { // public List lineCollection = new List(); private List lineCollection = new List(); public virtual void AddItem(Product product, int quantity) { CartLine line = lineCollection .Where(p => p.Product.ProductID == product.ProductID) .FirstOrDefault(); if (line == null) { lineCollection.Add(new CartLine { Product = product, Quantity = quantity }); } else { line.Quantity += quantity; } } //Remove All Products in Cart public virtual void RemoveLine(Product product) => lineCollection.RemoveAll(l => l.Product.ProductID == product.ProductID); //Compute Total in Cart public virtual decimal ComputeTotalValue() => lineCollection.Sum(e => e.Product.Price * e.Quantity); public virtual void Clear() => lineCollection.Clear(); public virtual IEnumerable Lines => lineCollection; }
и полная тележка класса контроллера:
public class CartController : Controller { private IProductRepository repository; private Cart Cart; public CartController(IProductRepository repo,Cart cart) { repository = repo; Cart = cart; } public ViewResult Index(string returnUrl) { return View(new CartIndexViewModel { //Cart = GetCart(), Cart = Cart, ReturnUrl = returnUrl }); } public RedirectToActionResult AddToCart(int productId,string returnUrl) { Product product = repository.Products.FirstOrDefault(p=>p.ProductID==productId); if (product!=null) { //Cart cart = GetCart(); //cart.AddItem(product, 1); // SaveCart(cart); Cart.AddItem(product, 1); } return RedirectToAction("Index", new { returnUrl }); } public RedirectToActionResult RemoveFromCart(int productId,string returnUrl) { Product product = repository.Products .FirstOrDefault(p => p.ProductID == productId); if (product != null) { //Cart cart = GetCart(); //cart.RemoveLine(product); //SaveCart(cart); Cart.RemoveLine(product); } return RedirectToAction("Index", new { returnUrl }); } }
и расширение учебного занятия:
public static class SessionExtensions { public static void SetJson(this ISession session,string key,object value) { session.SetString(key, JsonConvert.SerializeObject(value)); } public static T GetJson(this ISession session,string key) { var sessiondata = session.GetString(key); return sessiondata == null ? default(T) : JsonConvert.DeserializeObject(sessiondata); } }
...................... ??? Почему??? я не знаю, что происходит между частным и публичным в этом фрагменте кода
Что я уже пробовал:
я только что сменил Public на private, и весь код работает правильно, я не знаю почему?