前两天我在看人家的代码时,发现了一个获取远程服务的代码,不知道他是怎么实现的。
如: IUserService UserService = (IUserService)ServiceFactory.getService();
我想问的就是一般我们的写法就是: IUserService UserService = (IUserService)ServiceFactory.getService("ServiceName"); 他这里没有写获取的名称,只用了一个强制转换。我想问的就是,他这个getService方法怎么知道应该实例化哪个类(服务)出来,我想应该是根据这个强制转换获取出来的,但是在里面的方法getService能获取到要转换的类型吗?
如果能,怎么获取,谢谢了。
如: IUserService UserService = (IUserService)ServiceFactory.getService();
我想问的就是一般我们的写法就是: IUserService UserService = (IUserService)ServiceFactory.getService("ServiceName"); 他这里没有写获取的名称,只用了一个强制转换。我想问的就是,他这个getService方法怎么知道应该实例化哪个类(服务)出来,我想应该是根据这个强制转换获取出来的,但是在里面的方法getService能获取到要转换的类型吗?
如果能,怎么获取,谢谢了。
解决方案 »
- 多线程问题 控件的值在窗体上显示不出来
- socket掉用ReceiveFrom时,我一关闭程序,它就会出现"一个封锁操作被对WSACancelBlockingCall的调用中断"错误;
- 如何巧用wrod提取图片的文字。顶!!
- 请教,datagrid的headtext设置问题?
- ***** 100分求助 函数耗费时间的问题 *****
- rs232 write
- 请问如何在datagrid中实现thead和tfoot
- 怎样在建立一个类下的数组?(高手进来看看)
- 急死了,.net装不上
- 请教各位大侠,应用程序如何与文档关连?急!急!急!在线等待!
- 求助:关于清除母版页description、keywords
- 在c#中的的第三方控件的使用?
ServiceName应该是一个类名,这个类实现上面的接口。
getService是反射的方法,估计里面的代码就是:
Assembly ab = Assembly.Load(className);
................................这段代码的意思就是根据类名,动态创造实现了IUserService的类的实例。
(IUserService)ServiceFactory.getService(); 没有传递类名的字符串,如何获得的正确的对象?难道是通过外面的类型转换得知的应该生成哪个类对象?这是不可能的。
有不带参数的么?他是不是重写过了?
把这个方法里的代码是贴出来
ServiceFactory.getService();不带参数,那肯定是因为getService()是他自己写的一个不带参数的方法。
简单的说,标准工厂类是利用父类,子类的继承和转换关系,做的一种技巧性代码,通常不涉及反射
不过有些人也会在里面用反射手法。
比如说:现在有10个服务类,也有10个它的接口。
现在我要实例化哪个服务出来,只需要这样写
IUserService UserService = (IUserService)ServiceFactory.getService(); 底层就能自动实例化出这个来。
我想由于我没有传要被实例化的Type,或者Key,它方法里面怎么知道我要实例化的对象?难道是在前面用了 强制转换,在后面方法里就能知道 这个强制转换的类型?
比如说我要实例化其它服务,也一样的是用的 (ILoginService)ServiceFactory.getService(),这样就能把登录服务实例化出来。
所以我才问会,在方法里面,能不能获取到强制转换的类型(Type)
显式强制转换调用转换运算符,从一种类型转换为另一种类型。如果未定义相应的转换运算符,则强制转换会失败。
同时显示强制转换包括所有隐式转换,即任何系统允许的隐式转换写成显示转换的形式都是允许的。
隐式转换包括以下转换(可能不全):
从任何引用类型到object的转换。
从类类型A到类类型B的转换,其中类A从类B派生得到。
从类类型A到接口类型B的转换,其中类A实现了接口B。
从接口类型A到接口类型B的转换,其中接口A是从接口B派生。
从任何数组类型到System.Array的转换。
从任何委托类型到System.Delegate的转换。
从任何数组类型或委托类型到System.ICloneable的转换。
从空类型(null)到任何引用类型的转换。