zoukankan
html css js c++ java
接口
//
接口
//
接口与抽象类有些相似,因为它们都提供了用来创建新类的模板.它们之间的不同在于接口不提供任何实现的
//
类成员,而抽象类可以实现派生类共用的成员.
//
比起类而言,接口更像类型.当您在一个类中实现某个特定的接口时,这个类的实例可以用于被声明为该接口的
//
参数或变量.
//
例如下面的代码为前面创建的Shape对象声明了一个接口.
using
System;
namespace
FlashCards
{
public
interface
IFigure
{
float
Top
{
get
;
set
;
}
float
Left
{
get
;
set
;
}
float
Area();
float
Perimeter();
}
/**/
///
<summary>
///
使用这个接口前,需要在下面的类中实现它
///
</summary>
public
abstract
class
Shape:IFigure
{
public
Shape()
{
//
//
TODO: 在此处添加构造函数逻辑
//
}
IFigure 成员
#region
IFigure 成员
public
abstract
float
Top
{
get
;
set
;
}
public
abstract
float
Left
{
get
;
set
;
}
public
abstract
float
Area();
public
abstract
float
Perimeter();
#endregion
}
//
覆盖抽象类成员的每一个成员定义都需要 Overrides(vb.net) 或 override(c#) 关键字.
public
class
CirCle:Shape
{
float
fxCenter,fyCenter,fRadius;
public
CirCle()
{
fxCenter
=
0
;
fyCenter
=
0
;
fRadius
=
0
;
}
public
override
float
Top
{
get
{
return
fxCenter
-
fRadius;}
//
fx
set
{fxCenter
=
value
+
fRadius;}
}
public
override
float
Left
{
get
{
return
fyCenter
-
fRadius;}
//
fy
set
{fyCenter
=
value
+
fRadius;}
}
public
override
float
Area()
{
return
(
float
)(
2
*
System.Math.PI
*
Math.Pow((
double
)fRadius,
2
));
}
public
override
float
Perimeter()
{
return
2
*
fRadius
*
(
float
)System.Math.PI;
}
public
float
Radius
{
get
{
return
fRadius;}
set
{fRadius
=
value;}
}
public
virtual
void
Center(
float
x,
float
y)
{
fxCenter
=
x;
fyCenter
=
y;
}
}
public
class
Sphere:CirCle
//
球体,圆
{
float
fCenter;
public
Sphere()
{
fCenter
=
0
;
}
public
override
float
Area()
{
return
(
float
)(
4
*
Math.PI
*
Math.Pow((
double
)
base
.Radius ,
2
) );
//
圆的面积
}
public
new
void
Center(
float
x,
float
y)
{
this
.Center (x,y,
0
);
}
public
void
Center(
float
x,
float
y,
float
z)
{
base
.Center(x,y) ;
fCenter
=
z;
}
public
float
Volume()
//
体积
{
return
(
float
)((
4
/
3
)
*
System.Math.PI
*
Math.Pow((
double
)
base
.Radius,
3
));
}
public
float
Front
{
get
{
return
fCenter
-
base
.Radius ;}
set
{fCenter
=
value
+
base
.Radius ;}
}
}
}
//
这个示例中的Shape抽象类实现了IFigure接口,所有从Shape派生而来的类都继承了实现的IFigure.
//
这就是说,类型CirCle和Sphere的对象是从Shape派生而来,它们能被用作IFigure类型的参数.
//
这里的关键是接口中定义的所有项必定存在于实现该接口的类中 .如果您省略了某个成员,Visual Studio
//
将产生一个编译时错误.
private
void
Button4_Click(
object
sender, System.EventArgs e)
{
//
创建一个圆
CirCle myCircle
=
new
CirCle();
myCircle.Radius
=
2
;
myCircle.Center(
10
,
2
);
//
创建一个球体
Sphere mySphere
=
new
Sphere();
mySphere.Radius
=
10
;
mySphere.Center(
10
,
20
,
25
) ;
//
显示每一种形状的相关信息
ShowShapeInfo(mySphere);
ShowShapeInfo(myCircle);
}
private
void
ShowShapeInfo(IFigure Shape)
{
//
因为Shape参数是IFigure,我们知道它有这些成员
Response.Write(
"
Shape Top :
"
+
Shape.Top
+
"
<br>
"
) ;
Response.Write(
"
Left :
"
+
Shape.Left
+
"
<br>
"
) ;
Response.Write(
"
Area :
"
+
Shape.Area()
+
"
<br>
"
) ;
Response.Write(
"
perimeter :
"
+
Shape.Perimeter()
+
"
<br>
"
) ;
}
}
//输出
Shape Top :0
Left :10
Area : 1256.637
perimeter : 62.83186
Shape Top :8
Left :0
Area : 25.13274
perimeter : 12.56637
查看全文
相关阅读:
我理解的优秀软件工程师
Hello 博客园!
线程安全与可重入函数之间的区别与联系
linux-粘滞位的使用
死锁产生的四个必要条件及处理死锁的策略
数据结构—位图
Linux下进度条的简单实现
Linux-find命令
Linux文件3个时间点(access time,modify time,change time)
各种排序算法的实现、总结
原文地址:https://www.cnblogs.com/furenjun/p/318418.html
最新文章
跳槽穷半年,转行穷三年,死守会穷一辈子
使用SqlBulkCopy实现Excel批量导入数据库
SqlServer数据库添加角色,角色授权
超简单微信公众帐号自动回复和天气播报功能应用
在GitHub上搭建hexo博客
推荐三款使用社会化评论插件
使用“天地图”实现“百度地图”的 GPS单点沿线运动,来模拟物体运动轨迹。
加一的golang实现
最后一个单词的长度的golang实现
最大子序和的golang实现
热门文章
Thanks
报数的golang实现
搜索插入位置的golang实现
实现strStr()的golang实现
移除元素的golang实现
navicat连接mysql时出现2003(10060)错误
删除排序数组中的重复项的golang实现
不是语言之争--Go vs Erlang
Couchbase介绍,更好的Cache系统
请不要说自己是 Java 程序员
Copyright © 2011-2022 走看看