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

Wie Festlegen des Werts von ISync.SyncTimestamp? Ich habe versucht, das "Dies" zu werfen. aber es funktioniert nichtwie Wert der Eigenschaft in Konstruktor (explizite Schnittstellenimplementierung) festgelegt wird

Antwort

4

sollte diese Arbeit:

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

Hinweis die zusätzlichen Klammern um (ISync)this.

3

Sie müssen nur werfen this:

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

Oder Sie könnten es in zwei Aussagen tun:

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

Grundsätzlich ist die explizite Schnittstellenimplementierung bedeutet, dass die Eigenschaft ist nur verfügbar, wenn Sie this im Kontext von einfach ISync anzeigen, nicht die Implementierungsklasse.

1

Dies liegt daran, dass Sie SyncTimestamp explizit implementiert haben. Auf explizite Implementierungen kann nicht von einer Klasseninstanz zugegriffen werden. Warum? Da Sie mit der expliziten Implementierung mehrere Schnittstellen mit demselben Membernamen implementieren können.

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

Dann this.FooBar Schreiben bezieht sich auf dem mit der Umsetzung? Also entweder Sie this auf die gewünschte Schnittstelle explizit, wie andere Antworten vorschlagen, oder Sie implementieren die SyncTimestamp nicht explizit, aber tun es implizit: public DateTime SyncTimestamp { get; set; }. Dann this.SyncTimestamp wird funktionieren.

Verwandte Themen