首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在构造函数中设置属性值(显式接口实现)

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

Stack Overflow用户
提问于 2013-02-15 03:03:48
回答 3查看 960关注 0票数 6
代码语言:javascript
复制
[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的值?我试过演“这个”但它不起作用

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-15 03:06:55

这应该是可行的:

代码语言:javascript
复制
((ISync)this).SyncTimestamp = o.SyncTimestamp;

请注意(ISync)this周围的额外花括号。

票数 4
EN

Stack Overflow用户

发布于 2013-02-15 03:06:51

您只需要将this转换为

代码语言:javascript
复制
((ISync) this).SyncTimestamp = o.SyncTimestamp;

或者你可以用两个语句来完成:

代码语言:javascript
复制
ISync sync = this;
sync.SyncTimestamp = o.SyncTimestamp;

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

票数 3
EN

Stack Overflow用户

发布于 2013-02-15 03:11:24

这是因为您显式地实现了SyncTimestamp。不能从类实例访问显式实现。为什么?因为显式实现允许您实现具有相同成员名称的多个接口。

代码语言:javascript
复制
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就可以工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14882141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档