0

一个简单的问题,我想:你如何在 C# 中对与事件相关的项目进行分类/命名?

例如,我当前的约定如下所示:

public class A
{
    ...
    #region Delegates
    public delegate void CallIncomingEventHandler(string displayName);
    #endregion


    #region Event Handlers
    public event CallIncoming;
    #endregion
    ...
}

public class B
{
    ...
    #region Events
    private void A_CallIncoming(string displayName)
    {
        // do stuff here
    }
    #endregion
}

我的困惑是用“delegate”修饰符定义“SomethingEventHandler”类型并将它们称为“Delegates”,然后用“event”修饰符定义类似字段的事件并将它们称为“事件处理程序”,然后调用反应的方法到事件“事件”。

我的命名正确吗?

我可以创建和使用自定义事件等,但我可以使用一些帮助来理解组件的名称以及其他人如何组织它们。

谢谢。

4

2 回答 2

1

您描述了在 .NET 中使用的约定,不是吗?

我个人认为你的方法没有问题。这是众所周知的,每个使用 .NET 的开发人员很可能会期望如果不是相同的约定,那么会接近它。那么,既然存在采用的惯例,为什么还要发明一些新东西呢?

相反,我建议考虑如何在您的类中调用事件,以及将来如何为委托扩展参数?一个好的起点是再次遵循 .NET 约定,使用 .NET 等代表delegate void SomethingEventHandler(object sender, EventArgs e)。在这个问题上给出了一个很好的想法。

希望这能减少你的疑虑。

于 2013-03-07T16:09:57.207 回答
0

以防万一其他人/C#新手需要更具体的解释/示例:

public class ExampleClass
{
    // DelegateNames = NameOfObject + Verb + ("ed" or "ing") + "Handler".
    // NameOfObject  = Data, File, Property, Value, Window, Settings, User,...
    // Verb          = Open, Close, Format, Clear, Delete, Create, Insert, Update, Refresh, Dispose, Sort,...
    public delegate void SomethingHappenedHandler(object pSender, object pWhat);
    public delegate void SomeValueChangedHandler(object pSender, object pWhat, object pOldValue, object pNewValue);
    public delegate void SomethingFinishedHandler(object pSender);
    public delegate void SomethingInvokedHandler();

    // EventNames = DelegateName - "Handler".
    public event SomethingHappenedHandler SomethingHappened;
    public event SomeValueChangedHandler SomeValueChanged;
    public event SomethingFinishedHandler SomethingFinished;
    public event SomethingInvokedHandler SomethingInvoked;

    // EventHandlingMethodNames = "On" + EventName.
    private void OnSomethingHappened(object pSender, object pWhat) { /* Code...*/ }
    private void OnSomeValueChanged(object pSender, object pWhat, object pOldValue, object pNewValue) { /* Code...*/ }
    private void OnSomethingFinished(object pSender) { /* Code...*/ }
    private void OnSomethingInvoked() { /* Code...*/ }

    // EventInvokingMethods = ("Fire" | "Notify" | "Invoke") + EventName.
    private void FireSomethingHappened(object pSender, object pWhat) { /* SomethingHappened?.Invoke(...); */ }
    private void NotifySomeValueChanged(object pSender, object pWhat, object pOldValue, object pNewValue) { /* SomeValueChanged?.Invoke(...); */ }
    private void InvokeSomethingFinished(object pSender) { /* SomethingFinished?.Invoke(...); */ }
    private void NotifySomethingInvoked() { /* SomethingInvoked?.Invoke(...); */ }
}

对于 C# 中的其他程序元素,我使用(您可以)使用以下可选规则:

  1. 始终使用您的语言的相同字符大小写(UpperCamelCase 或 lowerCamelCase)!
  2. 始终遵循编程语言的命名约定/规则!(请参阅/分析/复制框架中的命名!)
  3. 我使用前缀命名,当且仅当名称不违反规则 0 和 1,
  • like: "p" + ParameterName(为了更好地识别局部变量和参数
  • 或:“m”+ MemberVariableName(为了更好地识别局部变量和成员变量。
  • 或:“I”+ InterfaceName(如:IDeserialize、IXmlConvert、...)
  • 或:“A”+AbstracClassName(如:ADeserializer、AXmlConvert、...)
  • 或:“E”+ EnumerationName(如:EState、EErrorCode、EMemberType、...)
  • 或:“S”+ 静态变量名称
  • 和: ALL_UPPER_CASE 用于:
    • 编译时常量“public const double MY_CONST = -1.23;”
    • 运行时常量:“public static readonly MyClass MY_CLASS = new MyClass()...”)
于 2021-02-22T10:32:55.853 回答