首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AddressOf在C#中的替代

AddressOf在C#中的替代
EN

Stack Overflow用户
提问于 2008-11-11 14:01:58
回答 4查看 22.8K关注 0票数 6

有谁能帮我解决C#中关于VB6中的AddressOf操作符的替代方案?AddressOf返回一个长值。怎样才能在C#中获得输出?

EN

回答 4

Stack Overflow用户

发布于 2008-11-11 14:56:25

扩展Harper的回答,是的,这是可以做到的,但在.NET中,这通常是一种代码味。

要在C#中获取变量的地址,可以使用C样式指针(*) /address (&) / dereference (->)语法。为了做到这一点,您必须使用/unsafe编译器开关编译应用程序,因为一旦开始直接处理内存地址,您就会从托管代码的安全网中跳出来。

MSDN的示例讲述了大部分故事:

代码语言:javascript
复制
int number;
int* p = &number;
Console.WriteLine("Value pointed to by p: {0}", p->ToString());

这将将number变量的地址分配给指针到an-int p

这方面有一些收获:

  1. 您要获取的地址的变量必须初始化。对于默认的值类型,这不是问题,但对于引用类型来说,这是一个问题。
  2. 在.NET中,变量可以在内存中移动,而不需要注意它。如果您需要处理变量的地址,您确实希望使用fixed将该变量插入内存中。
  3. &只能应用于变量,而不是常量或值。(换句话说,不能使用像int* p = &GetSomeInt();这样的构造)
  4. 同样,您的代码必须以不安全模式编译,这将标志着您将使用托管代码“安全网”之外的功能。

通常,我在这个世界上的建议是认真考虑为什么您认为您需要在.NET世界中这样做。.NET的任务之一是保护开发人员不违背这一任务,而这一功能与该任务背道而驰。它存在于那些(罕见的)需要它的场景中;如果您发现自己仅仅因为可以使用它而轻率地使用它,那么您可能在错误地使用它并引入代码气味。

如果可能的话,尽量避免,但要知道如何使用,如果你绝对必要的话。

票数 11
EN

Stack Overflow用户

发布于 2008-11-11 14:05:26

C#具有将函数分配给委托/事件的特殊语法。只需使用<delegate> += <function>;

如果你真的想得到其他用途的地址,那你就倒霉了。托管代码的一个特点是这些地址不一定是固定的。虽然大多数功能不太可能发生改变,但在某些情况下,这是可能的。

票数 6
EN

Stack Overflow用户

发布于 2008-11-11 14:06:55

显然,这是可以做到的(虽然我不知道你在哪里需要它)。这是MSDN页面

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/280953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档