2015-02-11 107 views
2

這可能是一個愚蠢的問題,但這裏有。調用另一種方法時調用的方法

我有以下問題:

public class MyBaseClass 
{ 
    public void SomethingAwesome() 
    { 
     //Awesome stuff happens here, but only when the Something() method 
     //is called in the other classes. 
    } 
} 

public class SomeClass : MyBaseClass 
{ 
    public void Something() 
    { 
     //Something happens here 
    } 
} 

public class SomeOtherClass : MyBaseClass 
{ 
    public void Something() 
    { 
     //Something else happens here 
    } 
} 

MyBaseClass具有需要當東西()方法被稱爲在從它繼承的類被稱爲方法。

這背後的想法是,我需要記錄何時這種方法被稱爲許多無聊的企業的原因。我寧願有一個基類,它會在調用方法時自動進行審覈,而不是由開發人員自己調用方法。

可以這樣做嗎?如果是這樣,怎麼樣?

我已經考慮過部分方法,但這需要具有相同名稱的類,這在這種情況下是不可能的。

回答

6

這聽起來像你想的template method pattern

public abstract class MyBaseClass 
{ 
    public void Something() 
    { 
     // Code from SomethingAwesome here, or keep SomethingAwesome 
     // separate and call it from here 
     SomethingImpl(); 
    } 

    protected abstract void SomethingImpl(); 
} 

public class SomeClass : MyBaseClass 
{ 
    protected override SomethingImpl() 
    { 
     // Something happens here 
    } 
} 

這是假設你MyBaseClass很高興有公共Something方法,當然 - 如果它不聲明Something(以某種方式)那麼派生類中的兩個Something方法是不相關的。

+0

這是有些什麼我後,但是抽象SomethingImpl()需要有一個實現。我所追求的是SomethingImpl()在SomeClass中被調用,並在基類中調用。 – 2015-02-11 09:34:22

+0

@helb:*會發生 - 因爲調用子類代碼的唯一方法是通過基類方法。 – 2015-02-11 09:34:32

+0

@MikeEason:如果它是抽象的,則不需要實現。我並不真正關注你的評論,但這確實是*你想要的,我敢肯定。如果您不希望'MyBaseClass'是抽象的,那麼可以使'SomethingImpl'只是一個空的虛擬方法。 – 2015-02-11 09:35:36

1
public class MyBaseClass 
{ 
    public void SomethingAwesome() 
    { 
     // ... 
    } 

    public void Something() 
    { 
     SomethingImpl(); 
     SomethingAwesome(); 
    } 

    protected abstract void SomethingImpl(); 
} 
相關問題