2012-11-07 99 views
14

我包裝調用的API以及我的大多數方法在他們的第一線:是否有像c#的python裝飾器?

if (!Gree.Authorizer.IsAuthorized()) 
{ 
    return; 
} 

在Python中我會裝點這些方法的東西,如@login_required

你會用什麼來重構c#中那種類型的邏輯?

回答

6

您正在尋找稱爲面向方面編程(Aspect Oriented Programming)的更一般編程方法的子集。

C#似乎支持它通過幾個庫,也可以推出自己的,這要感謝一些CLR功能。請參閱Aspect Oriented Programming using .NET,其中涵蓋了其基本原理(我將鏈接文章的部分內容討論C#的具體內容,但如果您正在尋找像PostSharp這樣的現成解決方案,其餘部分同樣有趣,如另一答案中所述)。

+0

感謝您的鏈接。我將檢查這是否適用於'Unity3d'。 – Macarse

4

您可以使用C#的任何AOP工具,例如this之一。

隨着PostSharp,軟件開發人員可以封裝實現 模式成稱爲方面類,這些方面應用到他們的 使用代碼自定義屬性。

+0

PostSharp是一個'.exe'。我想從使用Mono的'Unity3d'中使用它。 – Macarse

2

我不熟悉Python,但它似乎你正在尋找「屬性」(MSDN),(它非常類似於Java註釋)。

尤其是,.NET提供了「AuthorizeAttribute」,它完全符合你的要求(也許更多一點)。雖然你不在.NET之下,但是你仍然可以在實現中實現一些東西。

+2

'屬性'只是元數據附加到類/方法等,他們自己什麼都不做。您需要使用另一種工具,它使用反射讀取這些元數據,並執行所有AOP工具所需的所需內容 – Ankur