目录
第一讲 ArcGIS Engine介绍与DeskTop的关系
编程学习的7条经验:
第二讲 接口、类与对象的关系
1 接口的定义
2 新建类CarA实现接口ICar
3 主窗体实现
5 事件驱动机制
6 封装
7 继承
四个产品:
ArcCatalog | 已内嵌到ArcMap中 |
ArcMap | 二维平面地图分析工具 |
ArcScencse | 小场景三维 |
ArcGlobal | 大场景三维 |
两类数据:矢量数据和栅格数据
ArcGIS Engine是ArcObject的子集,可以实现ArcGIS Desktop的多数功能
接口是可被任何类继承和实现的属性和行为的集合,包含属性、方法、索引器和事件,但是不能定义字段
类是用来继承和实现接口,将类实例化为对象后,即可使用接口定义的方法和属性
(1)新建WinForm窗体应用程序,添加接口ICar
(2)定义属性color和方法jiasu()
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LEI
{
interface ICar
{
string color { get; set; }
string jiasu();
}
}
将鼠标停留在ICar上,出现下图提示:
点击[实现接口“ICar”],自动生成如下代码:
修改代码实现接口:
namespace LEI
{
class CarA : ICar
{
private string _color;
public string color
{
get
{
return _color;
}
set
{
_color = value;//这个地方设置为value
}
}
public void jiasu()
{
MessageBox.Show("汽车正在加速,可加速至时速110km/h");
}
}
}
添加按钮button1,并增加点击事件,添加代码:
private void button1_Click(object sender, EventArgs e)
{
ICar myCar = new CarA();
myCar.color = "白色";
myCar.jiasu();
MessageBox.Show(myCar.color);
}
效果展示:
4 为啥要多余的定义一个接口呢?
CarA myCar = new CarA();
myCar.color = "白色";
myCar.jiasu();
MessageBox.Show(myCar.color);
只有一个类时,直接定义CarA的对象就足够了;但是如果有一个CarB类,可以加速到80km/h黑色呢?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace LEI
{
class CarB : ICar
{
private string _color;
public string color
{
get
{
return color;
}
set
{
_color = value;
}
}
public void jiasu()
{
MessageBox.Show("汽车正在加速,可加速至时速80km/h");
}
}
}
就可以很清楚的找到color属性和jiasu方法,且两者具有很好的统一性
添加button2点击事件:
private void button2_Click(object sender, EventArgs e)
{
ICar myCar = new CarB();
myCar.color = "黑色";
myCar.jiasu();
MessageBox.Show(myCar.color);
}
按下鼠标,就是一个事件;按下后就会执行响应的事件处理程序
如前文中的button1和button2的Click事件
把属性和方法隐藏起来,只需要关注结果而不需要关注其实现的细节
一个类可以继承自多个接口,之间用逗号隔开
例如:定义继承自接口ICar和接口IPlane的flyCar类
接口IPlane
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LEI
{
interface IPlane
{
void fly();
}
}
类flyCar
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace LEI
{
class flyCar : ICar, IPlane
{
private string _color;
public string color
{
get
{
return _color;
}
set
{
_color = value;
}
}
public void jiasu()
{
MessageBox.Show("正在加速,可加速至300km/h");
}
public void fly()
{
MessageBox.Show("处于飞行状态");
}
}
}
添加button3按钮的点击事件:
private void button3_Click(object sender, EventArgs e)
{
flyCar myCar = new flyCar();
myCar.color = "银白色";
myCar.jiasu();
myCar.fly();
MessageBox.Show(myCar.color);
}
此时,飞车便同时拥有卡车和飞机的所有属性和方法了