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;

または、次の 2 つのステートメントで行うこともできます。

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

基本的に、明示的なインターフェイスの実装は、実装クラスではなく、this単にのコンテキストで表示している場合にのみプロパティが使用できることを意味します。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 に答える