当前位置: 编程技术>.net/c#/asp.net
C#学习笔记之接口与基于接口的工厂模型
来源: 互联网 发布时间:2014-08-30
本文导语: 有关C#接口的概念: 1,声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。 2,不能实例化接口,他只能包含其成员的签名。 3,接口不能有构造函数或字段。但可以有属性, 4,因为.NET的接...
有关C#接口的概念:
1,声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。
2,不能实例化接口,他只能包含其成员的签名。
3,接口不能有构造函数或字段。但可以有属性,
4,因为.NET的接口通常是公共契约,例如要与VB兼容,而VB并不支持运算符重载,所以C#中的接口定义也不允许包含运算符。
5,接口定义的成员上不允许声明运算符。
6,接口成员总是公共的,不能声明为虚拟或者静态。如果需要由执行的类来声明。
7,接口是可以继承的。
参才之前有关C#工厂模型的内容,实现一个简单的加减运算器。
①定义接口
IOperation.cs
代码示例:
namespace 接口
{
public interface IOperation
{
/*
* NumberA和NumberB用来记录数字
* 这里的这种写法并不算写了执行内容,
* 编译器可以通过
* 但在实现该接口的类中还是要在定义一遍
*/
double NumberA
{
get;
set;
}
double NumberB
{
get;
set;
}
/*
* GetResults方法规定每一个实现该接口的类
* 都要用定义它的实现过程,否则报错。
*/
double GetResult();
}
}
{
public interface IOperation
{
/*
* NumberA和NumberB用来记录数字
* 这里的这种写法并不算写了执行内容,
* 编译器可以通过
* 但在实现该接口的类中还是要在定义一遍
*/
double NumberA
{
get;
set;
}
double NumberB
{
get;
set;
}
/*
* GetResults方法规定每一个实现该接口的类
* 都要用定义它的实现过程,否则报错。
*/
double GetResult();
}
}
②实现接口
运算类.cs 实现两个类Add(加)和Sub(减)
代码示例:
namespace 接口
{
public class Add : IOperation
{
//实现GetResults方法,两数相加
public double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
//虽然和接口一样写法,但这里算实现,接口中只算定义
public double NumberA
{
get;
set;
}
public double NumberB
{
get;
set;
}
}
public class Sub : IOperation
{
public double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
public double NumberA
{
get;
set;
}
public double NumberB
{
get;
set;
}
}
}
{
public class Add : IOperation
{
//实现GetResults方法,两数相加
public double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
//虽然和接口一样写法,但这里算实现,接口中只算定义
public double NumberA
{
get;
set;
}
public double NumberB
{
get;
set;
}
}
public class Sub : IOperation
{
public double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
public double NumberA
{
get;
set;
}
public double NumberB
{
get;
set;
}
}
}
③,模型核心部分,工厂的实现
根据需要生产不同类(这里指add 和sub)的意思,这就像是工厂做的工作。
工厂类.cs
代码示例:
namespace 接口
{
public class Factory
{
//返回类型接口型
public static IOperation Count(string operate)
{
IOperation oper = null;
/*
* 按需生成继承了IOperation接口的类
* 这里也说明了接口的用途:
* 在执行并调用的时候,不必知道oper具体的对象类型,
* 只需知道该对象实现了IOperation接口
*/
switch (operate)
{
case "+":
oper = new Add();
break;
case "-":
oper = new Sub();
break;
}
return oper;
}
}
}
{
public class Factory
{
//返回类型接口型
public static IOperation Count(string operate)
{
IOperation oper = null;
/*
* 按需生成继承了IOperation接口的类
* 这里也说明了接口的用途:
* 在执行并调用的时候,不必知道oper具体的对象类型,
* 只需知道该对象实现了IOperation接口
*/
switch (operate)
{
case "+":
oper = new Add();
break;
case "-":
oper = new Sub();
break;
}
return oper;
}
}
}
④ 调用示例
代码示例:
IOperation oper = Factory.Count("+");
oper.NumberA = 1d;
oper.NumberB = 2d;
Console.WriteLine(oper.GetResult());
oper.NumberA = 1d;
oper.NumberB = 2d;
Console.WriteLine(oper.GetResult());
就是这些了,介绍了C#的接口,以及基于工厂模式实现的一个例子,希望对大家有所帮助。