2

基本抽象クラス「BaseEngine」と子クラス「Engine : BaseEngine」があります。

エンジンには、「インスタンス」と呼ばれるタイプ エンジンのパブリック プロパティがあります。

public Engine Instance
{ get; set; }

このインスタンスを BaseEngine から取得したいと考えています。私はすでにこれを試しました:

public abstract BaseEngine<T> where T : class
{
    public T Instance { get; set; }
}

public Engine : BaseEngine<Engine>

しかし、それは再帰を作成します。

何か提案はありますか?ありがとうございました!

アップデート

BaseEngine クラスから派生したクラスがたくさんあります。各子クラスには、実質的に同じことを行うメソッドがあります。これらのメソッドを基本クラスに移動して、変更があった場合のコードの変更を少なくしようとしていました。私が頼んだことはできないので、これを行う別の方法を見つけようとします。返信ありがとうございます。

4

2 に答える 2

0

Instanceプロパティを子クラスに型付けすることはできません。BaseEngine代わりに返す必要がありますが、そのプロパティのインスタンスを返すことができますEngine。呼び出し元は必要に応じてキャストするだけです。

public abstract class BaseEngine
{
    public BaseEngine Instance {get; private set;}
}

public class FarrariEngine : BaseEngine
{
    public FarrariEngine()
    {
        this.Instance = this; //This line is VERY weird to me.
    }
}

public class LawnmowerEngine : BaseEngine
{
    public LawnmowerEngine ()
    {
        this.Instance = this;
    }
}


public class Program
{
    public static Main(string[] args)
    {
        var farrari = new FarrariEngine();
        Engine currentEngine = farrari.Instance. //Works
        FarrariEngine currentFarrariEngine = (FarrariEngine)farrari.Instance. //Also works.

        var lawnMower = new LawnmowerEngine();
        Engine currentEngine = lawnMower.Instance. //Works
        LawnmowerEngine currentLawnmowerEngine = (LawnmowerEngine)lawnMower.Instance. //Also works.
    }
}

これは .NET フレームワークでは一般的です。 WebRequestの子を見てください。すべてのようなもの基本GetResponse()を返します。

ただし、親クラスの型を返すプロパティ (特に と呼ばれるInstance) があるのは非常に奇妙です。プロパティは静的であるはずで、シングルトン パターンを実行しようとしていますか?

于 2013-09-26T13:54:32.677 に答える