VB.NETでジェネリッククラスのファクトリを作成したいのですが、問題が発生しています。 (IPersistentObjectとしてT OF) IPersistentObjectとIPManagerBaseVB.NETのジェネリックのファクトリメソッド
ロジックはperistentオブジェクトの種類ごとに、私は、対応するマネージャクラスハンドリングクエリロジックを有することである:私は何
2つのインターフェイスです。
public class PManagerBase(Of T as IPersistentObject) Implements IPManagerBase(of T)
だから、今、現実の世界で、私は永続的なタイプ「プエル」とそれに対応する管理者は、次のように宣言している:
は今、私はこのような基底クラスが持つ
public class PUserManager implements PManagerBase(Of PUser)
私は約100の永続オブジェクトと対応するマネージャクラスを持っています。
は今、私はこのように呼び出します。工場、(詳細を削除)したい:私はこの
public class MyFactory
public shared function CreateManager(Of T as {PManagerBase(Of IPersistentObject), New}) as T
return new T()
end function
end class
ように私の工場を作成してい
MyFactory.CreateManager<PUserManager>()
を偉大なルックス。
今、私はそれを呼び出すようにしたい:
Dim myManager = MyFactory.CreateManager<PUserManager>()
どうなりますか? "PUserManagerはPManagerBase(Of IPersistentObject)を実装または継承しません"というコンパイルエラーが発生します。私はドイツ語でメッセージを受け取るので、これは無料の翻訳です。
これを実行するには何を変更する必要がありますか?
public class MyFactory
public shared function CreateManager(Of T as {PManagerBase(Of PUser), New}) as T
return new T()
end function
end class
しかし、それはプエルオブジェクトの管理者に対してのみ機能するので、その後の利益が、なくなっている:私はこのような私の工場を宣言した場合 それは動作します。
より良い解決策は、この作品
public class MyFactory
public shared function CreateManager(Of T as {PManagerBase(Of U), New}, U as IPersistentObject) as T
return new T()
end function
end class
ですが、私は今、このように私のファクトリメソッドを呼び出す必要があります:これは冗長であり、Iドン以来
Dim myManager = MyFactory.CreateManager<PUserManager, PUser>()
私はこれが好きではありません関数内にUが全く必要ありません。その宣言では、PUserManagerはPUserに結びついています。
良い方法がありますか? PUserManagerがPManagerBase(Of IPersistentObject)から継承しないのはなぜですか?