我想這樣做,但這是不可能的(不能從'void'轉換爲'System.Action')。發送靜態方法+參數作爲參數
class Program
{
public static void Main()
{
int n = 2;
ClassB cb = new ClassB();
cb.SetMethod(ClassA.MethodA(n)); //Cann't convert 'void' to 'System.Action<int>'
}
}
public class ClassA
{
public static void MethodA(int a)
{
//code
}
}
public class ClassB
{
Delegate del;
public void SetMethod(Action<int> action)
{
del = new Delegate(action);
}
public void ButtonClick()
{
del.Invoke();
}
}
public delegate void Delegate(int n);
我可以發送參數「N」,如在「使用setMethod」方法第二個參數,但我將不得不存儲變量到後傳遞給「del.Invoke(PARAM)」。我想使用「del.Invoke()」。
使用setMethod有一個動作的參數了methodA返回無效參數,所以你必須要改變的返回類型methodA to Action –
@StuartLC即使此代碼仍然不能工作,「ClassB.ButtonClick」方法正在調用單個參數動作的調用,但不提供參數。這有點不清楚他們想要在這裏實現什麼......也許他們只是想要一個沒有參數的Action:'setMethod((=)=> classA.methodA(n)'你提到了嗎? – Clint
請遵循C#的命名規則,這些細節使得你的代碼不可讀。信 –