c# - 命名索引器属性可能吗?

标签 c# properties indexed-properties

<分区>

假设我在类中有一个数组或任何其他集合,以及一个返回它的属性,如下所示:

public class Foo
{
    public IList<Bar> Bars{get;set;}
}

现在,我可以这样写吗:

public Bar Bar[int index]
{
    get
    {
        //usual null and length check on Bars omitted for calarity
        return Bars[index];
    }
}

最佳答案

不可以——您不能在 C# 中编写命名索引器。从 C# 4 开始,您可以将它们用于 COM 对象,但不能编写它们。

然而,正如您所注意到的,foo.Bars[index] 无论如何都会按照您的意愿行事...这个答案主要是为了 future 的读者。

详细说明:公开具有索引器的某种类型的 Bars 属性可以实现您想要的,但您应该考虑如何公开它:

  • 您是否希望调用者能够用不同的集合替换该集合? (如果不是,请将其设置为只读属性。)
  • 您希望调用者能够修改集合吗?如果是这样,如何?只是替换项目,或添加/删除它们?你需要对此进行任何控制吗?这些问题的答案将决定您想要公开什么类型 - 可能是只读集合,或者带有额外验证的自定义集合。

关于c# - 命名索引器属性可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3293495/

相关文章:

javascript - 如何使用 const 关键字将 Javascript 常量创建为对象的属性?

java - 如何使用PropertyUtils获取arraylist的属性

c# - 获取 TimeSpan 中的总小时数

c# - Azure 是否公开了 api 来支持在 azure 门户中创建资源?

java - 在java中从属性文件访问属性的最佳方法

c# - 在 C# 中轻松创建支持索引的属性

c# - 为什么 C# 不实现索引属性?

c# - 有 "Post deserialization hook"吗?

C# 按名称对 FileInfo 数组进行排序,得到一些意想不到的结果,需要知道是否有其他可用的排序选项

UML 序列图调用属性