首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有空访问器的属性。

具有空访问器的属性。
EN

Stack Overflow用户
提问于 2012-01-16 17:24:25
回答 5查看 185关注 0票数 3

虽然我对汽车行业当然很熟悉,但我只是在工作中偶然发现,这似乎是一只截然不同的野兽:

代码语言:javascript
运行
复制
public SomeType SomeProp
{
  get
  {
    return someField;
  }
  set
  {
  }
}

我很惊讶它甚至编译了,我想它一定是个bug:这个属性似乎允许设置,但是这样做绝对不会做任何事情。

这个构造有什么用吗?是不是就像电梯里那些“关门”的按钮,什么都不做,但却让用户感觉很好?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-16 17:39:21

当结果需要在web服务中序列化或使用XML或二进制序列化程序时,您经常会看到这一点。

这是懒惰和草率,但它经常发生。这给对象留下了属性可设置的“外观”。如果这样做是为了实现一个接口并允许编译,那么开发人员需要在头部和肩膀上使用一个钝的对象,因为他刚刚打破了接口。如果有一个有效的理由不能实现它,那么开发人员需要把它踢回架构师那里进行审查。在实现接口时,不只是留下空的存根方法。如果目前还没有为实现定义的技术,那么至少抛出一个新的NotImplementedException,这样单元测试就会捕获它。

至于序列化: ReadOnly属性不包含在常规序列化中,这会使web服务客户端无法使用该属性。(参考文献:不能公开只读属性.)这是我们都应该迁移到WCF和DataContracts的原因之一。如果通过WCF接受此类作为方法的输入类型,则再次检索钝器对象。

票数 4
EN

Stack Overflow用户

发布于 2012-01-16 17:28:55

你为什么不希望它不编译?实际上,setter只是一个具有单个参数的void方法。您可以非常轻松地编写破损的方法,而不必期望编译器注意到--属性也是如此。

但是,我很难想象,除了“部分”实现之外,任何情况都是故意的--例如,演示语言特性,或者测试一些确实设置了属性的东西,但您不在乎测试将其设置为什么。(我个人至少还是会记录一下,财产已经设定好了。)

票数 5
EN

Stack Overflow用户

发布于 2012-01-16 17:28:08

这本身似乎并不有用,但是考虑一个需要类具有SomeProp的接口,您需要在类中实现这个接口,但是SomeProp只具有可读性和不可写性。

代码语言:javascript
运行
复制
public interface IQuestion
{
    public int AnwserToLife { get; set; } //leave out 'set' for read-only
}

public class HitchHiker : IQuestion
{
    public int AnwserToLife
    {
        get
        {
            return 42;
        }
        set
        {  
            //never changes
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8883797

复制
相关文章

相似问题

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