0

ネットで検索しましたが、部分クラスの定義中に制約/ルールに関する有用な情報が見つかりませんでした。つまり、すべてのクラスに部分的な名前を付けることができますか、または一部のクラスに名前を付けることはできませんか? 静的クラスは部分的である可能性があり、これらすべてのものを説明してください。この質問とインタビューで質問されましたが、答えがありませんでした。これについて詳しく知りたいのですが、msdnで次のような部分メソッドを定義するためのルールを見つけたことがあります

 1. Partial method declarations must begin with the contextual keyword
 2. partial  and the method must return void. 
 3. Partial methods can have ref  but not out  parameters.
 4. Partial methods are implicitly private, and therefore they cannot be virtual. 
 5. Partial methods cannot be extern , because the presence of the body determines whether they are defining or implementing.
 6. Partial methods can have static and unsafe  modifiers.
 7. Partial methods can be generic.
 8. Constraints are put on the defining partial method declaration, and
    may optionally be repeated on the implementing one.
 9. Parameter and type parameter names do not have to be the same in the
    implementing declaration as in the defining one.
 10. You can make a delegate  to a partial method that has been defined and implemented, but not to a partial method that has only been defined.

クラスにもルールはありますか...

ありがとう

4

2 に答える 2

0

正直なところ、私は部分的なキーワードを絶対に避けたいと思います。これは、VS / MSがコードを自動生成する方法を望んでいたにもかかわらず、開発者が独自のカスタムロジックを追加できるようにするために存在します。

主にWin/WebForms。コントロールを画面にドラッグアンドドロップし、プロパティウィンドウを使用してオブジェクトを構成できます。次に、「コードビハインド」を開いて、WYSIWYGを介して追加したすべてのコントロールに完全にアクセスできる独自のロジックを追加できます。

それ以外は、パーシャルを使用すると、解決するよりも多くの問題を簡単に作成できます。オブジェクト指向コードのように見える手続き型の神のクラスを作成するのは簡単すぎます。

于 2012-06-21T10:46:11.630 に答える
0

クレジットは C# 仕様にあります。

部分修飾子は、型宣言の追加部分が他の場所に存在する可能性があることを示しますが、そのような追加部分の存在は必須ではありません。部分修飾子を含めることは、単一の宣言を持つ型に対して有効です。

部分型のすべての部分は、コンパイル時に単一の型宣言にマージできるように、一緒にコンパイルする必要があります。部分型では、特に、既にコンパイルされた型を拡張することはできません。

ネストされた型は、部分修飾子を使用して複数の部分で宣言できます。通常、包含型は partial を使用して宣言され、ネストされた型の各部分は包含型の別の部分で宣言されます。

部分修飾子は、デリゲートまたは列挙宣言では許可されていません。

属性

部分型の属性は、各部分の属性を不特定の順序で組み合わせることによって決定されます。属性が複数のパーツに配置されている場合は、型で属性を複数回指定することと同じです。たとえば、次の 2 つの部分があります。

[Attr1, Attr2("hello")]
partial class A {}

[Attr3, Attr2("goodbye")]
partial class A {}

次のような宣言と同等です。

[Attr1, Attr2("hello"), Attr3, Attr2("goodbye")]
class A {}

型パラメーターの属性は、同様の方法で結合されます。

修飾子

部分型宣言にアクセシビリティ仕様 (public、protected、internal、および private 修飾子) が含まれる場合、アクセシビリティ仕様を含む他のすべての部分と一致する必要があります。部分型のどの部分にもアクセシビリティ仕様が含まれていない場合、その型には適切な既定のアクセシビリティが与えられます (§3.5.1)。

型パラメーターと制約

ジェネリック型が複数の部分で宣言されている場合、各部分で型パラメーターを指定する必要があります。各パーツには、同じ数の型パラメーターと、各型パラメーターの同じ名前が順番に含まれている必要があります。

部分ジェネリック型宣言に制約 (where 句) が含まれる場合、制約は、制約を含む他のすべての部分と一致する必要があります。具体的には、制約を含む各パーツには、同じ型パラメーターのセットに対する制約が必要であり、型パラメーターごとに、プライマリ、セカンダリ、およびコンストラクターの制約のセットが同等である必要があります。同じメンバーが含まれている場合、2 つの制約セットは同等です。部分ジェネリック型のどの部分でも型パラメーターの制約が指定されていない場合、型パラメーターは制約されていないと見なされます。

partial class Dictionary<K,V>
    where K: IComparable<K>
    where V: IKeyProvider<K>, IPersistable
{
    ...
}
partial class Dictionary<K,V>
    where V: IPersistable, IKeyProvider<K>
    where K: IComparable<K>
{
    ...
}
partial class Dictionary<K,V>
{
    ...
}

制約を含む部分 (最初の 2 つ) は、同じ型パラメーターのセットに対して同じ主制約、副制約、およびコンストラクター制約の同じセットをそれぞれ効果的に指定するため、正解です。

于 2012-06-21T10:48:16.920 に答える