C#지식 범위
C#지식 범위
범용은 2.0 버전 C# 언어 및 공용 언어 라이브러리(CLR)의 새로운 기능입니다.범형은 유형 매개 변수의 개념을 도입한다.NET Framework, 유형 매개 변수는 다음과 같은 클래스와 방법을 설계할 수 있습니다. 클래스와 방법은 클라이언트 코드가 클래스나 방법을 설명하고 실례화할 때로 지정됩니다.예를 들어 일반 유형 매개 변수 T를 사용하면 실행 시 강제 변환이나 포장 작업의 비용이나 위험을 초래하지 않고 다른 클라이언트 코드가 사용할 수 있는 단일 클래스를 작성할 수 있습니다. 강제 유형 변환의 수요를 피하고 유형 안전성을 높일 수 있습니다.
일반 개요 및 장점
범형류와 범형방법은 중용성, 유형 안전과 효율이 높은 특징을 동시에 갖추고 있다.그것은 보통 집합과 집합에서 운행하는 방법에 쓰인다.NET 2.0 버전 라이브러리는 System이라는 새로운 이름을 제공합니다.Collections.Generic의 이름 공간입니다. 이 공간에는 여러 개의 새로운 범주 기반 집합 클래스가 포함되어 있습니다.
사용자 정의 일반 형식과 방법을 만들 수도 있습니다.
일반 클래스 및 메서드는 "유형 매개 변수"를 수신하여 작업할 객체의 유형을 지정합니다.public class Test<T> {}
인스턴스화할 때 유형을 지정합니다.Test<int> tree = new Test<int>();
일반 유형을 사용하면 다음과 같은 장점이 있습니다.
public class Test<T> {}
Test<int> tree = new Test<int>();
범용의 유형 매개변수 T
유형 매개 변수 T는 일반 클래스를 정의할 때 사용되는 자리 표시자입니다. 하나의 유형이 아니라 가능한 유형만 나타냅니다.정의할 때 T가 나타나는 위치는 어떤 종류로든 대체할 수 있습니다.
언제 어디서 범형을 사용할지 결정하다
다음 사항을 고려해야 합니다.
클래스에 대한 범주
서로 다른 유형의 수조를 대상으로 수조에 대한 '거품 정렬' 을 쓰십시오.
사고의 방향
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
SortHelper<int> isorter = new SortHelper<int>();
int[] iarray = { 8, 7, 1, 2, 12 };
isorter.BubbleSort(iarray);
foreach (int item in iarray)
{
Console.Write(item + ",");
}
Console.ReadKey();
}
}
public class SortHelper<T> where T : IComparable
{
public void BubbleSort(T[] array)
{
int length = array.Length;
for (int i = 0; i <= length - 2; i++)
{
for (int j = length - 1; j >= 1; j--)
{
if (array[j].CompareTo(array[j - 1]) < 0)
{
T temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
}
}
}
출력:일반 구속조건 정보
거품 알고리즘 정보
비교 정보
int 형식을 비교할 수 있는 이유는 int 형식이 IComparable 인터페이스를 실현했기 때문이다.byte 타입도 마찬가지다.
하나의 클래스를 사용자 정의하여 거품 알고리즘을 실현할 수 있도록 하다
거품 알고리즘은 원소 비교와 관련이 있기 때문에 사용자 정의 클래스는 반드시 IComparable 인터페이스를 실현해야 한다.
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Book[] bookArray = new Book[2];
Book book1 = new Book(100, " ");
Book book2 = new Book(80, " ");
bookArray[0] = book1;
bookArray[1] = book2;
Console.WriteLine(" :");
foreach (Book b in bookArray)
{
Console.WriteLine(" :{0}, :{1}", b.Title, b.Price);
}
SortHelper<Book> sorter = new SortHelper<Book>();
sorter.BubbleSort(bookArray);
Console.WriteLine(" :");
foreach (Book b in bookArray)
{
Console.WriteLine(" :{0}, :{1}", b.Title, b.Price);
}
Console.ReadKey();
}
}
public class SortHelper<T> where T : IComparable
{
public void BubbleSort(T[] array)
{
int length = array.Length;
for (int i = 0; i <= length - 2; i++)
{
for (int j = length - 1; j >= 1; j--)
{
if (array[j].CompareTo(array[j - 1]) < 0)
{
T temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
}
}
// IComparable
public class Book : IComparable
{
private int price;
private string title;
public Book(){ }
public Book(int price, string title)
{
this.price = price;
this.title = title;
}
public int Price
{
get
{
return this.price;
}
}
public string Title
{
get
{
return this.title;
}
}
public int CompareTo(object obj)
{
Book book = (Book)obj;
return this.Price.CompareTo(book.Price);
}
}
}
출력:방법에 대한 범용
계속해서 위의 예를 들어 하나의 종류를 사용자 정의하고 일반적인 방법을 정의합니다.
namespace ConsoleApplication1
{
//
public class MethodSortHelper
{
public void BubbleSort<T>(T[] array) where T : IComparable
{
int length = array.Length;
for (int i = 0; i <= length - 2; i++)
{
for (int j = length - 1; j >= 1; j--)
{
if (array[j].CompareTo(array[j - 1]) < 0)
{
T temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
}
}
}
마스터 프로그램은 다음과 같습니다.namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Book[] bookArray = new Book[2];
Book book1 = new Book(100, " ");
Book book2 = new Book(80, " ");
bookArray[0] = book1;
bookArray[1] = book2;
Console.WriteLine(" :");
foreach (Book b in bookArray)
{
Console.WriteLine(" :{0}, :{1}", b.Title, b.Price);
}
MethodSortHelper sorter = new MethodSortHelper();
sorter.BubbleSort<Book>(bookArray);
Console.WriteLine(" :");
foreach (Book b in bookArray)
{
Console.WriteLine(" :{0}, :{1}", b.Title, b.Price);
}
Console.ReadKey();
}
}
// IComparable
public class Book : IComparable
{
private int price;
private string title;
public Book() { }
public Book(int price, string title)
{
this.price = price;
this.title = title;
}
public int Price
{
get
{
return this.price;
}
}
public string Title
{
get
{
return this.title;
}
}
public int CompareTo(object obj)
{
Book book = (Book)obj;
return this.Price.CompareTo(book.Price);
}
}
}
출력:범용 방법을 사용할 때 다음과 같은 경우를 제외하고는
MethodSortHelper sorter = new MethodSortHelper();
sorter.BubbleSort<Book>(bookArray);
:MethodSortHelper sorter = new MethodSortHelper();
sorter.BubbleSort(bookArray);
에서 알 수 있듯이 범주형 방법은 데이터 실례에 따라 범주형이 조건에 만족하는지 여부를 은밀하게 추정할 수 있다.일반형의 기타 장점
암시적 포장 및 포장 해제 방지
다음은 암시적 포장 및 포장해제입니다.
ArrayList list = new ArrayList();
for(int i = 0; i < 3; i++)
{
list.Add(i); //Add object,
}
for(int i = 0; i < 3; i++)
{
int value = (int)list[i]; // ,
Console.WriteLine(value);
}
스텔스 방식 포장 및 포장 풀기 방지를 위한 일반 사용:List<int> list = new List<int>();
for(int i = 0; i < 3; i++)
{
list.Add(i);
}
for(int i = 0; i < 3; i++)
{
int value = list[i];
Console.WriteLine(value);
}
컴파일하는 동안 제때에 오류를 발견할 수 있다
범용을 사용하지 않고 컴파일하는 동안 오류가 발생하지 않는 예:
List<int> list = new List<int>();
for(int i = 0; i < 3; i++)
{
list.Add(i);
}
for(int i = 0; i < 3; i++)
{
int value = list[i];
Console.WriteLine(value);
}
범용을 사용하여 컴파일하는 동안 오류를 적시에 발견:List<int> list = new List<int>();
int i = 100;
list.Add(i);
string value = (string)list[0];
일반적인 기교를 사용하다
현재 파일에서 범주에 별칭을 지정합니다.
using IntList = List<int>;
IntList list = new IntList();
list.Add(1);
다른 파일에서 범용 별명을 사용하여 범용에서 클래스를 정의합니다
public class IntList : List<int>{}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.