具有不同类型的 C# 索引器属性

有什么方法可以使用不同类型的索引属性。我试图搜索这个论坛,但这个问题有点不同,因为我根本无法为索引属性指定名称。


那么如何做到这一点(当然编译器会抱怨):一个属性返回一个对象另一个数组。在 Visual Basic 中,这种类型是可能的,而在 C# 中则不是?


属性1:


private Point3d this[int index] {

    get {

        return this.m_Levels[this.m_NodeLevel[index]][index];

    }

    set {

        this.m_Levels[this.m_NodeLevel[index]][index] = value;

    }

}

物业2:


private Point3d[] this[int index] {

    get

    {

        return this.m_Levels[index];

    }

    set

    {

        this.m_Levels[index] = value;

    }

}


心有法竹
浏览 179回答 2
2回答

蝴蝶刀刀

使用相同的签名这是不可能的。编译器如何知道您调用了哪个索引器方法?您可能想要使用第二个参数(例如节点级别的索引),然后编译器可以区分这两个调用。对于属性 1,您可以使用此代码。private Point3d this[int nodeLevel, int index] {    get {        return this.m_Levels[this.m_NodeLevel[nodeLevel]][index];    }    set {        this.m_Levels[this.m_NodeLevel[nodeLevel]][index] = value;    }}除了索引器,您始终可以使用带有名称的函数(例如int GetValueAtLevel(int index))。

Qyouu

正如@slfan 所说,您不能为您的this财产提供两个相同的签名。为了您的理解,您可以将其转换为public int this[int index]{&nbsp; &nbsp; get&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return this.m_array[index];&nbsp; &nbsp; }&nbsp; &nbsp; set&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; this.m_array[index] = value;&nbsp; &nbsp; }}有了这个翻译:public int get_Item(int index){&nbsp; &nbsp; return this.m_array[index];}public void set_Item(int index, int value){&nbsp; &nbsp; this.m_array[index] = value;}让它变小:int this[int index] { get { ... } }等价于(等于?)int get_Item(int index) { ... }以同样的方式,你可以做到这一点:int get_Item(int index) { ... }int get_Item(byte index) { ... }int get_Item(float index) { ... }int get_Item(string index) { ... }你可以也使这样的:int this[int index] { get { ... } }int this[byte index] { get { ... } }int this[float index] { get { ... } }int this[string index] { get { ... } }但以同样的方式,你不能做到这一点:public int get_Item(int index) { ... }public int get_Item(int index) { ... } // <-- error也不:public int get_Item(int index) { ... }public float get_Item(int index) { ... } // <-- error你不能这样做:int this[int index] { get { ... } }int this[int index] { get { ... } } // <-- error也不:int this[int index] { get { ... } }float this[int index] { get { ... } } // <-- error
打开App,查看更多内容
随时随地看视频慕课网APP