Csharp/CSharp Tutorial/Generic/Generic Class

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

A simple generic class

T is a type parameter that will be replaced by a real type when an object of type Gen is created.


using System; 
 
class Gen<T> { 
  T ob;
   
  public Gen(T o) { 
    ob = o; 
  } 
 
  public T getob() { 
    return ob; 
  } 
 
  public void showType() { 
    Console.WriteLine("Type of T is " + typeof(T)); 
  } 
} 
 
class MainClass { 
  public static void Main() { 
    Gen<int> iOb = new Gen<int>(102); 
    iOb.showType(); 
 
    int v = iOb.getob(); 
    Console.WriteLine("value: " + v); 
 
    Console.WriteLine(); 
 
    Gen<string> strOb = new Gen<string>("Generics add power."); 
    strOb.showType(); 
    string str = strOb.getob(); 
    Console.WriteLine("value: " + str); 
  } 
}

A simple generic class with two type parameters: T and V

using System; 
 
class TwoGen<T, V> { 
  T ob1; 
  V ob2; 
   
  public TwoGen(T o1, V o2) { 
    ob1 = o1; 
    ob2 = o2; 
  } 
 
  public void showTypes() { 
    Console.WriteLine("Type of T is " + typeof(T)); 
    Console.WriteLine("Type of V is " + typeof(V)); 
  } 
 
  public T getT() { 
    return ob1; 
  } 
 
  public V getV() { 
    return ob2; 
  } 
} 
 
class MainClass { 
  public static void Main() { 
 
    TwoGen<int, string> tgObj = new TwoGen<int, string>(1, "A"); 
 
    tgObj.showTypes(); 
 
    int v = tgObj.getT(); 
    Console.WriteLine("value: " + v); 
 
    string str = tgObj.getV(); 
    Console.WriteLine("value: " + str); 
  } 
}
Type of T is System.Int32
Type of V is System.String
value: 1
value: A

Generic Pair

using System;
using System.Collections.Generic;
using System.ruponentModel;
    public sealed class Pair<TFirst, TSecond>: IEquatable<Pair<TFirst, TSecond>>{
        private readonly TFirst first;
        private readonly TSecond second;
        public Pair(TFirst first, TSecond second)
        {
            this.first = first;
            this.second = second;
        }
        public TFirst First
        {
            get { return first; }
        }
        public TSecond Second
        {
            get { return second; }
        }
        public bool Equals(Pair<TFirst, TSecond> other)
        {
            if (other == null)
            {
                return false;
            }
            return EqualityComparer<TFirst>.Default.Equals(this.First, other.First) &&
                   EqualityComparer<TSecond>.Default.Equals(this.Second, other.Second);
        }
        public override bool Equals(object o)
        {
            return Equals(o as Pair<TFirst, TSecond>);
        }
        public override int GetHashCode()
        {
            return EqualityComparer<TFirst>.Default.GetHashCode(first) * 37 +
                   EqualityComparer<TSecond>.Default.GetHashCode(second);
        }
    }