あなたの質問のように聞こえますが、違いは何ですか
partial class Foo
{
PART ONE
}
partial class Foo
{
PART TWO
}
と
astract class FooBase
{
PART ONE
}
partial class Foo : FooBase
{
PART TWO
}
それらはいくぶん似ているように見え、場合によっては前者の代わりに後者の構文を使用できますが、後者のスタイルには少なくとも 2 つの問題があります。
-1- 型FooBase
は、それから派生するはずの具体的な型のアイデンティティを知っている必要があり、 type ではなく常にその型の変数を使用する必要がありますFooBase
。これは、2 つのタイプの間の不快なほど密接な結合を表しています。
-2- typeFoo
が public の場合、 type も public でFooBase
ある必要があります。のすべてのコンストラクターが であっFooBase
てもinternal
、外部コードが ; から派生したクラスを定義することは可能ですが、 ;FooBase
ではありませんFoo
。そのようなクラスのインスタンスを構築するのは困難ですが、不可能ではありません。
派生型が基本型の可視性を拡張できる場合、これらの問題はそれほど問題にはなりません。正確に 2 回出現する「使い捨て」識別子と見なすことができます。1FooBase
回はその宣言で、もう 1 回は の宣言行でFoo
、すべてFooBase
がFoo
変装したものになると考えます。型キャストなしでインスタンス メンバーをFooBase
使用できないという事実は面倒かもしれませんが、コードの適切な分割を促進することにもなります。ただし、基本型の可視性を拡張することはできないため、抽象クラスの設計は厄介に見えます。Foo
this