猿问

C#中接口的实例化

我知道的接口实例化可以是IA ia=new A(),IA ia=a as IA;但是例如ArcEngine中的IMap pmap=axmapcontrol1.Map是什么意思呢?那个Map是mapcontrol的属性还是什么的,有没有将几个类封装成一个大类D,然后用IA ia=D.A实例化的。如果有具体是怎么实现的呢?

侃侃无极
浏览 1311回答 3
3回答

12345678_0001

接口不能被实例化。IA ia=new A()。实例化的是类A。  IA ia=a as IA ;之所以能进行转换,是因为A集成了接口IA。可以搜下 里氏替换原则。  IMap pmap=axmapcontrol1.Map;至于 这一句, ArcEngine我没使用过,但是 axmapcontrol1.Map应该是类的属性,返回的是继承自IMap接口的子类。将几个类封装成一个大类,也可以做到。但是这样封装没什么意义。 像你上面说的,IA ia=D.AD与接口 IA没有继承关系,D只不过是返回一个IA接口的子类而已。123456789101112131415161718192021222324252627282930313233343536373839 class Program    {        static void Main(string[] args)        {            ITest t = new TestD().b;            t.GetTest();            Console.ReadKey();        }    }    public interface ITest    {        void GetTest();       }    public class TestD    {        public TestA a        {            get { return new TestA(); }        }        public TestB b        {            get { return new TestB(); }        }    }    public class TestA : ITest    {        public void GetTest()        {            Console.WriteLine("这是A");        }    }    public class TestB: ITest    {        public void GetTest()        {            Console.WriteLine("这是B");        }    } 

江户川乱折腾

接口不能实例化,只能被实现IMap pmap=axmapcontrol1.Mappmap 是接口指针 Map是IMap的实现,也是axmapcontrol1的属性。

慕神8447489

比如一个类 class A在另外的类里面使用他的时候A a=new A();这就叫实例化一个A
随时随地看视频慕课网APP
我要回答