Understanding Generics—Creating Generic Interfaces
Microsoft .NET Framework, ASP.NET, Visual C# (CSharp, C Sharp, C-Sharp) Developer Training, Visual Studio
Creating Generic Interfaces
As you saw earlier in the chapter during the examination of the System.Collections.Generic namespace,
generic interfaces are also permissible (e.g., IEnumerable<T>). You are, of course, free to define
your own generic interfaces (with or without constraints). Assume you wish to define an interface
that can perform binary operations on a generic type parameter:
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); }
Of course, interfaces are more or less useless until they are implemented by a class or structure. When you implement a generic interface, the supporting type specifies the placeholder type:
public class BasicMath : IBinaryOperations<int> { 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; } }
At this point, you make use of BasicMath as you would expect:
static void Main(string[] args) { Console.WriteLine("***** Generic Interfaces *****\n"); BasicMath m = new BasicMath(); Console.WriteLine("1 + 1 = {0}", m.Add(1, 1)); Console.ReadLine(); }
If you would rather create a BasicMath class that operates on floating-point numbers, you could
specify the type parameter as so:
public class BasicMath : IBinaryOperations<double> { public double Add(double arg1, double arg2) { return arg1 + arg2; } ... }
|

