如何定义一个“引用别的变量”的变量 ( 积分: 100 )

  • 主题发起人 主题发起人 憨憨
  • 开始时间 开始时间
[blue]第二个问题:[/blue]
很遗憾,C#无法编译成本地代码。但是可以采用第三方软件将.NET程序集加克成本地代码,比如MaxtoCode之类的。
第三个问题:
这个其实是很简单的,因为et已知了。只要采用Enum类的静态方法GetNames(), GetValues()就可以。
下面给个测试程序:foreach(object etEnum in Enum.GetValues(et)){
MessageBox.Show(etEnum.toString());
}
第一个问题:
因为在托管代码中,指针总是会被GC所移动的,除非使用了fixed关键字将指针固定。这个其实是可以实现的,但是有一点,声明字符串就不能使用string类型了,而必须采用char*。如果对这个不懂的话,那么请好好复习C语言。总指挥由大队对来来回回的转换,烦死人了。还不如采用属性的方式,然后通过反射调用(此时内存地址其实已经发生改变了,好像不符合题目要求)。
最狠的招式:采用共享内存。GC再怎么移动内存也移动不了它!就是太麻烦了。
下面举个例子,我只使用了这个字符串的第一个字符,因为string<-->char*太麻烦了,搂知自己想办法。
fixed(char* s=new char[1]){
s[0]='H';
char* ps = (char*)&amp;s[0]; //看看C语言的书,引用就是这么写的。
MessageBox.Show(ps[0].ToString());
}
 
经本人实际测试证实,本地代码和托管代码之间,效率上并无多少差异(网上的某些测试有点害人啊),实际上在某些情况下,托管代码运行效率甚至更高。
想来也是有道理的,托管代码应该是在加载时编译为本地代码,后面运行过程中实际上都是在执行本地代码,除非是频繁地装载不同的模块,否则不应该有效率问题
 
第三个问题确实比较简单,谢谢楼上。
第一个问题看来是语言不支持,算了吧
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部