.NET 제네릭 학습을 위한 최고의 리소스는 무엇입니까?[닫은]

StackOverflow https://stackoverflow.com/questions/85147

  •  01-07-2019
  •  | 
  •  

문제

나는 내 작업에서 .NET 제네릭을 사용한 적이 없지만 꽤 인기가 있다는 것을 알고 있습니다.학습을 위한 좋은 링크나 도서 제안이 있는 사람이 있나요?보너스로;저는 .NET 일반 컬렉션이 무엇인지, 무엇을 하는지 막연하게만 알고 있습니다. .NET의 일반 컬렉션보다 더 큰 이점을 얻을 수 있는 방법에 대한 실제적인 예가 있는 사람이 있습니까?

다른 팁

당연한 선택..

MSDN C# 제네릭

Jeffrey Richter가 작성한 C#을 통한 CLR은 제네릭에 대해 자세히 설명하며 모든 .NET 개발자가 소유하고 읽어야 하는 귀중한 리소스 중 하나입니다.

C++ 템플릿을 사용해 본 적이 있다면 .Net 제네릭도 거의 동일합니다.심지어 비슷한 <T> 구문을 사용합니다.

C++를 전혀 모르더라도 특히 컬렉션과 관련하여 필요한 것보다 더 어렵게 만들 수 있습니다.이는 다른 컬렉션과 비슷하지만 컬렉션을 생성할 때 <<> 내부에 유형 이름을 제공하므로 컴파일러는 컬렉션에 포함된 항목의 종류를 알 수 있습니다.

C# 3.0 in a Nutshell은 장황한 느낌 없이 개념을 이해할 수 있을 만큼 충분한 예제를 제공하는 환상적인 참고서입니다.

저는 WROX의 Professional .NET 2.0 Generics가 실제 사례를 많이 포함하고 있기 때문에 매우 유용하다는 것을 알았습니다.제네릭은 초보자에게는 혼란스러울 수 있지만 숙련된 개발자의 손에서는 매우 유용하고 강력하며 시간을 절약해 주는 도구가 될 수 있습니다.개인적으로 저는 컬렉션 정의 및 사용을 단순화하는 데 .NET Generics가 가장 유용하다고 생각합니다.또한 제네릭을 사용하면 일반적으로 boxing/unboxing 유형 변환과 관련된 성능 저하를 최소화할 수 있으므로 보다 효율적인 코드로 이어질 수 있습니다.

해당 주제에 대한 일부 Microsoft 교육을 따르는 것이 가장 좋습니다.책을 찾고 있다면 다음이 이상적입니다.

http://www.microsoft.com/MSPress/books/9469.aspx

내 투표는 대부분 피할 수 있다는 것입니다. :)

제네릭의 가장 큰 장점은 내부적으로 캐스팅을 수행하는 것이 의미가 없는 경우 캐스팅을 저장하는 것입니다.이 문제를 조사해 보면 제네릭의 후보는 실제로 이러한 이점을 위해 내부적으로 기본 저장소를 생성할 수 있는 컬렉션/세트라는 것을 알 수 있습니다.반면에 대부분의 다른 구성 요소는 성능을 거의 또는 전혀 얻지 못하며 인터페이스 상속 구현에 비해 유연성이 크게 저하됩니다.

캐스팅이 너무 짜증난다면 IronPython과 같은 동적 언어를 고려해 볼 시간입니다 :)

그리고 일반적으로 타당하다고 생각하는 시나리오를 실제로 발견하면 다른 질문으로 게시하세요. 여기 두뇌가 함께 살펴보고 사례별로 해결할 수 있습니다. :)

업데이트:네, 컴파일러 검사는 좋지만 Castle Project의 소스를 확인하면 캐스팅을 수행할 수 없기 때문에 일반 유형이 방해가 되는 많은 상황을 볼 수 있습니다. IBusinessObject와 같은 작업은 BusinessObject보다 훨씬 유연합니다. BusinessObject에서 상속받은 항목을 BusinessObject로 다시 캐스팅하고 상속된 함수에 액세스할 것으로 예상합니다.일반적으로 코드는 BusinessObjectBase -> BusinessObject -> 실제 클래스로 끝나는 것을 보았습니다.그렇기 때문에 제네릭을 사용하는 것이 항상 유익한 것은 아니라고 생각합니다. 저는 그러한 구현을 남용하고 결국 전혀 좋지 않은 제네릭 타이핑으로 수많은 재미있는 기능을 갖게 된 사람들 중 한 명이었습니다.

업데이트 #2:Boxing/Unboxing은 값을 저장하기 위해 추상 유형(객체와 같은)을 사용하고 이를 다시 저장하기 위해 강력한 유형의 값을 사용할 때(캐스팅 필요) 객체를 캐스팅해야 한다는 요구 사항을 의미할 뿐입니다. 내가 말한 수집 상황.그리고 이와 같은 코드는 여전히 권투를 수행합니다.

public T GetValue<T>() {
  return (T) ...;
}

그것은 내가 가장 자주 본 일반적인 학대입니다.사람들은 여기서 네이티브 유형을 다루고 있다고 생각하지만 실제로는 그렇지 않습니다.대신 그들은 단지 일반적인 구문으로 캐스팅을 만듭니다.실제로 의미가 있는 것은 다음과 같습니다.

public class MyList<T>
{
  private List<T> _list;
...
public T GetValue(int index)
{
  return _list[index];
}

그런 다음 다시 컬렉션 저장소로 돌아갑니다.그렇기 때문에 수집 저장 후에 일반 제품이 도움이 될 가능성이 많지 않다고 말한 것입니다.이 튜토리얼에서 참조:http://en.csharp-online.net/Understanding_Generics—Revisiting_Boxing_and_Unboxing

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top