在抽象类中调用重写方法
本文关键字:重写 方法 调用 抽象类 | 更新日期: 2023-09-27 18:31:57
我有一个问题。我尝试从抽象类AbstractGenericClass中的Program.cs启动覆盖主机方法。
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)))的行。主机();由于InvalidCastException而使程序崩溃。必须可以调用 Host 方法,但如果这不起作用,我不知道我怎么能做到这一点。
您还有其他想法吗?还是我尝试的完全错误?
替换
((AbstractGenericClass<T>) Activator.CreateInstance(typeof(T))).Host();
跟
Host();
因为Host()
是一个抽象方法,Program.Start()
会在派生类中调用这个方法的实现,所以它会从Program
执行Host()
的实现。
您不能将 CreateInstance 中的结果转换为 AbstractGenericClass,因为它的类型是 OtherClass,它不是从 AbstractGenericClass 派生的,并且无论如何都没有 Host 方法。 听起来你想要的是获取一个 Program 类型的对象并调用 Host。