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方法,但我不知道我怎么能这样做,如果这不运行。
您还有其他想法如何运作吗?或者这是我完全错误的尝试吗?
答案 0 :(得分:1)
替换
((AbstractGenericClass<T>) Activator.CreateInstance(typeof(T))).Host();
与
Host();
因为Host()
是一个抽象方法,Program.Start()
将在派生类中调用此方法的实现,因此它将从Host()
执行Program
的实现。
答案 1 :(得分:0)
您不能将CreateInstance的结果转换为AbstractGenericClass,因为它的类型为AnotherClass,它不是从AbstractGenericClass派生的,并且无论如何都没有Host方法。听起来你想要的是获得一个类型为Program的对象并在其上调用Host。