2013-09-19 4 views
0

У меня проблема. Я пытаюсь запустить переопределяющий метод Host из Program.cs в абстрактном классе AbstractGenericClass.Вызов метода переопределения в абстрактном классе

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

Вы не можете отличить результат от CreateInstance как AbstractGenericClass, потому что он имеет тип AnotherClass, который не является результатом AbstractGenericClass и в любом случае не имеет метода Host. Похоже, что вы хотите получить объект типа Program и вызвать Host на этом.

1

Заменить

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

с

Host(); 

Поскольку Host() является абстрактным методом, Program.Start() будем называть реализацию этого метода в производном классе, так что он будет выполнять реализацию Host() от Program ,

Смежные вопросы