C#接口(interface)知识及编程
来源:互联网 发布:亲爱的公主病 知乎 编辑:程序博客网 时间:2024/06/04 20:22
接口:
原则: 开放-关闭(注:意为对扩展开放,对內修改关闭)。
故事环境:
让我们根据具体的示例来看看接口的应用。
整个环境为:一只猫,一只老鼠,一只鸟,一个熟睡的人。猫看到老鼠,然后喵的叫了一声,此时主人由睡梦中惊醒,老鼠发现有人醒来,跑了,鸟飞了。一切又平静了。
以下为自己写的简单代码。
代码示例:
1. 各个对象的接口 // 接口中的方法属性不能生明为public 等
namespace ObserverModel
{
interface IObject
{
void ProcessEvent(); // 各个对象要做的事情
}
}
2. 对象“猫”的接口
namespace ObserverModel
{
interface ICat
{
List<IObject> LstIObject { get;set;}// 接口中只有常量和方法的定义,没有方法的实现,没有变量定义,即使static类型的
//变量 也不行,所以此处用属性
void Add(IObject o_IObject);
void Call();
//static string strTest = "aaa"; // 此处会报错,所以不能定义变量
}
}
3. 对象“人”的实现类
namespace ObserverModel
{
class Person:IObject
{
public Person(ICat cat) // ICat类型的参数
{
cat.Add(this);
}
public void ProcessEvent()
{
Console.WriteLine("awake...");
}
}
}
4. 对象“老鼠”的实现类
namespace ObserverModel
{
class Mouse:IObject
{
public Mouse(ICat cat) // ICat类型的参数
{
cat.Add(this);
}
public void ProcessEvent()
{
Console.WriteLine("run...");
}
}
}
5. 对象“鸟”的实现类
namespace ObserverModel
{
class Bird:IObject
{
public Bird(ICat cat) // ICat类型的参数
{
cat.Add(this);
}
public void ProcessEvent()
{
Console.WriteLine("fly...");
}
}
}
6. 对象“猫”的实现类
namespace ObserverModel
{
class Cat:ICat
{
List<IObject> _lstIObject = new List<IObject>();// 接口中只有常量和方法的定义,没有方法的实现,即使定义static类型
//的变量也不行 ,所以此用属性
public List<IObject> LstIObject
{
get { return _lstIObject; }
set { _lstIObject = value; }
}
public void Add(IObject o_IObject) // IObject类型的参数
{
this.LstIObject.Add(o_IObject);
}
public void Call()
{
foreach (IObject o_IObject in LstIObject)
{
o_IObject.ProcessEvent();
}
}
}
}
7. 主程序
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse = new Mouse(cat); // 此处参数类型为ICat,而cat 为Cat类型,之所以可以是因为Cat实现了接口,
//既为class类型也为接口类型
// 例如 start
Cat testCat = new Cat();
ICat testICat = testCat; // 与写成ICat testICat = (ICat)testCat; 效果一直
// 例如 end
Bird bird = new Bird(cat);
Person person = new Person(cat);
cat.Call();
Console.Read(); // 运行结果 runing... fly... awake...
}
}
}
以下为个人觉得很好的接口编程的文章链接 http://www.cnblogs.com/Gavinzhao/archive/2009/11/10/1599700.html
- C#接口(interface)知识及编程
- (转帖)C#编程利器:接口(Interface)
- C#语法小知识(五)接口interface
- C# 接口(Interface)
- C# 接口(Interface)
- C# interface(接口)
- C#接口(Interface)
- C# 接口(Interface)
- C#编程利器之三:接口(Interface)
- C#编程利器之三:接口(Interface)
- C# 入门(11) 接口(interface)
- C#接口(interface)的理解
- C#通俗理解接口(interface)
- C#接口Interface
- C#接口Interface
- C#接口Interface
- C#接口Interface
- C# interface 接口理解
- js Date
- php获取post中的json数据的实现方法
- MVC与J2EE架构的对应关系
- apache proxyPass去除jsessionid影响
- 用AGG实现高质量图形输出(一)
- C#接口(interface)知识及编程
- 数据结构在游戏中的简单应用
- 数据结构在游戏中的简单应用
- 用AGG实现高质量图形输出(二)
- 编程珠玑读书笔记
- 4.Cario图形库-基本绘图操作
- 减少JAVA GC
- enq:SQ contention / row cache lock / DFS lock handle(SV) 等待事件 说明
- 关于08年腾讯笔试的最后一道题,找中位数