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 回答
0

您不能将 CreateInstance 的结果转换为 AbstractGenericClass,因为它是 AnotherClass 类型,它不是从 AbstractGenericClass 派生的,也没有 Host 方法。听起来您想要的是获取 Program 类型的对象并在其上调用 Host。

于 2013-09-19T21:24:52.387 回答