2010-04-01 40 views
3

我有兩個接口,IAuditable和ITransaction。數據綁定期間未綁定繼承的屬性

public interface IAuditable{ 
    DateTime CreatedOn { get; } 
    string CreatedBy { get; } 
} 

public interface ITransaction : IAuditable { 
    double Amount{ get; } 
} 

而一個實現ITransaction的類調用Transaction。

public class Transaction : ITransaction{ 
    public DateTime CreatedOn { get { return DateTime.Now; } } 
    public string CreatedBy { get { return "aspnet"; } } 
    public double Amount { get { return 0; } } 
} 

當我將一個ITransactions列表綁定到一個數據網格並使用自動創建列時,只有數量被綁定。沒有看到CreatedBy和CreatedOn。有沒有辦法在數據綁定過程中讓這些值可見?

+0

IDK如果PropertyDescriptor可能是一個有用的類來查看,因爲它可以用來「告訴」綁定有哪些屬性可用於綁定。我已經使用了它已經有一年了,所以我不能肯定地說這是你需要什麼或如何使用它。 – AaronLS 2010-04-01 21:30:33

+0

這很有趣。綁定事務對象工作得很好,但作爲ITransaction沒有綁定。如果您將交易轉換爲ITransaction,您仍然可以訪問所有屬性,因爲ITransaction從IAuditable繼承,但綁定算法不會提取這些屬性。有趣。 – 2010-04-01 21:37:30

+0

@Anthony - 這是接口「繼承」的常見誤解。接口實際上並不像類所做的那樣繼承。 – womp 2010-04-01 22:07:26

回答

5

接口不定義實現 - 它們只定義所需的附加接口。

這意味着什麼類的ITransaction也需要執行IAuditable。這並不意味着ITransaction也定義了IAuditable的屬性。

因此,鑄造一些東西到ITransaction並沒有定義它具有IAuditable屬性。這只是簡單地向合同表明「我可以執行ITransaction中的所有方法」。實施ITransaction也需要實施IAuditable的事實並不意味着ITransaction的定義有任何不同。

Phil Haack對此有a great blog post

如果您想要繼承所有屬性,您應該使用「Is-A」關係(即抽象類),而不是「Can-do」關係(接口)。