Книга: C# 2008 Programmer
Extending Interfaces
Extending Interfaces
You can extend interfaces if you need to add new members to an existing interface. For example, you might want to define another interface named IManager
to store information about managers. Basically, a manager uses the same members defined in the IPerson
interface, with perhaps just one more additional property — Dept
. In this case, you can define the IManager
interface by extending the IPerson
interface, like this:
interface IPerson {
string Name { get; set; }
DateTime DateofBirth { get; set; }
ushort Age();
}
interface IManager : IPerson {
string Dept { get; set; }
}
To use the IManager
interface, you define a Manager
class that implements the IManager
interface, like this:
public class Manager : IManager {
//---IPerson---
public string Name { get; set; }
public DateTime DateofBirth { get; set; }
public ushort Age() {
return (ushort)(DateTime.Now.Year - this.DateofBirth.Year);
}
//---IManager---
public string Dept { get; set; }
}
The Manager
class now implements all the members defined in the IPerson
interface, as well as the additional member defined in the IManager
interface. You can use the Manager
class like this:
Manager m1 = new Manager() {
Name = "John",
DateofBirth = new DateTime(1970, 7, 28),
Dept = "IT"
};
Console.WriteLine(m1.Age());
You can also extend multiple interfaces at the same time. The following example shows the IManager
interface extending both the IPerson
and the IAddress
interfaces:
interface IManager : IPerson, IAddress {
string Dept { get; set; }
}
The Manager
class now needs to implement the additional members defined in the IAddress
interface:
public class Manager : IManager {
//---IPerson---
public string Name { get; set; }
public DateTime DateofBirth { get; set; }
public ushort Age() {
return (ushort)(DateTime.Now.Year - this.DateofBirth.Year);
}
//---IManager---
public string Dept { get; set; }
//---IAddress---
public string Street { get; set; }
public uint Zip { get; set; }
public string State() {
//---some implementation here---
return "CA";
}
}
You can now access the Manager
class like this:
Manager m1 = new Manager() {
Name = "John",
DateofBirth = new DateTime(1970, 7, 28),
Dept = "IT",
Street = "Kingston Street",
Zip = 12345
};
Console.WriteLine(m1.Age());
Console.WriteLine(m1.State());