Mega Code Archive

 
Categories / C# / Class Interface
 

Using interface 3

/* C#: The Complete Reference  by Herbert Schildt  Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ using System;  // An encryption interface.  public interface ICipher {    string encode(string str);    string decode(string str);  } /* A simple implementation of ICipher that codes     a message by shifting each character 1 position     higher.  Thus, A becomes B, and so on. */  class SimpleCipher : ICipher {          // Return an encoded string given plaintext.    public string encode(string str) {      string ciphertext = "";        for(int i=0; i < str.Length; i++)        ciphertext = ciphertext + (char) (str[i] + 1);        return ciphertext;    }      // Return an decoded string given ciphertext.    public string decode(string str) {      string plaintext = "";        for(int i=0; i < str.Length; i++)        plaintext = plaintext + (char) (str[i] - 1);        return plaintext;    }  }    /* This implementation of ICipher uses bit     manipulations and key. */  class BitCipher : ICipher {    ushort key;      // Specify a key when constructing BitCiphers.    public BitCipher(ushort k) {      key = k;    }          // Return an encoded string given plaintext.    public string encode(string str) {      string ciphertext = "";        for(int i=0; i < str.Length; i++)        ciphertext = ciphertext + (char) (str[i] ^ key);        return ciphertext;    }      // Return an decoded string given ciphertext.    public string decode(string str) {      string plaintext = "";        for(int i=0; i < str.Length; i++)        plaintext = plaintext + (char) (str[i] ^ key);        return plaintext;    }  } // Use ICipher.    // A class for storing unlisted telephone numbers.  class UnlistedPhone {    string pri_name;   // supports name property    string pri_number; // supports number property      ICipher crypt; // reference to encryption object      public UnlistedPhone(string name, string number, ICipher c)    {      crypt = c; // store encryption object        pri_name = crypt.encode(name);      pri_number = crypt.encode(number);    }      public string Name {      get {        return crypt.decode(pri_name);      }      set {        pri_name = crypt.encode(value);      }    }      public string Number {      get {        return crypt.decode(pri_number);      }      set {        pri_number = crypt.encode(value);      }    }  }    // Demonstrate UnlistedPhone  public class UnlistedDemo {    public static void Main() {      UnlistedPhone phone1 =          new UnlistedPhone("Tom", "555-3456", new BitCipher(27));       UnlistedPhone phone2 =          new UnlistedPhone("Mary", "555-8891", new BitCipher(9));          Console.WriteLine("Unlisted number for " +                         phone1.Name + " is " +                        phone1.Number);         Console.WriteLine("Unlisted number for " +                         phone2.Name + " is " +                        phone2.Number);     }  }