C 언어
일반 프로그램에서 실제로 사용될 때까지 클래스나 메서드에서 프로그래밍 요소의 데이터 유형 사양을 정의할 수 있습니다. 즉, 제네릭을 사용하면 모든 데이터 유형에서 작동할 수 있는 클래스 또는 메서드를 작성할 수 있습니다.
데이터 유형에 대한 대체 매개변수를 사용하여 클래스 또는 메소드에 대한 사양을 작성합니다. 컴파일러는 클래스에 대한 생성자나 메서드에 대한 함수 호출을 만나면 특정 데이터 형식을 처리하는 코드를 생성합니다. 간단한 예는 개념을 이해하는 데 도움이 됩니다 -
라이브 데모using System; using System.Collections.Generic; namespace GenericApplication { public class MyGenericArray<T> { private T[] array; public MyGenericArray(int size) { array = new T[size + 1]; } public T getItem(int index) { return array[index]; } public void setItem(int index, T value) { array[index] = value; } } class Tester { static void Main(string[] args) { //declaring an int array MyGenericArray<int> intArray = new MyGenericArray<int>(5); //setting values for (int c = 0; c < 5; c++) { intArray.setItem(c, c*5); } //retrieving the values for (int c = 0; c < 5; c++) { Console.Write(intArray.getItem(c) + " "); } Console.WriteLine(); //declaring a character array MyGenericArray<char> charArray = new MyGenericArray<char>(5); //setting values for (int c = 0; c < 5; c++) { charArray.setItem(c, (char)(c+97)); } //retrieving the values for (int c = 0; c< 5; c++) { Console.Write(charArray.getItem(c) + " "); } Console.WriteLine(); Console.ReadKey(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
0 5 10 15 20 a b c d e
Generics는 다음과 같은 방식으로 프로그램을 풍부하게 하는 기술입니다 -
코드 재사용, 형식 안전성 및 성능을 극대화하는 데 도움이 됩니다.
일반 컬렉션 클래스를 만들 수 있습니다. .NET Framework 클래스 라이브러리에는 System.Collections.Generic에 몇 가지 새로운 일반 컬렉션 클래스가 포함되어 있습니다. 네임스페이스. System.Collections의 컬렉션 클래스 대신 이러한 일반 컬렉션 클래스를 사용할 수 있습니다. 네임스페이스.
고유한 일반 인터페이스, 클래스, 메서드, 이벤트 및 대리자를 만들 수 있습니다.
특정 데이터 유형의 메소드에 액세스할 수 있도록 제한된 일반 클래스를 생성할 수 있습니다.
리플렉션을 통해 런타임에 일반 데이터 형식에 사용된 형식에 대한 정보를 얻을 수 있습니다.
이전 예제에서는 일반 클래스를 사용했습니다. 유형 매개변수를 사용하여 제네릭 메소드를 선언할 수 있습니다. 다음 프로그램은 개념을 보여줍니다 -
라이브 데모using System; using System.Collections.Generic; namespace GenericMethodAppl { class Program { static void Swap<T>(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } static void Main(string[] args) { int a, b; char c, d; a = 10; b = 20; c = 'I'; d = 'V'; //display values before swap: Console.WriteLine("Int values before calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values before calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); //call swap Swap<int>(ref a, ref b); Swap<char>(ref c, ref d); //display values after swap: Console.WriteLine("Int values after calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values after calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); Console.ReadKey(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Int values before calling swap: a = 10, b = 20 Char values before calling swap: c = I, d = V Int values after calling swap: a = 20, b = 10 Char values after calling swap: c = V, d = I
형식 매개 변수를 사용하여 제네릭 대리자를 정의할 수 있습니다. 예를 들어 -
delegate T NumberChanger<T>(T n);
다음 예는 이 대리자의 사용을 보여줍니다 -
라이브 데모using System; using System.Collections.Generic; delegate T NumberChanger<T>(T n); namespace GenericDelegateAppl { class TestDelegate { static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } public static int getNum() { return num; } static void Main(string[] args) { //create delegate instances NumberChanger<int> nc1 = new NumberChanger<int>(AddNum); NumberChanger<int> nc2 = new NumberChanger<int>(MultNum); //calling the methods using the delegate objects nc1(25); Console.WriteLine("Value of Num: {0}", getNum()); nc2(5); Console.WriteLine("Value of Num: {0}", getNum()); Console.ReadKey(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Value of Num: 35 Value of Num: 175
C 언어
C# foreach 루프 이 기사에서는 foreach 루프(for 루프의 대안)와 이를 배열 및 컬렉션과 함께 사용하는 방법에 대해 알아봅니다. C#은 배열/컬렉션 항목을 반복하기 위해 배열 및 컬렉션으로 작업할 때 for 루프인 for 루프에 대한 사용하기 쉽고 읽기 쉬운 대안을 제공합니다. foreach 루프는 각 항목을 반복하므로 foreach 루프라고 합니다. foreach 루프를 진행하기 전에 다음을 방문하십시오. C# for 루프 C# 배열 C# 컬렉션 foreach 루프의 구문 foreach (eleme
C# 방법 이 자습서에서는 예제를 통해 C# 방법에 대해 알아봅니다. 메소드는 특정 작업을 수행하는 코드 블록입니다. 원을 만들고 색칠하는 프로그램을 만들어야 한다고 가정합니다. 이 문제를 해결하기 위해 두 가지 방법을 만들 수 있습니다. 원을 그리는 방법 원을 색칠하는 방법 복잡한 문제를 작은 덩어리로 나누면 프로그램을 이해하기 쉽고 재사용할 수 있습니다. C#에서 메소드 선언 다음은 C#에서 메서드를 선언하는 구문입니다. returnType methodName() { // method body } 여기, 반