好的,我知道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;
}
那会做同样的事情。想法?
答案 0 :(得分:7)
属性实际上是一对get / set方法(其中一个可能被省略),但属性本身有额外的元数据,这使得它首先成为属性,而不仅仅是两个方法。
因为属性签名按照不同的返回类型仍然无效,即使您只有一个setter。如果您需要,请不要使用财产;仅限设置的属性反正不是一件好事。
答案 1 :(得分:1)
一种方法(你可能会在这些方面争论这是否是一个好的设计选择)是添加第二个属性,以不同的形式访问数据。
然而,由于它将解析字符串(做大量工作),最好不要为此使用属性,而是添加允许以字符串形式获取/设置数据的方法。
我会去提供ToString()和TryParse()接口的fieldIdList - 然后如果你需要它作为字符串,你可以调用myObject.FieldIdList.ToString()等。这样可以整齐地封装所有内容,允许你转换来自/来自代码中任何位置的字符串格式,而不仅仅是在将FieldIdLists作为其他类的成员访问时,并使客户端代码非常清晰易懂。
答案 2 :(得分:0)
如果您希望能够将属性设置为字符串或对象,那么您只需使用object作为属性的类型,因为它是基类(您可以将字符串传递给接受宾语)。这似乎不是特别好的设计决定,但它可以做到。也许你需要进一步解释你想要实现的目标?
答案 3 :(得分:0)
您不能从C#7开始重载C#属性。
但是,可能进行包括您的财产在内的重新设计。
您可以在set块中使用条件来调用私有函数, 可以 被重载。
schema
此示例并不意味着使用私有功能显示重新设计注意事项 在设置块中调用。