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

В принципе, явная реализация интерфейса означает, что имущество доступен только при просмотре this в контексте просто ISync, а не класса реализации.

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 будет работать.

Смежные вопросы