/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example8_6.cs illustrates deriving an
interface from multiple interfaces
*/
using System;
public class Example8_6
{
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();
// call myCar.Accelerate()
Console.WriteLine("Calling myCar.Accelerate()");
myCar.Accelerate();
}
}
// 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();
}
// define the IMovable interface (derived from IDrivable and ISteerable)
public interface IMovable : IDrivable, ISteerable
{
// method declarations
void Accelerate();
void Brake();
}
// Car class implements the IMovable interface
public class Car : IMovable
{
// 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");
}
// implement the Accelerate() method of the IMovable interface
public void Accelerate()
{
Console.WriteLine("car accelerating");
}
// implement the Brake() method of the IMovable interface
public void Brake()
{
Console.WriteLine("car braking");
}
}
Class Interface
illustrates deriving an interface from one interface
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example8_5.cs illustrates deriving an
interface from one interface
*/
using System;
// define the IDrivable interface
interface IDrivable
{
// method declarations
void Start();
void Stop();
// property declaration
bool Started
{
get;
}
}
// define the IMovable interface (derived from IDrivable)
interface IMovable : IDrivable
{
// method declarations
void Accelerate();
void Brake();
}
// Car class implements the IMovable interface
class Car : IMovable
{
// 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 Accelerate() method of the IMovable interface
public void Accelerate()
{
Console.WriteLine("car accelerating");
}
// implement the Brake() method of the IMovable interface
public void Brake()
{
Console.WriteLine("car braking");
}
}
public class Example8_5
{
public static void Main()
{
// create a Car object
Car myCar = new Car();
// call myCar.Start()
Console.WriteLine("Calling myCar.Start()");
myCar.Start();
// call myCar.Accelerate()
Console.WriteLine("Calling myCar.Accelerate()");
myCar.Accelerate();
}
}
illustrates casting an object to an interface
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example8_4.cs illustrates casting an object
to an interface
*/
using System;
// define the IDrivable interface
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_4
{
public static void Main()
{
// create a Car object
Car myCar = new Car();
// use the is operator to check that myCar supports the
// IDrivable interface
if (myCar is IDrivable)
{
Console.WriteLine("myCar supports IDrivable");
}
// cast the Car object to IDrivable
IDrivable myDrivable = (IDrivable) myCar;
// call myDrivable.Start()
Console.WriteLine("Calling myDrivable.Start()");
myDrivable.Start();
Console.WriteLine("myDrivable.Started = " +
myDrivable.Started);
// call myDrivable.Stop()
Console.WriteLine("Calling myDrivable.Stop()");
myDrivable.Stop();
Console.WriteLine("myDrivable.Started = " +
myDrivable.Started);
// cast the Car object to IDrivable using the as operator
IDrivable myDrivable2 = myCar as IDrivable;
if (myDrivable2 != null)
{
Console.WriteLine("Calling myDrivable2.Start()");
myDrivable2.Start();
Console.WriteLine("Calling myDrivable2.Stop()");
myDrivable2.Stop();
Console.WriteLine("myDrivable2.Started = " +
myDrivable2.Started);
}
}
}
illustrates inheriting from a class and implementing multiple interfaces
/*
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();
}
}
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]