是否可以在C#内置操作中使用ref类型<&燃气轮机;代表?
C#具有内置的委托是否可以在C#内置操作中使用ref类型<&燃气轮机;代表?,c#,C#,C#具有内置的委托Action和Func。是否可以为此委托使用“ref”类型参数?例如,此代码: public delegate void DTest( ref Guid a ); public event DTest ETest; 将编译。但是如果我使用操作,它将不会编译: public event Action< ref Guid > ETest; 公共事件操作ETest; 有任何提示吗?没有,您不能对操作委托使用按引用传递。虽然框架中有一个“通过引用传递的类型”的概念,即
Action
和Func
。是否可以为此委托使用“ref”类型参数?例如,此代码:
public delegate void DTest( ref Guid a );
public event DTest ETest;
将编译。但是如果我使用操作
,它将不会编译:
public event Action< ref Guid > ETest;
公共事件操作ETest;
有任何提示吗?没有,您不能对
操作
委托使用按引用传递。虽然框架中有一个“通过引用传递的类型”的概念,即类型
,但就C#而言,它并不是正常意义上的类型ref
是参数的修饰符,不是类型名称的一部分,如果你明白我的意思的话
但是,您可以构建自己的等效类型集,例如
delegate void ActionRef<T>(ref T item);
委托无效操作参考(参考T项);
当然,如果您希望在同一个委托中混合使用ref和non-ref参数,您会遇到一组可怕的组合:
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);
委托无效操作REF1(ref T1 arg1,T2 arg2);
代表无效操作参考2(T1 arg1,参考T2 arg2);
代表无效行动参考3(参考T1 arg1,参考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; }
}
公共类MyComplexObject
{
///
///为结果提供的名称。
///
公共字符串名称{get;set;}
///
///结果的价值。
///
公共对象值{get;set;}
}
在动作中使用:
Action<MyComplexObject> myAction = (MyComplexObject result) =>
{
result.Value = MyMethodThatReturnsSomething();
};
Action myAction=(MyComplexObject结果)=>
{
result.Value=MyMethodThatReturnsMethoding();
};
由于MyComplexObject引用未更改,因此数据将保留
另外。这是唯一用lamda语法定义的吗?ActionRef Setter2=(ref int x,int y)=>x=y;很好。。。但只比正常情况长一点。@sgtz:我想是的-这是一个非常不寻常的要求,所以如果没有太多的工作使其简洁,我并不感到惊讶。那么“ref R[I]”呢,其中R是一个列表。这可能吗?你想让我提出一个新问题吗?嗨,乔恩,在C#7这方面有什么变化吗?因为我(在一个C#6项目中)使用了Action,但R#说这是一个C#7特性时出错了。这是他们的错吗?@gdoron:我不知道。在C#7中有大量关于
ref
的新内容,但并非如此。。。