一个有趣的问题, C#中有没有办法使用一个string的值作为一个数据类型来动态声明变量?

bhkane 2009-04-09 06:30:31
如题, 比如:
string strA = "InterfaceA"; //or string strA = "InterfaceB";
然后用strA的值即InterfaceA来声明一个类型为InterfaceA的接口:
InterfaceType ifA=xxx.GetInterface(strA);
就是让InterfaceType动态地跟着strA的值变, 若strA=="InterfaceB", 则InterfaceType==typeof(InterfaceB).
C#中有办法这样做吗?

PS: 这样做的目的是为了取代一个Python程序.
Python中可以这样做:
interfaceName="InterfaceA" #or interface="InterfaceB"
someInterface=xxx.GetInterface(interfaceName)

因为Python是弱类型语言, 会根据返回接口的类型自动将someInterface赋值.
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bhkane 2009-04-15
  • 打赏
  • 举报
回复
引用
3、c#应该不能在当前运行的类里面,根据字符串创建相应的类成员或者函数的局部变量。所以不要指望“InterfaceType ifA=......”这样的写法,可以考虑用object类型的变量来保存创建的实例。


接口没办法实例化, 所以貌似不可能使用反射来实现...
之所以有这个问题是因为现在的一个项目, COM的一个类的属性里提供了大量的接口名字,但要使用这些接口就得一个一个声明,非常麻烦.


谢谢楼上各位.



rightyeah 2009-04-13
  • 打赏
  • 举报
回复
1、同意2楼的办法,用反射。反射可以根据字符串来创建类实例,也可以访问类成员
2、interface是不能被实例化的,所以不要试图创建interface的实例
3、c#应该不能在当前运行的类里面,根据字符串创建相应的类成员或者函数的局部变量。所以不要指望“InterfaceType ifA=......”这样的写法,可以考虑用object类型的变量来保存创建的实例。
4、c#3.5 好像允许对象的后期绑定(运行时绑定),当时瞄过一眼,lz可以去看看,也许对你有用
zgke 2009-04-13
  • 打赏
  • 举报
回复
public interface TestA
{
int GetInt();
}


Type _InterfaceInfo = Type.GetType("WindowsApplication1.TestA");

MethodInfo[] _InterfactList =_InterfaceInfo.GetMethods();

for (int i = 0; i != _InterfactList.Length; i++)
{
MessageBox.Show(_InterfactList[i].Name);
}

这个意思?
caorenlong 2009-04-13
  • 打赏
  • 举报
回复
反射..学习
TaoXiaobing 2009-04-13
  • 打赏
  • 举报
回复
反射最好,还可以直接写代码运行
bhkane 2009-04-13
  • 打赏
  • 举报
回复
有没有哪位大侠来解惑下?
bhkane 2009-04-10
  • 打赏
  • 举报
回复
反射是可以解决一些问题, 不过好像不能用来动态获取接口....
如使用反射可以动态获取InterfaceA的方法或属性,但要动态获取InterfaceA本身好像办不到.我是指不使用强制类型转换的情况下

正常获取InterfaceA:

string strA="InterfaceA";
InterfaceA ifA=(InterfaceA)xxx.GetInterface(strA);


如果上面不使用强制类型转换以及InterfaceA ifA的声明, 应该如何从xxx中获取InterfaceA呢? 在不知道InterfaceA的名字的前提下.

初学c#, 请多多指教.
zgke 2009-04-09
  • 打赏
  • 举报
回复
C#也可以 使用反射来实现。.

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧