方法一:        /// <summary>
        /// 导入KML
        /// </summary>
        /// <param name="swmName">工作空间名称</param>
        /// <param name="strDsName">数据源名称</param>
        /// <param name="strTargetName">导入后的文件名称</param>
        /// <param name="strFileName">导入文件名称</param>
        public void ImportKML(string swmName, string strDsName,  string strTargetName, string strFileName)
        {
            mWorkspace = new SuperMap.Data.Workspace();
            mMapControl = new SuperMap.UI.MapControl(mWorkspace);
            WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo(swmName);
            bool ret = mWorkspace.Open(connectionInfo);
            mMapControl.Map.Workspace = mWorkspace;
          
            objDss = mWorkspace.Datasources;
            objDs = objDss[strDsName];
            DataImport mDataImport = new DataImport();
            ImportSettingKML Import = new ImportSettingKML();
            Import.ImportMode = ImportMode.Overwrite;
            Import.SourceFilePath = strFileName;
            Import.TargetDatasource = objDs;
            ImportDataInfos dataInfos = Import.GetTargetDataInfos("");
            ImportDataInfo info = dataInfos[0];  
            info.TargetName = strTargetName;
            Import.SetTargetDataInfos(dataInfos);
            mDataImport.ImportSettings.Add(Import);
            mDataImport.Run();
            mWorkspace.Save();  
        }
--------------------------------------------------------------------
方法二:
        /// <summary>
        /// 导入KMZ
        /// </summary>
        /// <param name="swmName">工作空间名称</param>
        /// <param name="strDsName">数据源名称</param>
        /// <param name="strTargetName">导入后的文件名称</param>
        /// <param name="strFileName">导入文件名称</param>
        public void ImportKMZ(string swmName, string strDsName, string strTargetName, string strFileName)
        {
            mWorkspace = new SuperMap.Data.Workspace();
            mMapControl = new SuperMap.UI.MapControl(mWorkspace);
            WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo(swmName);
            bool ret = mWorkspace.Open(connectionInfo);
            mMapControl.Map.Workspace = mWorkspace;            objDss = mWorkspace.Datasources;
            objDs = objDss[strDsName];
            DataImport mDataImport = new DataImport();
            ImportSettingKMZ Import = new ImportSettingKMZ();
            Import.ImportMode = ImportMode.Overwrite;
            Import.SourceFilePath = strFileName;
            Import.TargetDatasource = objDs;
            ImportDataInfos dataInfos = Import.GetTargetDataInfos("");
            ImportDataInfo info = dataInfos[0];
            info.TargetName = strTargetName;
            Import.SetTargetDataInfos(dataInfos);
            mDataImport.ImportSettings.Add(Import);
            mDataImport.Run();
            mWorkspace.Save();
        }
------------------------------------------------------两个方法唯一不同的地方是:
方法一:ImportSettingKML Import = new ImportSettingKML();
方法二:ImportSettingKMZ Import = new ImportSettingKMZ();请问如何抽象?望高手指教。

解决方案 »

  1.   

    写一个基类, ImportSettingKML 和 ImportSettingKMZ 继承自基类,  ImportKMZ方法作为virtual方法,由两个子类实现具体功能,如果有相同的,可以提取出来放到基类的  ImportKMZ 方法中,子类通过调用base.xxxx去执行基类方法
      

  2.   

        /// <summary>
            /// 导入KML
            /// </summary>
            /// <param name="swmName">工作空间名称</param>
            /// <param name="strDsName">数据源名称</param>
            /// <param name="strTargetName">导入后的文件名称</param>
            /// <param name="strFileName">导入文件名称</param>
            /// <param name="Import">new ImportSettingKML()或者new ImportSettingKMZ(),如果继承自某个接口最好用接口</param>
            public void ImportKML(string swmName, string strDsName,  string strTargetName, string strFileName,dynamic Import)
            {
                mWorkspace = new SuperMap.Data.Workspace();
                mMapControl = new SuperMap.UI.MapControl(mWorkspace);
                WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo(swmName);
                bool ret = mWorkspace.Open(connectionInfo);
                mMapControl.Map.Workspace = mWorkspace;
              
                objDss = mWorkspace.Datasources;
                objDs = objDss[strDsName];
                DataImport mDataImport = new DataImport();            
                Import.ImportMode = ImportMode.Overwrite;
                Import.SourceFilePath = strFileName;
                Import.TargetDatasource = objDs;
                ImportDataInfos dataInfos = Import.GetTargetDataInfos("");
                ImportDataInfo info = dataInfos[0];  
                info.TargetName = strTargetName;
                Import.SetTargetDataInfos(dataInfos);
                mDataImport.ImportSettings.Add(Import);
                mDataImport.Run();
                mWorkspace.Save();  
            }