如何在构造函数中设置属性值(显式接口实现)

时间:2013-02-14 19:03:48

标签: c# interface

[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的值?我尝试过铸造"这个。"但它不起作用

3 个答案:

答案 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就可以了。