菜鸟C#成长记——接口的实现
接口(interface)是向客户保证类或者结构体行为方式的一种协定。当类要实现某个接口时,相当于告诉可能的客户:“我保证支持这个具名的接口的方法、属性、事件和索引器。”在类和客户之间创建协定方面,接口是抽象类之外的另一种方式。
当实现一个接口时,它就必须实现该接口的所用方法和属性,效果相当于表明:“我同意履行这个接口所给定的协定。”
接口主体描述实现类必须实现的方法、属性等等。下面例子是描述一个类可以从数据库中存取所需的方法和属性,这个接口是IStorabel。在这个就口中指定两个方法:Read()和Write()。接口的功能是定义类中的功能。
using System;
using System.Collections.Generic;
using System.Text;
namespace 接口的实现
{
/// <summary>
/// 声明接口,默认是public
/// </summary>
interface IStorable
{
void Read(); // 没有访问修饰符,方法是公共的 // 方法没有实现
void Write(object obj);
int Status { get;set;} // 属性和方法没有实现
}
/// <summary>
/// 创建实现IStorable接口的类
/// </summary>
public class Document : IStorable
{
private int status = 0; // 存取属性的值
/// <summary>
/// 实现属性
/// </summary>
public int Status
{
get { return status; }
set { status = value; }
}
/// <summary>
/// 建立类的构造函数
/// </summary>
/// <param name="s"></param>
public Document(string s)
{
Console.WriteLine("利用{0}创建文件", s);
}
/// <summary>
/// 实现Read方法
/// </summary>
public void Read()
{
Console.WriteLine("为IStorable接口实现Read()方法");
}
/// <summary>
/// 实现Write方法
/// </summary>
public void Write(object o)
{
Console.WriteLine("为IStorable实现Write()方法");
}
}
/// <summary>
/// 测试接口
/// </summary>
class Program
{
static void Main(string[] args)
{
Document doc = new Document("测试文件");
doc.Status = -1;
doc.Read();
Console.WriteLine("文件状态:{0}",doc .Status );
Console.ReadLine();
}
}
}
using System.Collections.Generic;
using System.Text;
namespace 接口的实现
{
/// <summary>
/// 声明接口,默认是public
/// </summary>
interface IStorable
{
void Read(); // 没有访问修饰符,方法是公共的 // 方法没有实现
void Write(object obj);
int Status { get;set;} // 属性和方法没有实现
}
/// <summary>
/// 创建实现IStorable接口的类
/// </summary>
public class Document : IStorable
{
private int status = 0; // 存取属性的值
/// <summary>
/// 实现属性
/// </summary>
public int Status
{
get { return status; }
set { status = value; }
}
/// <summary>
/// 建立类的构造函数
/// </summary>
/// <param name="s"></param>
public Document(string s)
{
Console.WriteLine("利用{0}创建文件", s);
}
/// <summary>
/// 实现Read方法
/// </summary>
public void Read()
{
Console.WriteLine("为IStorable接口实现Read()方法");
}
/// <summary>
/// 实现Write方法
/// </summary>
public void Write(object o)
{
Console.WriteLine("为IStorable实现Write()方法");
}
}
/// <summary>
/// 测试接口
/// </summary>
class Program
{
static void Main(string[] args)
{
Document doc = new Document("测试文件");
doc.Status = -1;
doc.Read();
Console.WriteLine("文件状态:{0}",doc .Status );
Console.ReadLine();
}
}
}
运行结果:
代码中的Document类的作者负责提供了IStorable方法的具体实现。因为我们已经指定Document要实现该接口,那么它就必须实现所有接口的方法,否则编译时就会出错。
另外还要注意IStorabel的方法声明中并没有访问修饰符,如果有的话,就会产生编译错误。接口隐含的就是Public,因为接口是由其他类提供的协定。
实现接口的类必须完整地履行协定,实现所有的属性和方法,但是要如何实现这些必要条件,就完全由Document决定了。
参考书籍:《Progarmming C#》
2008年10月12日
1:22:42