English 中文(简体)
是否可能在C#Building-in Action<>代表中使用回f型?
原标题:Is it possible to use ref types in C# built-in Action<> delegate?
  • 时间:2009-11-10 11:31:22
  •  标签:
  • c#

C#已建有代表Action<>Func<>。 是否可能为这些代表使用回法的类型参数? 例如,该法典:

public delegate void DTest( ref Guid a );
public event DTest ETest;

汇编。 但是,如果我使用<代码>Action<>,则不会汇编:

public event Action< ref Guid > ETest;

任何方面?

最佳回答

无,您可使用<条码>行动代表的逐条参考。 虽然在框架中有一种“以参考方式传递的类型”的概念作为<代码>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<MyComplexObject> myAction = (MyComplexObject result) =>
{
    result.Value = MyMethodThatReturnsSomething();                                              
};

自MyComplex以来 目标参考资料没有改动,数据保留。

http://xcalibur37.wordpress.com/10/26/c-how-to-pass-object-viss-into-actions/“rel=“noreferer” 载于我的博客。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签