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

3 回答 3

4

这应该有效:

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

注意周围的额外大括号(ISync)this

于 2013-02-14T19:06:54.683 回答
3

你只需要投射this

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

或者你可以在两个语句中做到这一点:

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

基本上,显式接口实现意味着该属性仅在您在 simplethis的上下文中查看时才可用ISync,而不是在实现类中。

于 2013-02-14T19:06:51.300 回答
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会工作。

于 2013-02-14T19:11:24.157 回答