在C#中重载属性

end*_*ser 16 c# overloading properties

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

像这样:

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

    public FieldIdList FieldIdList 
    {
        set { fieldIdList = value; }
    }
    private FieldIdList fieldIdList;
Run Code Online (Sandbox Code Playgroud)

为什么不允许这样做?我还看到"属性"只是在编译时创建getter/setter函数.是否可以创建自己的?就像是:

    public void set_FieldIdList(FieldIdList value)
    {
        fieldIdList = value;
    }
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*ero 7

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

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

  • @Lucero:如果属性的类型是由get方法的返回类型强加的?在这种情况下,我们可以拥有多种类型的setter,set方法的主体处理必要的转换.编译器没有混淆,我们仍然得到强类型,因为set方法是按照方法重载规则选择的,而不需要使用`object`属性接受任何东西来解决提问者的问题(和我的一样,因为它是). (3认同)