Use an interface constraint : Generic Constraint « Generics « C# / C Sharp

Home
C# / C Sharp
1.2D Graphics
2.Class Interface
3.Collections Data Structure
4.Components
5.Data Types
6.Database ADO.net
7.Design Patterns
8.Development Class
9.Event
10.File Stream
11.Generics
12.GUI Windows Form
13.Language Basics
14.LINQ
15.Network
16.Office
17.Reflection
18.Regular Expressions
19.Security
20.Services Event
21.Thread
22.Web Services
23.Windows
24.Windows Presentation Foundation
25.XML
26.XML LINQ
C# / C Sharp by API
C# / CSharp Tutorial
C# / CSharp Open Source
C# / C Sharp » Generics » Generic ConstraintScreenshots 
Use an interface constraint
Use an interface constraint


using System;

class NotFoundException : ApplicationException { }

public interface IPhoneNumber {
  string Number {
    get;
    set;
  }

  string Name {
    get;
    set;
  }
}

class Friend : IPhoneNumber {
  string name;
  string number;

  public Friend(string n, string num) {
    name = n;
    number = num;
  }

  public string Number {
    get return number; }
    set number = value; }
  }

  public string Name {
    get return name; }
    set name = value; }
  }
}

class Supplier : IPhoneNumber {
  string name;
  string number;

  public Supplier(string n, string num) {
    name = n;
    number = num;
  }
  public string Number {
    get return number; }
    set number = value; }
  }

  public string Name {
    get return name; }
    set name = value; }
  }
}

class EmailFriend {
}

class PhoneList<T> where T : IPhoneNumber {
  T[] phList;
  int end;

  public PhoneList() {
    phList = new T[10];
    end 0;
  }

  public bool add(T newEntry) {
    if(end == 10return false;

    phList[end= newEntry;
    end++;

    return true;
  }

  public T findByName(string name) {

    for(int i=0; i<end; i++) {

      if(phList[i].Name == name)
        return phList[i];

    }
    throw new NotFoundException();
  }
  public T findByNumber(string number) {

    for(int i=0; i<end; i++) {
      if(phList[i].Number == number)
        return phList[i];
    }
    throw new NotFoundException();
  }
}

class Test {
  public static void Main() {

    PhoneList<Friend> plist = new PhoneList<Friend>();
    plist.add(new Friend("A""555-1111"));
    plist.add(new Friend("B""555-6666"));
    plist.add(new Friend("C""555-9999"));

    try {
      Friend frnd = plist.findByName("B");

      Console.Write(frnd.Name + ": " + frnd.Number);

    catch(NotFoundException) {
      Console.WriteLine("Not Found");
    }

    Console.WriteLine();

    PhoneList<Supplier> plist2 = new PhoneList<Supplier>();
    plist2.add(new Supplier("D""555-4444"));
    plist2.add(new Supplier("E""555-3333"));
    plist2.add(new Supplier("F""555-2222"));

    try {
      Supplier sp = plist2.findByNumber("555-2222");
      Console.WriteLine(sp.Name + ": " + sp.Number);
    catch(NotFoundException) {
        Console.WriteLine("Not Found");
    }

    //PhoneList<EmailFriend> plist3 = new PhoneList<EmailFriend>(); 
  }
}
           
       
Related examples in the same category
1.There are five types of constraints:
2.Combination of Overriding Generic Methods
3.A base class constraintA base class constraint
4.A new() constructor constraint
5.Reference Type Constraint: A reference type constraint restricts a type parameter to a reference type.
6.Demonstrate a reference constraint
7.Demonstrate a value type constraint
8.A type parameter can be used as a constraintA type parameter can be used as a constraint
9.Reference Type ConstraintReference Type Constraint
10.Default Constructor ConstraintDefault Constructor Constraint
11.Derivation Constraint
12.constructor constraint
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.