我想創建一個代表特定實例的結構方法。但是,事實證明,結構的新實例已創建,當我調用委託時,它將在新創建的實例上執行該方法,而不是原始方法。C#代理結構方法
static void Main(string[] args)
{
Point A = new Point() { x = 0 };
Action move = A.MoveRight;
move();
//A.x is still zero!
}
struct Point
{
public int x, y;
public void MoveRight()
{
x++;
}
}
其實,發生在這個例子中是結構點的新實例是在委託銳創建並在其上執行時,通過delagate調用的方法。
如果我使用類而不是結構該問題已解決,但我想使用一個結構。我也知道創建一個打開的委託並將結構作爲第一個參數傳遞給委託的解決方案,但是這個解決方案似乎太重了。有沒有簡單的解決這個問題?
如果這確實是對性能敏感的代碼,並且您需要結構,那麼請避免完全使用委託。如果您尚未分析此代碼,甚至不知道此代碼是否會成爲您的瓶頸,那麼只需使用一個類或將該結構作爲參數傳遞給代理。 – Olhovsky 2011-02-23 15:10:20