在C#中重载属性

时间:2010-04-09 15:55:52

标签: c# properties overloading

好的,我知道C#不支持属性重载 - 大多数参考文献通过引用单方法 - 不同 - 返回类型问题来解释它。然而,怎么样的二传手呢?我想直接将值指定为字符串或对象,但只返回字符串。

像这样:

    public string FieldIdList
    {
        get { return fieldIdList.ToString(); }
        set { fieldIdList = new FieldIdList(value); }
    }

    public FieldIdList FieldIdList 
    {
        set { fieldIdList = value; }
    }
    private FieldIdList fieldIdList;

为什么不允许这样做?我还看到“属性”只是在编译时创建getter / setter函数。是否可以创建自己的?类似的东西:

    public void set_FieldIdList(FieldIdList value)
    {
        fieldIdList = value;
    }

那会做同样的事情。想法?

4 个答案:

答案 0 :(得分:7)

属性实际上是一对get / set方法(其中一个可能被省略),但属性本身有额外的元数据,这使得它首先成为属性,而不仅仅是两个方法。

因为属性签名按照不同的返回类型仍然无效,即使您只有一个setter。如果您需要,请不要使用财产;仅限设置的属性反正不是一件好事。

答案 1 :(得分:1)

一种方法(你可能会在这些方面争论这是否是一个好的设计选择)是添加第二个属性,以不同的形式访问数据。

然而,由于它将解析字符串(做大量工作),最好不要为此使用属性,而是添加允许以字符串形式获取/设置数据的方法。

我会去提供ToString()和TryParse()接口的fieldIdList - 然后如果你需要它作为字符串,你可以调用myObject.FieldIdList.ToString()等。这样可以整齐地封装所有内容,允许你转换来自/来自代码中任何位置的字符串格式,而不仅仅是在将FieldIdLists作为其他类的成员访问时,并使客户端代码非常清晰易懂。

答案 2 :(得分:0)

如果您希望能够将属性设置为字符串或对象,那么您只需使用object作为属性的类型,因为它是基类(您可以将字符串传递给接受宾语)。这似乎不是特别好的设计决定,但它可以做到。也许你需要进一步解释你想要实现的目标?

答案 3 :(得分:0)

不能从C#7开始重载C#属性。

但是,可能进行包括您的财产在内的重新设计。

您可以在set块中使用条件来调用私有函数, 可以 被重载。

schema

此示例并不意味着使用私有功能显示重新设计注意事项 在设置块中调用。