Csharp/CSharp Tutorial/Generic/Generic Interface

Материал из .Net Framework эксперт
Версия от 15:14, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Declaring a Generic Interface, Implementing a Generic Interface

<source lang="csharp">interface IPair<T> {

   T First
   {
       get;
       set;
   }
   T Second
   {
       get;
       set;
   }

} public struct Pair<T>: IPair<T> {

   public T First
   {
       get
       {
           return _First;
       }
       set
       {
           _First = value;
       }
   }
   private T _First;
   public T Second
   {
       get
       {
           return _Second;
       }
       set
       {
           _Second = value;
       }
   }
   private T _Second;

}</source>

Declaring a Generic with Multiple Type Parameters

<source lang="csharp">interface IPair<TFirst, TSecond> {

   TFirst First
   { get; set;    }
   TSecond Second
   { get; set;    }

} public struct Pair<TFirst, TSecond>: IPair<TFirst, TSecond> {

   public Pair(TFirst first, TSecond second)
   {
       _First = first;
       _Second = second;
   }
   public TFirst First
   {
       get{ return _First;    }
       set{ _First = value; }
   }
   private TFirst _First;
   public TSecond Second
   {
       get{ return _Second; }
       set{ _Second = value; }
   }
   private TSecond _Second;

}</source>

Generic IEquatable

<source lang="csharp">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);
       }
   }</source>

Generic Interface

<source lang="csharp">using System; using System.Collections.Generic; interface GenericInterface<T> {

  T getValue(T tValue);

} class MyClass<T> : GenericInterface<T> {

  public T getValue(T tValue)    
  {
     return tValue;
  }

} class MainClass {

  static void Main()
  {
     MyClass<int>    intObject    = new MyClass<int>();
     MyClass<string> stringObject = new MyClass<string>();
     Console.WriteLine("{0}", intObject.getValue(5));
     Console.WriteLine("{0}", stringObject.getValue("Hi there."));
  }

}</source>

5
Hi there.

Generic Interface for binary operation

<source lang="csharp">using System; using System.Collections.Generic; using System.Text;

 public interface IBinaryOperations<T>
 {
   T Add(T arg1, T arg2);
   T Subtract(T arg1, T arg2);
   T Multiply(T arg1, T arg2);
   T Divide(T arg1, T arg2);
 }
 public class BasicMath : IBinaryOperations<int>
 {
   public BasicMath() {}
   public int Add(int arg1, int arg2)
   { return arg1 + arg2; }
   public int Subtract(int arg1, int arg2)
   { return arg1 - arg2; }
   public int Multiply(int arg1, int arg2)
   { return arg1 * arg2; }
   public int Divide(int arg1, int arg2)
   { return arg1 / arg2; }
   }
 class Program
 {
   static void Main(string[] args)
   {
     BasicMath m = new BasicMath();
     Console.WriteLine("1 + 1 = {0}", m.Add(1, 1));
   }
 }</source>

Implement multiple generic interfaces by a non-generic class

<source lang="csharp">using System; using System.Collections.Generic; interface GenericInterface<T> {

  T getValue(T inValue);

} class MyClass : GenericInterface<int>, GenericInterface<string> {

  public int getValue(int inValue)            
  {
     return inValue;
  }
  public string getValue(string inValue)      
  {
     return inValue;
  }

} class MainClass {

  static void Main()
  {
     MyClass TrivInt = new MyClass();
     MyClass TrivString = new MyClass();
     Console.WriteLine("{0}", TrivInt.getValue(5));
     Console.WriteLine("{0}", TrivString.getValue("Hi there."));
  }

}</source>

5
Hi there.