2

保護されたコンストラクターを持つクラスと としてマークされたクラスの違いは何MustInheritですか? (私は VB.Net でプログラミングしていますが、おそらく c# にも同様に当てはまります)。

私が尋ねる理由は、コンストラクターを共有/静的メソッドに変換したい抽象クラスがあるためです。(いくつかの制約を追加するには)。

共有関数でインスタンスを作成できないため、これを行うことはできません。

MustInheritキーワードを削除することを考えています。これで違いはありますか?

ありがとう。

到着予定時刻:

MustInherit キーワードを削除すると、非常に便利な MustOverrides を含めることができなくなります。

それを念頭に置いて、私の問題を回避する方法はありますか?

ETA2:

明確にするために、MustInherit キーワードを削除しない限り、以下を実行できませんか?

Public MustInherit MyBaseClass

  Private Sub New() 
  End Sub 

  Protected Function CreateInstance(ParmList) As MyBaseClass
    If ParmList is Ok Then Return New MyBaseClass()
  End Function 

End Class
4

3 に答える 3

1

リフレクションを使用してコンストラクターを呼び出し、クラスをインスタンス化できますが、この方法でクラスをProtectedインスタンス化することはできません。クラスでメソッドをabstract宣言できますが、コンストラクターは派生クラスに何も強制できません。MustOverrideMustInheritProtected

概念的に抽象化されたクラスは、常に として宣言する必要がありますMustInherit。コンストラクターは、派生クラスに追加の機能を提供するためにいくつかのオーバーロードProtectedと共に提供する場合に役立ちます。Public

于 2009-07-05T14:32:07.140 に答える
0

クラスに保護されたコンストラクターしかない場合でも、それ自体で立つことができるクラスのインスタンスを持つことは可能です。リフレクションを使用するなど、保護されたコンストラクターを回避する必要があります。

クラスが MustInherit としてマークされている場合、そのクラスのインスタンスを単独で持つことはできません。インスタンスは、派生/継承されたクラスからのみ作成できます。

于 2009-07-05T14:39:11.213 に答える