2009-09-11 108 views
2

這似乎在C#中以做工精細:如何在F#中爲getter和setter設置不同的屬性?

class A : System.Attribute { public A() {} } 

public class B 
{ 
    public int X 
    { 
     [A] get { return 1; } 
     [A] set { } 
    } 
} 

但在F#,因爲我嘗試設置屬性的getter和setter屬性,我無法迴避的一個語法錯誤:

type A() = inherit System.Attribute() 

type B = 
    member this.X 
     with [<A>] get() = 1 
     and [<A>] set (x : int) =() 

有一種方法來做到這一點?

我的目標是在獲取者和設置者上設置不同的屬性。

+0

這現在看起來像預期的那樣工作,雖然我不確定它何時被修復。 – kvb

回答

2

MSDN-documentation建議如下:

type A() = inherit System.Attribute() 

type B =  
    [<A>] 
    member this.X with get() = 1 
    [<A>] 
    member this.X with set (x : int) =() 

...但根據.Net Reflector它似乎並沒有產生預期的IL。對我來說看起來像一個bug。

編輯:或者在.Net Reflector的錯誤...

編輯2:提交[email protected]

+0

謝謝!的確,我似乎無法通過反射來檢索setter屬性。我正在聯繫fsbugs @ ... – t0yv0

+0

我幾秒鐘前就這樣做了...... –

+0

儘管存在文檔,但仍然無法正常工作,而@ t0yv0的初始嘗試現在可以正常工作。 – kvb

1

爲了記錄在案的Bug報告,從F#團隊得到的答覆是:

Right now (and also in the upcoming Beta2), attributes targeting property getters and setters specifically are not supported.

相關問題