C# 中有内置委托 Action<>
和 Func<>
。是否可以在这些委托中使用 'ref' 类型的参数?例如,这段代码:
public delegate void DTest( ref Guid a );
public event DTest ETest;
代码能够编译通过。但如果我使用 Action<>
,它将无法编译通过:
public event Action< ref Guid > ETest;
有什么提示吗?
C# 中有内置委托 Action<>
和 Func<>
。是否可以在这些委托中使用 'ref' 类型的参数?例如,这段代码:
public delegate void DTest( ref Guid a );
public event DTest ETest;
代码能够编译通过。但如果我使用 Action<>
,它将无法编译通过:
public event Action< ref Guid > ETest;
有什么提示吗?
Action
委托中使用传递引用的方式。虽然框架中有一个“按引用传递的类型”概念作为Type
,但就C#而言,它并不是一个正常意义上的类型。如果你明白我的意思,ref
是参数的修饰符,而不是类型名称的一部分。delegate void ActionRef<T>(ref T item);
delegate void ActionRef1<T1, T2>(ref T1 arg1, T2 arg2);
delegate void ActionRef2<T1, T2>(T1 arg1, ref T2 arg2);
delegate void ActionRef3<T1, T2>(ref T1 arg1, ref T2 arg2);
public class MyComplexObject
{
/// <summary>
/// Name provided for the result.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Value of the result.
/// </summary>
public object Value { get; set; }
}
应用于 Action 中:
Action<MyComplexObject> myAction = (MyComplexObject result) =>
{
result.Value = MyMethodThatReturnsSomething();
};
由于MyComplexObject引用未更改,数据得以保留。
同时也可以在我的博客上查看。
ref
,他们必须有通过引用传递的原因... - Dvir
ref
的新内容还是很多的,但是似乎没有那个... - Jon Skeet