在C#中重载属性

好吧,我知道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; } 

那会做同样的事情。 思考?

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

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

一种方法(您可能会在自己之间争论这是否是一个好的设计选择)是添加第二个属性,以不同的forms访问数据。

但是,由于它将解析字符串(执行重要工作),最好不要为此使用属性,而是添加允许以字符串forms获取/设置数据的方法。

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

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