小编典典

与C#中的typedef等效

c#

在C#中是否存在与typedef等价的东西,或者以某种方式获得了类似的行为?我已经进行了一些谷歌搜索,但是到处看起来都是负面的。目前,我的情况类似于以下情况:

class GenericClass<T> 
{
    public event EventHandler<EventData> MyEvent;
    public class EventData : EventArgs { /* snip */ }
    // ... snip
}

现在,不需要火箭科学家去弄清楚,当尝试为该事件实现处理程序时,这会很快导致很多类型的输入(对可怕的双关语表示歉意)。最终会变成这样:

GenericClass<int> gcInt = new GenericClass<int>;
gcInt.MyEvent += new EventHandler<GenericClass<int>.EventData>(gcInt_MyEvent);
// ...

private void gcInt_MyEvent(object sender, GenericClass<int>.EventData e)
{
    throw new NotImplementedException();
}

除了我而言,我已经在使用复杂类型,而不仅仅是int类型。如果可以简化一点,那就太好了…

编辑:即。也许可以对EventHandler进行类型定义,而不必重新定义它以获得类似的行为。


阅读 473

收藏
2020-05-19

共1个答案

小编典典

不,没有typedef的真正等效项。您可以在一个文件中使用“ using”指令,例如

using CustomerList = System.Collections.Generic.List<Customer>;

但这只会影响该源文件。在C和C ++中,我的经验是typedef通常在广泛包含的.h文件中使用-
因此typedef可以在整个项目中使用单个文件。C#中不存在该#include功能,因为C#中没有功能可让您将using一个文件中的指令包含在另一个文件中。

幸运的是,您提供的示例 确实 有一个修复方法-隐式方法组转换。您可以将事件订阅行更改为:

gcInt.MyEvent += gcInt_MyEvent;

:)

2020-05-19