2013-02-14 29 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将工作。

相关问题