의 Generics 사용 예.네트(C#/VB).NET)
C#/VB에서 제네릭을 사용하는 예는 무엇입니까?NET과 제네릭을 사용하려는 이유는 무엇입니까?
일반 비트를 나타내기 위해 태그가 추가된 유형 또는 메서드를 선언합니다.
class Foo<T> {
public Foo(T value) {
Value = value;
}
public T Value {get;private set;}
}
은 제네릭 타입 " 위제네릭형정다니의합식을는다▁a니"를 정의합니다.Foo
의"T
T
호출자가 제공합니다.일반 형식 인수는 T로 시작합니다.만약 하나만 있다면,T
을 지정하십시오. 그렇지 않으면 모두 유용하게 이름을 지정합니다.TSource
,TValue
,TListType
C++ 템플릿과 달리 .NET 제네릭은 컴파일러 트릭이 아닌 런타임에 의해 제공됩니다.예:
Foo<int> foo = new Foo<int>(27);
든모.T
가 s 로 대 되었습니다체가다▁s로 되었습니다.int
다음과 같은 조건으로 할 수 .필요한 경우 다음과 같은 제약 조건으로 일반 인수를 제한할 수 있습니다.
class Foo<T> where T : struct {}
지금이다Foo<string>
합니다. - 다니거부합을일컴파.string
구조체(값 형식)가 아닙니다.유효한 제약 조건은 다음과 같습니다.
T : class // reference-type (class/interface/delegate)
T : struct // value-type except Nullable<T>
T : new() // has a public parameterless constructor
T : SomeClass // is SomeClass or inherited from SomeClass
T : ISomeInterface // implements ISomeInterface
제약 조건에는 다음과 같은 다른 일반 형식 인수도 포함될 수 있습니다.
T : IComparable<T> // or another type argument
필요한 만큼 일반 인수를 지정할 수 있습니다.
public struct KeyValuePair<TKey,TValue> {...}
기타 참고 사항:
- 정적 멤버 등은 일반 유형 조합별로 정의됩니다. 따라서 정적 필드는
Foo<int>
그것과는 별개입니다.Foo<float>
. - 메소드도 일반적일 수 있습니다. 클래스가 사용하는 것과 동일한 이름을 사용하지 않도록 하십시오. 명확하게 구분할 수 없습니다.
- 중첩된 유형은 부모로부터 일반 유형을 상속받습니다.
예:
class Foo<T> {
class Bar<TInner> {} // is effectively Bar<T,TInner>, for the outer T
}
예 1: 트리플 클래스를 만들고자 하는 경우
Class Triple<T1, T2, T3>
{
T1 _first;
T2 _second;
T3 _Third;
}
예 2: 지정된 데이터 유형에 대한 열거값을 구문 분석하는 도우미 클래스
static public class EnumHelper<T>
{
static public T Parse(string value)
{
return (T)Enum.Parse(typeof(T), value);
}
}
제네릭의 일반적이고 매우 유용한 한 가지 사용법은 강력한 유형의 수집 클래스입니다.기존에는 모든 컬렉션 클래스가 개체를 전달하고 쿼리 시 개체를 반환해야 했습니다.모든 형식 변환을 직접 처리해야 했습니다.제네릭은 그럴 필요가 없습니다.List(Of Integer)를 가질 수 있으며, List(Of Integer)에서 값을 요청하면 정수를 얻을 수 있습니다.정수로 변환해야 하는 개체는 얻을 수 없습니다.
제네릭의 가장 일반적인 이유와 사용 사례는 앞에서 언급한 MSDN 설명서에 설명되어 있습니다.제네릭의 이점 중 하나는 개발 프로세스에서 도구 지원을 향상시킬 수 있다는 것입니다.Visual Studio 또는 ReSharp에 통합된 리팩토링 도구는 코딩 중 지원을 제공하기 위해 정적 유형 분석에 의존합니다.일반적으로 일반적으로 개체 모델에 더 많은 유형 정보를 추가하기 때문에 이러한 도구를 분석하고 코딩하는 데 도움이 되는 더 많은 정보가 있습니다.
개념적 수준에서 일반론은 애플리케이션 도메인과 독립적으로 "교차" 문제를 해결하는 데 도움이 됩니다.금융 애플리케이션을 개발하든 서점을 개발하든 관계없이 조만간 계정, 책 또는 무엇이든 간에 컬렉션을 유지 관리해야 합니다.이러한 컬렉션의 구현은 일반적으로 이러한 컬렉션에서 유지 관리할 사항에 대해 거의 또는 전혀 알 필요가 없습니다.따라서 일반 컬렉션은 와 함께 제공됩니다.NET 프레임워크는 일반적인 사용 사례의 주요 예입니다.
private void button1_Click_1(object sender, RoutedEventArgs e)
{
TextValue<string, int> foo = new TextValue<string, int>("",0);
foo.Text = "Hi there";
foo.Value = 3995;
MessageBox.Show(foo.Text);
}
class TextValue<TText, TValue>
{
public TextValue(TText text, TValue value)
{
Text = text;
Value = value;
}
public TText Text { get; set; }
public TValue Value { get; set; }
}
기본적인 예는 다음과 같습니다.
class Other{
class Generic<T>
{
void met1(T x);
}
static void Main()
{
Generic<int> g = new Generic<int>();
Generic<string> s = new Generic<string>();
}
}
private void button1_Click_1(object sender, RoutedEventArgs e)
{
TextValue<string, int> foo;
List<TextValue<string, int>> listTextValue = new List<TextValue<string, int>>();
for (int k = 0; k < 5; ++k)
{
foo = new TextValue<string, int>("",0);
foo.Text = k.ToString();
foo.Value = k;
listTextValue.Add(foo);
otherList.
MessageBox.Show(foo.Text);
}
}
class TextValue<TText, TValue>
{
public TextValue(TText text, TValue value){Text = text; Value = value;}
public TText Text { get; set; }
public TValue Value { get; set; }
}
언급URL : https://stackoverflow.com/questions/692540/examples-of-usage-of-generics-in-net-c-vb-net
'programing' 카테고리의 다른 글
이 인증서에는 잘못된 발급자 Apple Push Services가 있습니다. (0) | 2023.05.10 |
---|---|
삭제된 파일 준비 중 (0) | 2023.05.10 |
val()은 jQuery에서 변경()을 트리거하지 않습니다. (0) | 2023.05.10 |
AutoReconnect 예외 "마스터가 변경되었습니다" (0) | 2023.05.10 |
Python Panda는 데이터 프레임이 비어 있지 않은지 확인합니다. (0) | 2023.05.10 |