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
查看全文
相关阅读:
红楼梦 + 写入 MySQL + MongoDB
糗事百科 + 微信自动回复
验证码处理
IP 代理池
Ajax工作原理
php做APP接口开发,接口的安全性
http与https区别
mysql 索引优化
php+ajax+jquery实现jsonp跨域
SpringBoot中文乱码解决方案
原文地址:https://www.cnblogs.com/furenjun/p/318418.html
最新文章
vue的基本用法和指令
自定义分页
ModelForm组件
基于Django框架 CRM的增删改查
ajax 的简单请求,get的加法运算,post加法运算,用户登录认证
System类
Calendar类常用方法
DateFormat类中的format方法、parse方法
日期时间类
域名
热门文章
Chapter11【final、权限、内部类】
匿名对象
权限修饰符
final关键字
Scrapy
APScheduler
拉勾网 + selenium
京东商品 + selenium
psutil
什么是函数,什么是方法?
Copyright © 2011-2022 走看看