[英]AddressOf alternative in 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
。
對此有一些關注:
fixed
來fixed
RAM中的變量。 int* p = &GetSomeInt();
這樣的構造int* p = &GetSomeInt();
一般來說,我在這個世界上的建議是認真考慮為什么你認為你需要在.NET世界中這樣做。 .NET的任務之一是保護開發人員不要違背金屬,這個功能與這個任務背道而馳。 它適用於需要它的那些(罕見)場景; 如果你發現自己輕率地使用它只是因為你可以,你可能會誤用它並引入代碼味道。
盡可能避免使用它,但如果你絕對必須知道如何使用它。
C#具有為委托/事件分配函數的特殊語法。 只需使用<delegate> += <function>;
如果你真的試圖獲得其他用途的地址,那你就不走運了。 托管代碼的一個問題是這些地址不一定是固定的。 雖然大多數功能都不可能改變,但在某些情況下這是可能的。
顯然,這可以做到(雖然我不確定你需要它在哪里)。 這是MSDN頁面 。
EventHandler handler1 = this.button1_Click;
EventHandler handler2 = new EventHandler( this.button1_Click );
...
...
...
void button1_Click( object sender, EventArgs e ){
// ....
}
兩種表示法都是等效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.