C#接口的疑惑,请大家指点!!谢谢
privateESRI.ArcGIS.Controls.IMapControl3m_mapControl=null;//接口IMapControl3定义了一个对象m_ma...
private ESRI.ArcGIS.Controls.IMapControl3 m_mapControl = null;//接口IMapControl3定义了一个对象m_mapControl设为NULL,意思是目前没有这个接口对象没有指向任何类对象?通俗的讲是不是还没有任何类实现此接口的方法??
private ESRI.ArcGIS.Controls.IPageLayoutControl2 m_pageLayoutControl = null;//同上
private IMapDocument pMapDocument;//接口声明对象时是不是可以不设为NULL??
private void Form1_Load(object sender, EventArgs e)
{
m_mapControl = (IMapControl3)this.axMapControl1.Object;//接口对象m_mapControl 指向axMapControl1对象??请问这个语法?不太懂。axMapControl1.Object?是什么意思?为什么加个.object?
m_pageLayoutControl = (IPageLayoutControl2)this.axPageLayoutControl1.Object;
}
上面这段代码是arcengine中的一点代码。
我刚刚学接口不久,里面的代码不太理解,请高手说的详细点!!谢谢!! 展开
private ESRI.ArcGIS.Controls.IPageLayoutControl2 m_pageLayoutControl = null;//同上
private IMapDocument pMapDocument;//接口声明对象时是不是可以不设为NULL??
private void Form1_Load(object sender, EventArgs e)
{
m_mapControl = (IMapControl3)this.axMapControl1.Object;//接口对象m_mapControl 指向axMapControl1对象??请问这个语法?不太懂。axMapControl1.Object?是什么意思?为什么加个.object?
m_pageLayoutControl = (IPageLayoutControl2)this.axPageLayoutControl1.Object;
}
上面这段代码是arcengine中的一点代码。
我刚刚学接口不久,里面的代码不太理解,请高手说的详细点!!谢谢!! 展开
3个回答
展开全部
private ESRI.ArcGIS.Controls.IMapControl3 m_mapControl = null;
这个的意思不是没有类实现此接口.而是,你在这里定义了一个 IMapControl3 类型的变量,没有给它赋值.这里并没有继承的意思,只是引用 m_mapControl 是变量,而不是一个类。
比如 public interface IA { public string Write(string txt) ; }
public class A1 : IA { public string Write(string txt){ //把txt写入到文件的代码 } }
public class A2 : IA { public string Write(string txt){ //把txt写入到数据库的代码 } }
这里,A1和A2 对 IA 才是继承,它们都实现write方法,但是一个把 输入写到文件,一个把输入的字符写到数据库。
如果定义
IA a = new A1() ; 或者 IA a = new A2() 那么这里要用的是类A1或者A2对IA的实现。
后面的代码可以这样写
先定义变量a,然后根据需要来决定用哪个类来实例化 a ;
IA a = null ;
if (WriteToFile) a = new A1() ;
else a = new A2() ;
a.Write() ;
这样一来,写到数据库还是写到文件就由 WriteToFile 来决定了。
明白这个,后面那句代码你就应该明白了
m_mapControl = (IMapControl3)this.axMapControl1.Object;
m_mapControl 是个IMapControl3型的变量,而 this.axMapControl1.Object 也是一个变量,它对应的是实现 IMapControl3 接口的一个类的实例。这句的意思就是用 this.axMapControl1.Object 这个实例来给 m_mapControl 变量赋值。
楼上的,送你句话,"知之为知之,不知为不知". 看明白别人的问题再发话行不?
这个的意思不是没有类实现此接口.而是,你在这里定义了一个 IMapControl3 类型的变量,没有给它赋值.这里并没有继承的意思,只是引用 m_mapControl 是变量,而不是一个类。
比如 public interface IA { public string Write(string txt) ; }
public class A1 : IA { public string Write(string txt){ //把txt写入到文件的代码 } }
public class A2 : IA { public string Write(string txt){ //把txt写入到数据库的代码 } }
这里,A1和A2 对 IA 才是继承,它们都实现write方法,但是一个把 输入写到文件,一个把输入的字符写到数据库。
如果定义
IA a = new A1() ; 或者 IA a = new A2() 那么这里要用的是类A1或者A2对IA的实现。
后面的代码可以这样写
先定义变量a,然后根据需要来决定用哪个类来实例化 a ;
IA a = null ;
if (WriteToFile) a = new A1() ;
else a = new A2() ;
a.Write() ;
这样一来,写到数据库还是写到文件就由 WriteToFile 来决定了。
明白这个,后面那句代码你就应该明白了
m_mapControl = (IMapControl3)this.axMapControl1.Object;
m_mapControl 是个IMapControl3型的变量,而 this.axMapControl1.Object 也是一个变量,它对应的是实现 IMapControl3 接口的一个类的实例。这句的意思就是用 this.axMapControl1.Object 这个实例来给 m_mapControl 变量赋值。
楼上的,送你句话,"知之为知之,不知为不知". 看明白别人的问题再发话行不?
追问
谢谢你,明白了,请问您有写博客或者讲写engine的知识的吗?我会向您好好学习的
迪凯特科技(北京)有限公司_
2025-01-03 广告
2025-01-03 广告
协议一般要包含:起始符、数据、校验码、结束符,5个部分的定义。 其中 起始符、结束符,不能与其他数据重码。 如只要传输字母与数字,可以看下ASCII码表,使用非数字和字母的符号做起始结束符即可,如{}; 数据长度码即表示此串数据包的数据长度...
点击进入详情页
本回答由迪凯特科技(北京)有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |