2

StyleCop のルール SA1201 によると、クラス内の要素は正しい順序で表示される必要があります。
順序は次のとおりです。

 Fields  
 Constructors  
 Finalizers (Destructors)  
 Delegates  
 Events  
 Enums  
 Interfaces  
 Properties  
 Indexers  
 Methods  
 Structs  
 Classes 

Interface にはメソッド、イベント、プロパティなどを含めることができるため、Interfaces 部分を除い
てすべて問題ありません。このルールを厳密に適用したい場合は、Interface のすべてのメンバーを 1 か所に配置する必要はありません。これは非常に便利です。StyleCop のヘルプによると、この問題はクラスを部分クラスに分割することで解決できます。

例:

/// <summary>
/// Represents a customer of the system.
/// </summary>
public partial class Customer
{
    // Contains the main functionality of the class.
}

/// <content>
/// Implements the ICollection class.
/// </content>
public partial class Customer : ICollection
{
    public int Count 
    { 
        get { return this.count; }
    }

    public bool IsSynchronized 
    { 
        get { return false; }
    }

    public object SyncRoot 
    { 
        get { return null; }
    }

    public void CopyTo(Array array, int index)
    {
        throw new NotImplementedException();
    }
}

この問題に対する他の良い解決策はありますか?

4

3 に答える 3

3

(*)明示的なインターフェイスの実装は (イベントの下で) グループ化する必要があり、ルールは暗黙的なインターフェイスの実装にのみ適用されると思います。インターフェイスを暗黙的に実装している場合、それはクラスのパブリックインターフェイスの一部になるため、インターフェイスのメンバーは論理的にクラスの一部でもあるため、ルールはある程度理にかなっていると思います(したがって、クラスの残りの部分からそれらを分離します)。

一方、明示的な実装を使用している場合は、インターフェイスをクラスの一部にせずに実装したいと言っています。この場合、他のメンバーとは別に保持する方が理にかなっています。

したがって、暗黙的なインターフェイスの実装をできるだけ頻繁に使用することをお勧めします (それが理にかなっている場合)。明示的な実装では、提案された順序を使用する方が不便に感じないかもしれません。

とはいえ、インターフェイスのメンバーをグループ化する方がよいと思われる場合は、部分クラスを使用する代わりに StyleCop ルールを無視することをお勧めします (これは私にはクレイジーな回避策のように思えます)。結局のところ、StyleCop はアドバイスを提供するだけです...

(*) 私の仮定が間違っていれば、おそらくルールを無視するでしょう :-)。

于 2010-04-10T16:12:07.207 に答える
1

個人的には、そのようなルールに大きな価値があるとは思いませんが、それは私だけです。しかし、ネストされた型について話しているように聞こえます(「インターフェースの実装」ではなく「インターフェース」と言っています)、つまり

class Foo {
    //...
    public interface IBar {...}
    //...
}

(他の比較は列挙型であるため)

その場合は、提案どおりに注文できます。私はしません;-p(ネストされたインターフェースはとにかくまれです)

「明示的なインターフェイスの実装」を意味する場合は、それらをこの場所に置いて、既に定義されているように内部的に並べ替えることができます。

于 2010-04-10T16:10:23.230 に答える
0

部分クラスまたはそのルールをオフにする以外に、独自のルールを記述してそのルールを置き換えることもできます。

于 2010-04-10T17:58:54.967 に答える