10

コード内で領域を定義できる可能性があることを本当に感謝しています。読みやすさが非常に向上するからです。

とにかく、次のように、すべてのクラスで(すべての地域の事前定義された順序で)同じ規則を誰もが使用できるようにしたいと思います。

  • プライベート フィールド
  • コンストラクター
  • クラス プロパティ
  • イベント ハンドラ
  • 等...

この分割がどのように見えるか (どの領域が意味を持ち、どのような名前を持つべきか)、どの順序で定義する必要があるかについて、提案はありますか?

4

10 に答える 10

36

私の慣習はそれらを使用しないことです。

クラスが大きくなりすぎて、その大部分を領域で隠す必要がある場合は、クラスが複雑すぎるため、分割することをお勧めします。

于 2010-04-06T08:14:52.703 に答える
12

誰かがかつて、上記のような慣習を持つと言いました:

  • プライベート フィールド
  • コンストラクター
  • クラス プロパティ
  • イベント ハンドラ
  • 等...

それは、すべての皿、すべてのスプーン、すべてのナイフ、すべてのフォークが一緒に置かれたテーブルを設定するようなものです.

この問題に対する私の見解#regionは、関連するメソッド、イベント定義、およびプロパティを 1 つの領域にまとめることです。ただし、これをまったく行わなければならないということは、コードの臭い (クラスが大きすぎるか、実行する処理が多すぎる) を示している可能性がありますが、これは、クラスをより良いクラスにリファクタリングするための適切な第一歩です。

于 2010-04-06T08:13:41.277 に答える
7

領域を見るたびに、コードが生成されているか、リファクタリングが必要であると思います。

それらを使用することは避けてください。それらの必要性を感じた場合は、自分が行っていることを再検討し、クラスを小さなクラスに分割してみてください。最終的に、これはリージョンを使用するよりもアプリケーションの可読性に役立ちます。

于 2010-04-06T08:20:06.147 に答える
6

個人的には、コード領域をコード規則の一部にすることはお勧めしません。主な理由は、領域がコードを隠しているためです。これにより、次のような問題が発生する可能性があります。

  • 開発者は、ソース コードの重要な部分を見逃す可能性があります
  • 同じファイル内の LOC の平均量は増加する傾向があります

チームでコーディング スタイルの規則を適用することに関心がある場合は、Microsoft StyleCopをご覧ください。このツールは現在、C# でのみ機能することに注意してください。

于 2010-04-06T08:24:05.700 に答える
3

地域では必要ないと思います。それらは判読できません。クラスに金額コードが必要な場合(本当に必要ですか?)、「partial」クラスを使用してクラス論理ユニットを分割できます。

于 2010-04-06T09:55:02.130 に答える
3

次のリージョンを使用します。

Private Member Variables
Constructor
Public Properties
Private Methods
Public Methods
Events

その理由は、コードの編成が改善されたためです。
私は 2000 行以上のコードを含む可能性のあるファイルを扱っており、リージョンなしでコードを維持することは非常に困難です。

于 2010-04-06T09:10:11.930 に答える
3
#region Lotsa boring code and lookup tables

私はそれを使用して画面の領域を節約します:)

于 2010-04-06T08:18:08.547 に答える
2

それらは別の形式のコメントと考えてください。正式なチェックが実行されていないコードに追加情報が混在しています。したがって、コードが時代遅れになる可能性があります。

そのため、コード内で既に記述されているコメントやリージョン ディレクティブを決して複製しないでください。

追加情報のみを追加します。

特に、領域を使用して、特定のメンバーがプロパティやイベントなどであるという事実を言い換えても、まったく意味がありません。最も一般的な問題は、「プライベート メソッド」の領域を作成し、そのうちの 1 つを編集して公開することです。ここで移動する必要があります。つまり、古いバージョンとの差分では、単純な変更を識別するのがはるかに難しくなります。

于 2010-04-06T08:16:55.697 に答える
1

あなたはこれに興味があるかもしれませんか

プロジェクト全体で一貫している限り、どの順序で記述してもあまり問題にはならないと思います。また、それらを過度に使用しないように非常に注意してください (したがって、最初のリンクです!)。

1 行のコードしか隠していない閉じたコンストラクター領域を見つけることほど悪いことはありません。

最終的には個人の好みの問題だと思います。私が言ったように、一貫性が鍵です!

于 2010-04-06T08:15:34.467 に答える
1

私は常に使用する VS 2008 用の独自のリージョン コード スニペットを作成しました。

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
    <Header>
        <Title>#class region</Title>
        <Shortcut>#classregion</Shortcut>
        <Description>Code snippet for #region in classes</Description>
        <Author>Simon Linder</Author>
        <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
            <SnippetType>SurroundsWith</SnippetType>
        </SnippetTypes>
    </Header>
    <Snippet>
        <Declarations>
            <Literal>
                <ID>name</ID>
                <ToolTip>Region name</ToolTip>
                <Default>MyRegion</Default>
            </Literal>
        </Declarations>
        <Code Language="csharp">
            <![CDATA[#region Variables
                    $selected$ $end$
                #endregion

            #region Construction/Destruction
                    $selected$ $end$
                #endregion

            #region Properties
                    $selected$ $end$
                #endregion

            #region Public Methods 
                    $selected$ $end$
                #endregion

            #region Private/Proteced Methods
                    $selected$ $end$
                #endregion]]>
        </Code>
    </Snippet>
</CodeSnippet>

ご覧のとおり、 、 、 、およびメソッドに領域を使用VariablesConstruction/DestructionPropertiesPublicますPrivate。と呼ばれるプライベート リージョンに別のサブリージョンを追加することがよくありeventsます。領域の順序もStyleCopでうまく機能します。

于 2010-04-06T08:20:12.053 に答える