0

私は問題があります。抽象クラス AbstractGenericClass の Program.cs からオーバーライド Host メソッドを開始しようとしています。

public abstract class AbstractGenericClass<T>
{
    protected abstract void Host();

    public static void Start()
    {
        //add additional logic for all classes that use this

        try
        {
            ((AbstractGenericClass<T>) Activator.CreateInstance(typeof(T))).Host();

            Console.WriteLine("Works!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Don't Works!");
        }
    }
} 

class AnotherClass
{
    public void DoSomething()
    {
        //NOP
    }
}

class Program
    : AbstractGenericClass<AnotherClass>
{
    static void Main(string[] args)
    {
        Program.Start();

        Console.ReadLine();
    }

    protected override void Host()
    {
        Console.WriteLine("Host running...");
    }
}

ここに、私が何を意味するかを示すために作成したすべてのサンプル クラスを追加します。((AbstractGenericClass) Activator.CreateInstance(typeof(T))).Host(); の行 InvalidCastException のためにプログラムをクラッシュさせます。Host メソッドを呼び出すことができる必要がありますが、これが機能しない場合、どのようにこれを行うことができるかわかりません。

これがどのように機能するか、他に考えがありますか?それとも、これは私が試したことは完全に間違っていますか?

4

2 に答える 2

1

交換

((AbstractGenericClass<T>) Activator.CreateInstance(typeof(T))).Host();

Host();

Host()は抽象メソッドであるためProgram.Start()、派生クラスでこのメソッドの実装を呼び出すため、Host()fromの実装を実行しProgramます。

于 2013-09-19T20:50:37.543 に答える