/* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110 */ /* Example8_3.cs illustrates inheriting from a class and implementing multiple interfaces */ using System; interface IDrivable { // method declarations void Start(); void Stop(); // property declaration bool Started { get; } } interface ISteerable { // method declarations void TurnLeft(); void TurnRight(); } class MotorVehicle { // declare the field private string model; // define a constructor public MotorVehicle(string model) { this.model = model; } // declare a property public string Model { get { return model; } set { model = value; } } } // Car class inherits from the MotorVehicle class and // implements the IDrivable and ISteerable interfaces class Car : MotorVehicle, IDrivable, ISteerable { // declare the underlying field used by the // Started property of the IDrivable interface private bool started = false; // define a constructor public Car(string model) : base(model) // calls the base class constructor { // do nothing } // implement the Start() method of the IDrivable interface public void Start() { Console.WriteLine("car started"); started = true; } // implement the Stop() methodof the IDrivable interface public void Stop() { Console.WriteLine("car stopped"); started = false; } // implement the Started property of the IDrivable interface public bool Started { get { return started; } } // implement the TurnLeft() method of the ISteerable interface public void TurnLeft() { Console.WriteLine("car turning left"); } // implement the TurnRight() method of the ISteerable interface public void TurnRight() { Console.WriteLine("car turning right"); } } public class Example8_3 { public static void Main() { // create a Car object Car myCar = new Car("MR2"); Console.WriteLine("myCar.Model = " + myCar.Model); // call myCar.Start() Console.WriteLine("Calling myCar.Start()"); myCar.Start(); // call myCar.TurnLeft() Console.WriteLine("Calling myCar.TurnLeft()"); myCar.TurnLeft(); } }
Software Development
software development notes, main category for Cs, Java, and other programming experiences.
illustrates implementing multiple interfaces
/* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110 */ /* Example8_2.cs illustrates implementing multiple interfaces */ using System; // define the IDrivable interface public interface IDrivable { // method declarations void Start(); void Stop(); // property declaration bool Started { get; } } // define the ISteerable interface public interface ISteerable { // method declarations void TurnLeft(); void TurnRight(); } // Car class implements the IMovable interface class Car : IDrivable, ISteerable { // declare the underlying field used by the // Started property of the IDrivable interface private bool started = false; // implement the Start() method of the IDrivable interface public void Start() { Console.WriteLine("car started"); started = true; } // implement the Stop() methodof the IDrivable interface public void Stop() { Console.WriteLine("car stopped"); started = false; } // implement the Started property of the IDrivable interface public bool Started { get { return started; } } // implement the TurnLeft() method of the ISteerable interface public void TurnLeft() { Console.WriteLine("car turning left"); } // implement the TurnRight() method of the ISteerable interface public void TurnRight() { Console.WriteLine("car turning right"); } } public class Example8_2 { public static void Main() { // create a Car object Car myCar = new Car(); // call myCar.Start() Console.WriteLine("Calling myCar.Start()"); myCar.Start(); // call myCar.TurnLeft() Console.WriteLine("Calling myCar.TurnLeft()"); myCar.TurnLeft(); } }
illustrates interfaces
/* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110 */ /* Example8_1.cs illustrates interfaces */ using System; // define the IDrivable interface public interface IDrivable { // method declarations void Start(); void Stop(); // property declaration bool Started { get; } } // Car class implements the IDrivable interface class Car : IDrivable { // declare the underlying field used by the Started property private bool started = false; // implement the Start() method public void Start() { Console.WriteLine("car started"); started = true; } // implement the Stop() method public void Stop() { Console.WriteLine("car stopped"); started = false; } // implement the Started property public bool Started { get { return started; } } } public class Example8_1 { public static void Main() { // create a Car object Car myCar = new Car(); // call myCar.Start() myCar.Start(); Console.WriteLine("myCar.Started = " + myCar.Started); // call myCar.Stop() myCar.Stop(); Console.WriteLine("myCar.Started = " + myCar.Started); } }
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); } } [/csharp]
Two class inherit one interface
/*
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; } } // Demonstrate ICipher. public class ICipherDemo { public static void Main() { ICipher ciphRef; BitCipher bit = new BitCipher(27); SimpleCipher sc = new SimpleCipher(); string plain; string coded; // first, ciphRef refers to the simple cipher ciphRef = sc; Console.WriteLine("Using simple cipher."); plain = "testing"; coded = ciphRef.encode(plain); Console.WriteLine("Cipher text: " + coded); plain = ciphRef.decode(coded); Console.WriteLine("Plain text: " + plain); // now, let ciphRef refer to the bitwise cipher ciphRef = bit; Console.WriteLine(" Using bitwise cipher."); plain = "testing"; coded = ciphRef.encode(plain); Console.WriteLine("Cipher text: " + coded); plain = ciphRef.decode(coded); Console.WriteLine("Plain text: " + plain); } } [/csharp]
Use explicit implementation to remove ambiguity
/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // Use explicit implementation to remove ambiguity. using System; interface IMyIF_A { int meth(int x); } interface IMyIF_B { int meth(int x); } // MyClass implements both interfaces. class MyClass : IMyIF_A, IMyIF_B { // explicitly implement the two meth()s int IMyIF_A.meth(int x) { return x + x; } int IMyIF_B.meth(int x) { return x * x; } // call meth() through an interface reference. public int methA(int x){ IMyIF_A a_ob; a_ob = this; return a_ob.meth(x); // calls IMyIF_A } public int methB(int x){ IMyIF_B b_ob; b_ob = this; return b_ob.meth(x); // calls IMyIF_B } } public class FQIFNames { public static void Main() { MyClass ob = new MyClass(); Console.Write("Calling IMyIF_A.meth(): "); Console.WriteLine(ob.methA(3)); Console.Write("Calling IMyIF_B.meth(): "); Console.WriteLine(ob.methB(3)); } }
Explicitly implement an interface member
/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // Explicitly implement an interface member. using System; interface IEven { bool isOdd(int x); bool isEven(int x); } class MyClass : IEven { // explicit implementation bool IEven.isOdd(int x) { if((x%2) != 0) return true; else return false; } // normal implementation public bool isEven(int x) { IEven o = this; // reference to invoking object return !o.isOdd(x); } } public class Demo { public static void Main() { MyClass ob = new MyClass(); bool result; result = ob.isEven(4); if(result) Console.WriteLine("4 is even."); else Console.WriteLine("3 is odd."); // result = ob.isOdd(); // Error, not exposed } }