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
}

私の混乱は、「デリゲート」修飾子で「SomethingEventHandler」タイプを定義して「デリゲート」と呼び、次に「イベント」修飾子でフィールドのようなイベントを定義して「イベントハンドラー」と呼び、反応するメソッドを呼び出すことです。イベント「イベント」へ。

私のネーミングは正しいですか?

カスタムイベントなどを作成して使用することはできますが、コンポーネントの名前と他の人がそれらをどのように編成するかを理解するのにいくらかの助けが必要です.

ありがとう。

4

2 に答える 2

1

.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 に違反していない場合にのみ、命名にプレフィックスを使用します。
  • のように: "p" + ParameterName (ローカル変数とパラメーター間の認識を向上させるため)
  • または: "m" + MemberVariableName (ローカル変数とメンバー変数の認識を向上させるため。
  • または: "I" + InterfaceName (例: IDeserialize、IXmlConvert、...)
  • または: "A" + AbstracClassName (ADeserializer、AXmlConvert など)
  • または: "E" + EnumerationName (例: EState、EErrorCode、EMemberType、...)
  • または: "S" + StaticVarialeNames
  • ALL_UPPER_CASE:
    • コンパイル時定数 "public const double MY_CONST = -1.23;"
    • ランタイム定数: "public static readonly MyClass MY_CLASS = new MyClass()...")
于 2021-02-22T10:32:55.853 に答える