地址替代C#中的替代
任何人都可以帮我解决C#中有关VB6中AddressOf运算符的替代解决方案吗? AddressOf返回一个long值。 我可以用什么方法获得C#中的输出?
扩展Harper Shelby的答案,是的,它可以完成,但在.NET中这通常是代码味道。
要在C#中获取变量的地址,可以使用C样式指针(*)/地址(&)/解除引用( – >)语法。 为此,您必须使用/ unsafe编译器开关编译应用程序,因为一旦开始直接处理内存地址,就会从托管代码的安全网中弹出。
来自MSDN的样本讲述了大部分故事:
int number; int* p = &number; Console.WriteLine("Value pointed to by p: {0}", p->ToString());
这将number
变量的地址分配给指向int的指针p
。
有一些捕获:
- 必须初始化要获取其地址的变量。 值类型不是问题,默认情况下,但它是引用类型的问题。
- 在.NET中,变量可以在内存中移动而不会让您意识到它。 如果你需要处理变量的地址,你真的想使用
fixed
来fixed
RAM中的变量。 - &只能应用于变量,而不是常量或值。 (换句话说,你不能使用像
int* p = &GetSomeInt();
这样的构造 - 同样,您的代码必须以不安全模式进行编译,该模式标记您将使用托管代码“安全网”之外的function的CLR。
一般来说,我在这个世界上的建议是认真考虑为什么你认为你需要在.NET世界中这样做。 .NET的任务之一是保护开发人员不要违背金属,这个function与此任务背道而驰。 它适用于需要它的那些(罕见)场景; 如果你发现自己轻率地使用它只是因为你可以,你可能会误用它并引入代码味道。
尽可能避免使用它,但如果绝对必要,请知道如何使用它。
C#具有为委托/事件分配函数的特殊语法。 只需使用
如果你真的试图获得其他用途的地址,那你就不走运了。 托管代码的一个问题是这些地址不一定是固定的。 虽然大多数function都不可能改变,但有可能存在这种情况。
显然,这可以做到(虽然我不确定你需要它在哪里)。 这是MSDN页面 。
EventHandler handler1 = this.button1_Click; EventHandler handler2 = new EventHandler( this.button1_Click ); ... ... ... void button1_Click( object sender, EventArgs e ){ // .... }
两种表示法都是等同的。
上述就是C#学习教程:地址替代C#中的替代分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1012021.html