2014-09-01 58 views
0

我有這樣兩類:C#實現抽象類的方法:我必須做出一個投?

public abstract class Loop : Events 
{ } 

public class SimpleLoop : Loop 
{ 
    public Sound sound; 
    public SimpleLoop simple; 
} 

而且我有一個抽象的方法,這個抽象類:

public abstract class AbstractParser 
{ 
    public abstract Loop ParseLoop(); 
} 

並擴展了以前的類並實現抽象方法這個其他類:

public class Parser2 : AbstractParser 
{ 
    public override Loop ParseLoop() 
    { 
     //not important stuff 
     simpleLoop.simple = (SimpleLoop) ParseLoop(); 
     return simpleLoop; 
    } 
} 

現在,我的問題是:有一種方法,以避免內部simpleLoop.simple = (SimpleLoop) ParseLoop()投?

很顯然,我沒有對整個類,所以不要問自己什麼是這個爛攤子的目的:d感謝您的幫助!

+2

你有沒有考慮泛型? – 2014-09-01 16:49:02

回答

5
public class Parser2 : AbstractParser 
{ 
    public override Loop ParseLoop() 
    { 
     return ParseLoopImplementation(); 
    } 

    private SimpleLoop ParseLoopImplementation() 
    { 
     //not important stuff 
     simpleLoop.simple = ParseLoopImplementation(); 
     return simpleLoop; 

    } 
} 

注意。你的代碼會產生一個StackOverflowException,因爲它是在所有路徑上遞歸的。

+0

哇,這麼SIMPL解決,我不認爲它像一個白癡!然而,關於StackOverflowException ...也許becuse到底'//並不重要stuff'是非常重要的東西(和解決像你寫的一個問題;))。 – TwistAndShutter 2014-09-01 17:18:25

0

試試這個:

public class SimpleLoopParser<T> : AbstractParser<T> 
{ 
    protected override T ParseLoopImplementation() 
    { 
     simpleLoop.simple = //parse here; 
     return simpleLoop; 
    } 
} 

public abstract class AbstractParser <T> 
{ 
    public override T ParseLoop() 
    { 
     return ParseLoopImplementation(); 
    } 

    protected abstract Loop ParseLoopImplementation(); 
} 

而像這樣調用:

SimpleLoop simpleLoopParsed = new SimpleLoopParser<SimpleLoop>().ParseLoop(); 
相關問題