基于C#的ArcEngine二次开发教程(01):接口、类与对象及三者之间的关系

目录

第一讲 ArcGIS Engine介绍与DeskTop的关系

编程学习的7条经验:

第二讲 接口、类与对象的关系

1 接口的定义

2 新建类CarA实现接口ICar

3 主窗体实现

5 事件驱动机制

6 封装

7 继承


第一讲 ArcGIS Engine介绍与DeskTop的关系

四个产品:

ArcCatalog 已内嵌到ArcMap中
ArcMap 二维平面地图分析工具
ArcScencse 小场景三维
ArcGlobal 大场景三维

两类数据:矢量数据和栅格数据

ArcGIS Engine是ArcObject的子集,可以实现ArcGIS Desktop的多数功能

编程学习的7条经验:

  • 学习一门编程语言(如C#);
  • 了解和熟悉ArcMap的使用;
  • 明白接口、类和对象及其相互关系;
  • 多看帮助文档;学会接口查询技术;
  • 多写代码及阅读优秀代码;
  • 多写伪代码

第二讲 接口、类与对象的关系

接口是可被任何类继承和实现的属性和行为的集合,包含属性、方法、索引器和事件,但是不能定义字段

类是用来继承和实现接口,将类实例化为对象后,即可使用接口定义的方法和属性

1 接口的定义

(1)新建WinForm窗体应用程序,添加接口ICar

基于C#的ArcEngine二次开发教程(01):接口、类与对象及三者之间的关系_第1张图片

(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();
    }
}

2 新建类CarA实现接口ICar

将鼠标停留在ICar上,出现下图提示:

基于C#的ArcEngine二次开发教程(01):接口、类与对象及三者之间的关系_第2张图片

点击[实现接口“ICar”],自动生成如下代码:

基于C#的ArcEngine二次开发教程(01):接口、类与对象及三者之间的关系_第3张图片

修改代码实现接口:

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");
        }
    }
}

3 主窗体实现

添加按钮button1,并增加点击事件,添加代码:

        private void button1_Click(object sender, EventArgs e)
        {
            ICar myCar = new CarA();
            myCar.color = "白色";
            myCar.jiasu();
            MessageBox.Show(myCar.color);
        }

效果展示:

基于C#的ArcEngine二次开发教程(01):接口、类与对象及三者之间的关系_第4张图片基于C#的ArcEngine二次开发教程(01):接口、类与对象及三者之间的关系_第5张图片基于C#的ArcEngine二次开发教程(01):接口、类与对象及三者之间的关系_第6张图片

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);
        }

5 事件驱动机制

按下鼠标,就是一个事件;按下后就会执行响应的事件处理程序

如前文中的button1和button2的Click事件

6 封装

把属性和方法隐藏起来,只需要关注结果而不需要关注其实现的细节

7 继承

一个类可以继承自多个接口,之间用逗号隔开

例如:定义继承自接口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);
        }

此时,飞车便同时拥有卡车和飞机的所有属性和方法了

 

 

你可能感兴趣的:(基于C#的ArcEngine二次开发教程(01):接口、类与对象及三者之间的关系)