2011-06-12 21 views
0

我希望能夠做的是將屬性添加到類的特定方法,以便那些如此裝飾的方法可以在其中調用正文中的語句我喜歡的方式。啓用以特定方式調用的類方法

例如,請考慮這種情況在C#:

public class A 
    { 
    public A() {} 

    [CallTwice()] 
    public void Func1() 
    { 
     Console.WriteLine("Calling Func1()."); 
    } 

    public void Func2() 
    { 
     Console.WriteLine("Calling Func2()."); 
    } 
} 

我想這樣一個場景,如果我這樣做:

public static void Main() 
{ 
    A a = new A(); 
    a.Func1(); 
    a.Func2(); 
} 

我會得到這樣的輸出:

Calling A.Func1(). 
Calling A.Func1(). 
Calling A.Func2(). 

即我的裝飾Func1使它被調用兩次。

我想知道的是,我如何編寫代碼來利用我給Func1的具體裝飾,以便我知道兩次調用它的正文語句。這在C#中可能嗎?

+0

我很好奇你在做什麼?表面上,它只是使代碼更難以遵循。目標是什麼? – Khepri 2011-06-12 05:05:12

+0

我想知道是否有可能聲明地分離一個方法的實現從如何調用方法。這樣,如果我需要改變方法的調用方式,我只需要改變方法的實現屬性,而不是改變方法本身。 – 2011-06-12 16:24:34

回答

3

爲什麼不簡單地使Func1變得私人或受保護,並且製造不同的方法,調用Func1兩次?

public class A 
{ 
public A() {} 

public void Func1() 
{ 
    Func1Core(); 
    Func1Core(); 
} 

private void Func1Core() 
{ 
    Console.WriteLine("Calling Func1()."); 
} 

public void Func2() 
{ 
    Console.WriteLine("Calling Func2()."); 
} 
} 
+0

你甚至可以爲Func1指定參數,告訴它運行它多少次...... – PedroC88 2011-06-12 05:05:06

0

您可以通過遞減每次調用的計數變量來使Func1遞歸調用自身。

0

我不知道在這種情況下是否有幫助,但PostSharp允許您修飾具有特殊用途屬性的方法。

http://www.sharpcrafters.com/postsharp/documentation

+0

是的,我曾經想過面向方面編程作爲解決這個問題的方法。但它看起來像你所建議的只允許我爲該方法添加額外的功能,而不是多次調用它。 – 2011-06-12 16:28:08