[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的值?我尝试过铸造"这个。"但它不起作用
答案 0 :(得分:4)
这应该有效:
((ISync)this).SyncTimestamp = o.SyncTimestamp;
请注意(ISync)this
周围的额外大括号。
答案 1 :(得分:3)
您只需要投射this
:
((ISync) this).SyncTimestamp = o.SyncTimestamp;
或者你可以用两个陈述来做到这一点:
ISync sync = this;
sync.SyncTimestamp = o.SyncTimestamp;
基本上,显式接口实现意味着只有在简单this
的上下文中查看ISync
时才能使用该属性,而不是实现类。
答案 2 :(得分: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
就可以了。