C\#일반적인 인 스 턴 스 상세 설명
우선 팬 형 을 언제 사용 하 는 지 알 아야 한다.
서로 다른 데이터 형식 에 대해 비슷 한 논리 알고리즘 을 사용 하면 중복 을 피하 기 위해 범 형 을 사용 하 는 것 을 고려 할 수 있다.
1.유형 에 대한 일반적인 유형
서로 다른 유형의 배열 에 대해 배열 에 대한'거품 정렬'을 쓰 십시오.
1.사고방식
●유형 에 대한 범 형,범 형 은 유형 옆 에 있다.
●'거품 정렬'에서 요 소 를 비교 해 야 하기 때문에 범 형 은 IComparable 인터페이스 로 제약 해 야 한다.
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;
}
}
}
}
}
실행 결 과 는 다음 그림 과 같 습 니 다.2.일반적인 제약 조건
where T:IComparable 은 T 를 IComparable 인터페이스 로 제약 합 니 다.
where T : class
where T : struct
where T:IComparable,new()제약 범 형 은 구조 함수 가 있어 야 합 니 다.
3.거품 알고리즘
●for(int i=0;i <= length -2; i++)이것 은 경계 사고 입 니 다.예 를 들 어 길이 가 5 인 배열 이 있 습 니 다.만약 에 0 번 요소 가 최종 적 으로 4 번 위치 로 바 뀌 면 매번 에 한 자 리 를 바 꾸 려 면 4 번 을 거 쳐 야 4 번 자리 에 도착 할 수 있 습 니 다.즉,for(int i=0;i<=5-2,i++),i 는 0,1,2,4 순 으로 그 동안 4 번 을 겪 었 다.
●for(int j=length-1;j >= 1; j-)순환,즉 마지막 요소 부터 색인 이 1 인 요 소 를 옮 겨 다 니 며 매번 이전 위치 에 있 는 요소 와 비교 합 니 다.
4.비교
int 유형 을 비교 할 수 있 는 이 유 는 int 유형 도 IComparable 인 터 페 이 스 를 실 현 했 기 때문이다.
byte 유형 도 IComparable 인 터 페 이 스 를 실현 했다.
2.하나의 종 류 를 사용자 정의 하여 거품 알고리즘 도 실현 할 수 있 도록 합 니 다.
거품 알고리즘 은 요소 비교 와 관련 되 기 때문에 사용자 정의 클래스 는 IComparable 인 터 페 이 스 를 실현 해 야 합 니 다.
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);
}
}
실행 결 과 는 다음 그림 과 같 습 니 다.3.방법 에 대한 일반적인 유형
위의 예 를 계속 들 어 클래스 를 정의 하고 일반적인 방법 을 정의 합 니 다.
//
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;
}
}
}
}
}
주 프로그램 은 다음 과 같 습 니 다:
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();
}
}
실행 결 과 는 다음 그림 과 같 습 니 다.또한 일반적인 방법 을 사용 할 때 다음 과 같은 것 을 제외 하고:
MethodSortHelper sorter = new MethodSortHelper();
sorter.BubbleSort<Book>(bookArray);
이렇게 쓸 수도 있다.
MethodSortHelper sorter = new MethodSortHelper();
sorter.BubbleSort(bookArray);
이 를 통 해 알 수 있 듯 이 범 형 방법 은 배열 의 인 스 턴 스 암시 적 인 방식 에 따라 범 형 이 조건 을 만족 시 키 는 지 여 부 를 추정 할 수 있다.
4.범 형의 다른 장점
1.은밀 한 포장 과 분해 방지
다음은 암시 적 인 포장 과 개봉 을 포함 합 니 다.
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);
}
2.컴 파일 기간 에 오 류 를 발견 할 수 있 습 니 다.일반적인 형식 을 사용 하지 않 고 컴 파일 기간 에 잘못 보고 하지 않 는 예:
ArrayList list = new ArrayList();
int i = 100;
list.Add(i);
string value = (string)list[0];
일반적인 형식 을 사용 하여 컴 파일 기간 에 오 류 를 발견 합 니 다.
List<int> list = new List<int>();
int i = 100;
list.Add(i);
string value = (string)list[0];
5.일반적인 기 교 를 사용한다.1.현재 파일 에서 일반 형식 에 별명 붙 이기
using IntList = List<int>;
IntList list = new IntList();
list.Add(1);
2.서로 다른 파일 에서 범 형 별명 을 사용 하여 범 형 에서 태 어 난 클래스 를 정의 합 니 다.
public class IntList : List<int>{}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.