2014-02-15 51 views
3

據PostSharp文檔,一方面繼承應該是中支持其他:PostSharp和方面繼承通過層次

參數或抽象的,虛擬或接口方法的返回值

但在我如果組合這些支持的元素,它似乎不支持繼承。我有這樣最少的代碼來重現問題:

public interface IData { } 

public interface ITest 
{ 
    void DoSomething([Required] IData data); 
} 

public abstract class AbstractTest : ITest 
{ 
    public abstract void DoSomething(IData data); 
} 

public class Test : AbstractTest 
{ 
    public override void DoSomething(IData data) 
    { 
     throw new NotImplementedException(); 
    } 
} 

建設這個代碼結尾:

PostSharp.Patterns.Contracts.RequiredAttribute「不能應用於 方法 」 PostSharpInheritance.AbstractTest.DoSomething (PostSharpInheritance.IData)@data」 ,因爲它是抽象的。

如果我擺脫interfac的Required屬性e抽象方法彙編將成功。如果我在接口和抽象方法中都放置Required屬性,我會得到相同的錯誤。

我該如何在接口上放置屬性(契約)而不放棄在實現該接口的類層次結構中使用抽象類的選項?

回答

1

該問題的示例代碼應按照文檔中的描述進行工作。該問題是由PostSharp代碼中的一個錯誤引起的,PostSharp代碼已向PostSharp團隊報告。該修補程序將在即將發佈的3.1版本中實現。

更新:該bug已在PostSharp版本3.1.33中修復。