programing

의 Generics 사용 예.네트(C#/VB).NET)

javamemo 2023. 5. 10. 20:10
반응형

의 Generics 사용 예.네트(C#/VB).NET)

C#/VB에서 제네릭을 사용하는 예는 무엇입니까?NET과 제네릭을 사용하려는 이유는 무엇입니까?

일반 비트를 나타내기 위해 태그가 추가된 유형 또는 메서드를 선언합니다.

class Foo<T> {
    public Foo(T value) {
        Value = value;
    }
    public T Value {get;private set;}
}

은 제네릭 타입 " 위제네릭형정다니의합식을는다▁a니"를 정의합니다.Foo의"TT호출자가 제공합니다.일반 형식 인수는 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

반응형