ASP.NET MVC 전편의 확장 방법, 체인 프로그래밍
전언
다른 목적은 없고, 단지 몇 시에 ASP에 있는지 소개하는 것이다.NET MVC는 C# 언어의 특성을 사용하고 다른 자질구레한 지식도 있다. 한 범위를 강제로 나누면 모두 MVC와 관련이 있다고 할 수 밖에 없다. 어떤 것은 외곽의 지식이고 어떤 것은 틀 안에 포함된 것이다.MVC 학전편 글씨?익살스러운 성분도 있고 진실한 성분도 있기 때문에 일을 잘하려면 반드시 먼저 그릇을 이롭게 해야 한다.그릇이 뭐예요?기본은 MVC 프레임워크에 관련된 지식이 많다고 해서 제가 한 편 두 편으로 다 말할 수 있는 것도 아니지만 제가 할 수 있는 일은 아는 만큼 여러분과 공유하는 것입니다. 물론 시간이 지날수록 이 시리즈를 보완할 것입니다.
1 확장 방법
확장 방법은 C# 3.0 특성의 지식으로 Linq에서 가장 많이 사용되며 많은 검색 기능을 IEnumerable와 IEnumerable 유형에 추가했습니다. 여기서 너무 많이 말하지 않으면 Linq를 연결합니다.
운용하는 실제 장면: 하나의 쇼핑 리스트(카트) 대상이 있는데 추가, *** 리스트 안의 물품 기능을 포함한다.
상품 대상, 그것은 상품 명칭, 상품 가격의 두 가지 속성을 포함한다
코드 1-1
1 namespace BlogCase
2 public class Commodity
3 {
4 public string Name { get; set; }
5 public float Price { get; set; }
6 }
7
8 namespace BlogCase
9 ///
10 ///
11 ///
12 public class ShoppingList
13 {
14 private List _Commodities;
15
16 public List Commodities
17 {
18 get { return _Commodities; }
19 }
20
21 public ShoppingList()
22 {
23 _Commodities = new List();
24 }
25
26 public bool AddCommodity(Commodity commodity)
27 {
28 _Commodities.Add(commodity);
29 return true;
30 }
31
32 public bool RemoveCommodity(Commodity commodity)
33 {
34 if (_Commodities.Contains(commodity))
35 {
36 _Commodities.Remove(commodity);
37 return true;
38 }
39 else
40 {
41 return false;
42 }
43 }
44 }
그리고 불안, 황공, 기대, 흥분의 새로운 수요가 왔다. 명세서는 명세서 내부의 모든 물품 가격의 합계를 제공할 수 있고 대상 구조를 파괴하지 않을 수 있도록 요구한다.맞습니다.이것은 매우 합리적인 요구이다. 지금 욕을 해도 소용없다. 왜냐하면 수요는 항상 알 수 없기 때문이다.초조하고 어쩔 수 없는 가운데 서광이 찾아왔다. 그것이 바로 C# 3.0의 특성 확장 방법이다.
코드 보기 1-2
코드 1-2
1 using BlogCase;
2 using System.Linq;
3
4 namespace BlogCase.Extension
5 {
6 public static class ShoppingListExtension
7 {
8 public static float Total(this ShoppingList shoppintlist)
9 {
10 return shoppintlist.Commodities.Sum(commodity => commodity.Price);
11 }
12 }
13 }
여기서 말하고자 하는 것은 ShoppingListExtension 유형은 정적 클래스이다. 그 안에 정적 방법인 Total을 정의했다. 방법의 서명은 ShoppingList 유형의 매개 변수이다. 유일하게 다른 것은 ShoppingList 유형 앞에 this 키워드가 하나 더 있는데 이때 ShoppingList 유형의 확장 방법에 대해 정의가 되었다.다음 예시 코드 1-3의 사용을 봅시다.
코드 1-3
1 using BlogCase.Extension;
2
3 namespace BlogCase
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 ShoppingList shoppinglistTest = new ShoppingList();
10 shoppinglistTest.AddCommodity(new Commodity() { Name = "A", Price = 14.3f });
11 shoppinglistTest.AddCommodity(new Commodity() { Name = "B", Price = 15 });
12 shoppinglistTest.AddCommodity(new Commodity() { Name = "C", Price = 27.9f });
13 shoppinglistTest.AddCommodity(new Commodity() { Name = "D", Price = 34.3f });
14 Console.WriteLine(shoppinglistTest.Total().ToString());
15 Console.ReadLine();
16 }
17 }
18 }
여기서 주의해야 할 것은 확장 방법 클래스인 ShoppingListExtension이 있는 명칭 공간을 인용해야 한다는 것이다. VS 개발 환경에서 확장 방법의 아이콘도 일반적인 방법과 다르다.그림1
그림 1
코드 1-3을 실행하면 결과는 그림2와 같다.
그림 2
2 체인 프로그래밍 사상
위의 내용은 유형을 확장하고 확장 방법을 추가했다. 이렇게 하면 대상 간의 결합이 비교적 크다. 만약에 ShoppingList의 내부 구조를 수정했다면 ShoppingListExtension도 상대적으로 수정해야 한다. 여기서 왜 추상적인 프로그래밍을 해야 하는지를 언급해야 한다. 후속 편폭은 언급할 것이다.현재 우리가 해야 할 일은 ShoppingListExtension의 의존 유형을 더 높은 단계의 형식으로 바꾸고, 데이터를 필터하는 데 사용할 확장 방법을 추가하는 것이다.이로부터 모두 결합하면 하나의 체인식 프로그래밍 모델을 볼 수 있고 linq와 다른 지식을 배우는 데 좋은 밑받침이 된다.
수정된 ShoppingList 유형에 대한 코드 2-1 예제를 보겠습니다.
코드 2-1
1 namespace BlogCase
2 {
3 public class ShoppingList : IEnumerable, IEnumerator
4 {
5 private List _Commodities = new List();
6 public void Add(Commodity commodity)
7 {
8 _Commodities.Add(commodity);
9 }
10 public IEnumerator GetEnumerator()
11 {
12 return this;
13 }
14 IEnumerator IEnumerable.GetEnumerator()
15 {
16 return this;
17 }
18 private int _index = -1;
19 public Commodity Current
20 {
21 get
22 {
23 return _Commodities[_index];
24 }
25 }
26 public void Dispose()
27 {
28
29 }
30 object System.Collections.IEnumerator.Current
31 {
32 get
33 {
34 return Current;
35 }
36 }
37 public bool MoveNext()
38 {
39 if (_index
ShoppingList , IEnumerable IEnumerator , IEnumerable ? Linq , IEnumerable , , 。
ShoppingListExtension , , , 。
2-2
1 using BlogCase;
2 using System.Linq;
3 namespace BlogCase.Extension
4 {
5 public static class ShoppingListExtension
6 {
7 public static float Total(this IEnumerable shoppintlist)
8 {
9 return shoppintlist.Sum(commodity => commodity.Price);
10 }
11
12 public static IEnumerable Filter(this IEnumerable shoppinglist, Func commodityFilter)
13 {
14 var commodities = shoppinglist.Where(commodityFilter);
15 return commodities;
16 }
17 }
18 }
수정된 ShoppingListExtension 클래스에서는 Total 확장 방법의 대상 유형이 바뀌었고 Filter 확장 방법에서는 반환 유형을 IEnumerable 형식으로 정의하고 파라미터를 정의했다. 파라미터 형식은Func의 의뢰로 완전히 lambda 표현식으로 대체할 수 있으며 lambda에 대한 지식의 후속 편폭에 언급될 것이다.수정을 한 후에 테스트 코드를 봅시다.
코드 2-3 1 using BlogCase.Extension;
2 namespace BlogCase
3 {
4 class Program
5 {
6 static void Main(string[] args)
7 {
8 ShoppingList shoppinglistTest = new ShoppingList();
9 shoppinglistTest.Add(new Commodity() { Name = "A", Price = 50.3f });
10 shoppinglistTest.Add(new Commodity() { Name = "B", Price = 60 });
11 shoppinglistTest.Add(new Commodity() { Name = "C", Price = 70.9f });
12 shoppinglistTest.Add(new Commodity() { Name = "D", Price = 80.3f });
13
14 Console.WriteLine(shoppinglistTest.Filter(commodity=>commodity.Price>58).Total().ToString());
15 Console.ReadLine();
16 }
17 }
18 }
실행 결과는 그림3
그림 3
shoppinglistTest 변수에서 확장 방법Filter를 호출할 때, 검색 조건 (물품 추가 개수 58 이상) 을 입력했습니다. 이 확장 방법은 위에서 말한 IEnumerable 형식을 되돌려주고, 이어서 IEnumerable 형식의 확장 방법인 Total을 호출합니다.
여기에 간단한 체인 프로그래밍 모델이 나왔습니다. 관심 있는 친구는 이어서 linq를 깊이 이해할 수 있습니다. 물론 그 전에 제 후속 글을 보는 것이 중요합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.