2013-02-14 37 views
6
[DataContract] 
public class OrderSyncData : ISync 
{ 

    public OrderSyncData(Order o) 
    { 
     this.CurrentOrderStatus = o.DriverStatus; 
     this.StatusDescription = o.StatusDescription; 
     SyncTimestamp = o.SyncTimestamp; ???? 
    } 
    [DataMember] 
    public string CurrentOrderStatus { get; set; } 
    [DataMember] 
    public string StatusDescription { get; set; } 
    [DataMember]// I don't think I need these any more 
    public bool IsCanceled { get; set; } 
    [DataMember] 
    public bool IsResolved { get; set; } 
    [DataMember] 
    public bool IsPendingResponse { get; set; } 

    DateTime ISync.SyncTimestamp { get; set; } 
} 

如何設置ISync.SyncTimestamp的值?我試着投下「這個」。但它不工作如何設置構造函數中的屬性值(顯式接口實現)

回答

4

這應該工作:

((ISync)this).SyncTimestamp = o.SyncTimestamp; 

注意額外的括號周圍(ISync)this

3

你只需要投this

((ISync) this).SyncTimestamp = o.SyncTimestamp; 

或者你可以做它在兩個語句:

ISync sync = this; 
sync.SyncTimestamp = o.SyncTimestamp; 

基本上,顯式接口實現意味着該屬性只有當您在ISync的上下文中查看this時纔可用,而不是實現類。

1

這是因爲您明確實施了SyncTimestamp。顯式實現不能從類實例中訪問。爲什麼?因爲顯式實現允許您使用相同的成員名稱實現多個接口。

class Foo: IBar, IFoo 
{ 
    bool IBar.FooBar {get;set;} 
    bool IFoo.FooBar {get;set;} 
} 

然後寫this.FooBar是指實施?因此,無論是明確地將this轉換爲期望的接口,就像其他答案所建議的那樣,或者您沒有明確實現SyncTimestamp,但可以隱式執行:public DateTime SyncTimestamp { get; set; }。 然後this.SyncTimestamp將工作。

相關問題