2013-02-14 8 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; } 
} 

Come impostare il valore di ISync.SyncTimestamp? Ho provato a lanciare il "questo". ma non funzionacome impostare il valore della proprietà nel costruttore (implementazione dell'interfaccia esplicita)

risposta

4

Questo dovrebbe funzionare:

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

Nota le parentesi aggiuntive attorno (ISync)this.

3

Hai solo bisogno di lanciare this:

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

o si potrebbe farlo in due prospetti:

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

In sostanza, l'implementazione dell'interfaccia esplicita significa che la proprietà è disponibile solo quando si visualizza this nel contesto di semplicemente ISync, non della classe di implementazione.

1

Questo perché hai implementato SyncTimestamp in modo esplicito. Non è possibile accedere a implementazioni esplicite da un'istanza di classe. Perché? Poiché l'implementazione esplicita consente di implementare più interfacce con lo stesso nome membro.

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

Poi la scrittura this.FooBar si riferisce a quale implementazione? Pertanto, puoi trasmettere esplicitamente l'interfaccia desiderata, come suggerito da altre risposte, oppure non implementare esplicitamente lo SyncTimestamp, ma farlo implicitamente: public DateTime SyncTimestamp { get; set; }. Quindi il this.SyncTimestamp funzionerà.

Problemi correlati